Я реализовал функцию расширения приложения поставщика документов в своем собственном приложении для iOS. Проблема заключается в том, что расширение приложения не смогло получить доступ к изображениям/активам приложения или к данным ресурсов приложения. Кто-нибудь знает, как этого добиться?
как расширение приложения может получить доступ к содержащимся в нем изображениям/активам/ресурсным данным
Ответы (2)
Расширение имеет свою собственную цель в вашем проекте Xcode. Чтобы получить доступ к ресурсам в расширении, вам также необходимо добавить их в эту цель (в File Inspector
также проверьте цель расширения в разделе Target Membership
). Просто имейте в виду, что эти ресурсы также копируются в пакет расширений, что увеличивает общий размер вашего приложения.
Примечание. В моем расширении я не добавлял свой каталог ресурсов изображений по умолчанию (Images.xcassets
) в расширение, но по-прежнему имел доступ к содержащимся изображениям. Может быть, это исключение.
EXTENSION_BUILD
в цели расширения и добавил несколько #ifndef
, чтобы исключить некоторые фрагменты кода и включения из этих классов. Не слишком красиво, но работает. Я думаю, мне придется реорганизовать позже...
- person Frank Schlegel; 12.09.2014
ОБНОВЛЕНИЕ Если вы поддерживаете iOS 8 и более поздние версии, вы можете создать структуру для совместного использования между вашим приложением и его расширениями, а также встроить в нее ресурсы, строки и т. д. Обязательно используйте методы [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]
и NSLocalizedStringFromTableInBundle
, передавая пакет, который является вашей структурой.
ПРЕДЫДУЩИЙ ОТВЕТ Учитывая, что расширения находятся (и, надеюсь, всегда будут) в подпапке основного приложения в /Plugins/PluginName и имеют разрешения на доступ к файлам, как и основное приложение, вы можете выполнить следующее (и я делаю это в некоторых своих приложениях в магазине):
// image
UIImage* image = [UIImage imageNamed:@"../../image_name.png"]
// data
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"../../file.json"];
NSData* data = [NSData dataWithContentsOfFile:path];
Это сэкономит вам много места, особенно если ваше расширение использует много изображений.