Подтвердить что ты не робот

Доступ к ресурсам в контейнере

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

Ресурсы Cocoapods

Связки ресурсов Cocoapods

Связки ресурсов Mokacoding

Пакеты ресурсов Дэвида Поттера

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

[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}']
}

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

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

4b9b3361

Ответ 1

Это зависит от используемой вами версии Cocoapod. С более старыми версиями 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, который " Возвращает объект NSBundle, с которым связан указанный класс"

Пример:

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

Ответ 2

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

Что работает +bundleWithPath:, например:

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

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

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