2014-09-12 1 views
13

Я хотел бы включить объекты изображения в библиотеку cocoapod, но у меня возникли проблемы с их доступом. Я прочитал эти ресурсы для помощи:Доступ к ресурсам в pod

Cocoapods Resources

Cocoapods Resource Bundles

Mokacoding Resource Bundles

David Potter Resource Bundles

Однако никто не указывает мне в направлении доступа к ресурсам. Я пробовал следующее:

[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets.bundle"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"my-image" withExtension:@"png"]]] 
[[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageNamed:@"my-asset"] 
[UIImage imageNamed:@"[email protected]"] 

Но никто из них не работает.

Я настроить мой podspec с этими альтернативами и не работают с вышесказанным:

s.resources = ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
s.resource_bundles = { 
    'Assets' => ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
} 

ресурсы отображаются в разделе «Развитие Бобы/My App/Ресурсы» после pod update, но я не могу их открыть для жизни меня. Нет никаких пакетов, и нет ничего под названием «Активы».

Любая помощь или руководство будут оценены.

+0

вы делаете, как '' s.resources' и s.resource_bundles' или пытались их по отдельности? Возможно, есть какое-то столкновение. –

+0

@NiklasBerglund Обе по отдельности. – RileyE

ответ

5

Это тоже сработало. Возможно, я недопонимаю +bundleWithIdentifier:, но я не думаю, что вы можете использовать его, чтобы попасть в пакет ресурсов внутри пакета приложений для iOS. Дополнительную информацию см. В разделе "Getting Bundles by Identifier" в документации по пакету.

Что работа является +bundleWithPath:, например .:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

Я завернул, что внутренность dispatch_once блока и вызвать его в любое время мне нужно открыть сверток.

Я использую синтаксис s.resource_bundles в моем podspec, и это прекрасно работает с ним.

9

Это зависит от версии Cocoapods, которую вы используете. В старых версиях cocoapods, вы могли бы уйти с использованием [NSBundle mainBundle]: pathForResource: OfType:

NSString *bundlePath = [[NSBundle mainBundle] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

Если вы используете новый Cocoapods и используя spec.resource_bundles вместо spec.resources в своем podspec файл, должны избегать mainBundle и заменить его NSBundle bundleForClass, что "Returns the NSBundle object with which the specified class is associated"

Пример:

NSString *bundlePath = [[NSBundle bundleForClass:[MyFrameworkClass class]] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
+0

Спасибо - я рассмотрю это – RileyE

+0

В качестве дополнения к этому я обнаружил, что это не работает для загрузки изображений из каталогов активов, расположенных в Cocapod. Больше информации здесь: http://stackoverflow.com/a/23903860/235290 Я подтвердил это своими коллегами, которые также подтвердили, что нет известного способа сделать это. Таким образом, вы должны использовать автономные файлы изображений, а не каталоги активов. – Hugh