как расширение приложения может получить доступ к содержащимся в нем изображениям/активам/ресурсным данным

Я реализовал функцию расширения приложения поставщика документов в своем собственном приложении для iOS. Проблема заключается в том, что расширение приложения не смогло получить доступ к изображениям/активам приложения или к данным ресурсов приложения. Кто-нибудь знает, как этого добиться?


person loganathan    schedule 08.09.2014    source источник


Ответы (2)


Расширение имеет свою собственную цель в вашем проекте Xcode. Чтобы получить доступ к ресурсам в расширении, вам также необходимо добавить их в эту цель (в File Inspector также проверьте цель расширения в разделе Target Membership). Просто имейте в виду, что эти ресурсы также копируются в пакет расширений, что увеличивает общий размер вашего приложения.

Примечание. В моем расширении я не добавлял свой каталог ресурсов изображений по умолчанию (Images.xcassets) в расширение, но по-прежнему имел доступ к содержащимся изображениям. Может быть, это исключение.

person Frank Schlegel    schedule 10.09.2014
comment
Я следую только этому пути. Да, размер приложения увеличивается, как и все. Если я использую общую встроенную структуру (содержит изображения и общий код), то это будет работать правильно? Это также не увеличит размер приложения. - person loganathan; 11.09.2014
comment
Звучит правильно. Но имейте в виду, что встроенные фреймворки поддерживаются только в iOS 8. - person Frank Schlegel; 11.09.2014
comment
о нет... тогда что случилось с ios7!!!?. На самом деле я хочу поддерживать как ios7, так и ios8. Любая другая идея? - person loganathan; 11.09.2014
comment
Вот такая же проблема у меня. Поскольку у меня не так много ресурсов, я пока придерживаюсь их дублирования. Я предполагаю, что ваше расширение не использует все изображения, которые использует приложение. Таким образом, вы можете уменьшить размер, извлекая их в другой каталог ресурсов и добавляя только этот каталог в свое расширение. - person Frank Schlegel; 11.09.2014
comment
конечно, прямо сейчас я собираюсь продублировать необходимые активы для расширения действия, как вы предлагаете. Спасибо за предложение :-). Но как я могу сделать общий путь кода для совместного использования между содержащим приложением и приложением-расширением. Любой хороший способ достичь этого? - person loganathan; 12.09.2014
comment
Ну собственно так же. Добавьте классы, которые вам нужны, в цель расширения. У меня была проблема, что некоторые из моих классов, которые я хотел повторно использовать, использовали код или импортированные классы, которые я не хотел или не мог использовать в расширении. Поэтому я определил макрос EXTENSION_BUILD в цели расширения и добавил несколько #ifndef, чтобы исключить некоторые фрагменты кода и включения из этих классов. Не слишком красиво, но работает. Я думаю, мне придется реорганизовать позже... - person Frank Schlegel; 12.09.2014
comment
Отлично :-) позвольте мне следовать в том же духе, пока не найду идеальный вариант. Спасибо еще раз!!!! - person loganathan; 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];

Это сэкономит вам много места, особенно если ваше расширение использует много изображений.

person jjxtra    schedule 13.10.2014