Доступ к ресурсам в контейнере
Я хотел бы включить объекты изображения в библиотеку 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
, но я не могу получить к ним доступ для жизни. Нет никаких пакетов, и нет ничего под названием "Активы".
Любая помощь или руководство будут оценены.
Ответы
Ответ 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, и это отлично работает с ним.