2015-04-13 1 views
3

Я создал виджет сегодня, и я хочу показать, какая версия работает на экране моего хост-приложения. Есть ли способ сделать это?Могу ли я прочитать info.plist моего расширения приложения в своем хост-приложении?

Я попытался заменить [NSBundle mainBundle] на bundleWithIdentifier, но это не удастся. Итак, есть ли способ получить infoDictionary из комплекта расширения, или я трачу свое время?

+0

Вы всегда можете использовать NSUserDefaults по имени пакета, '[[NSUserDefaults alloc] initWithSuiteName: @" group.com.mycompany.myapp "]' установить версию в основном приложении и получить доступ к ней в расширении. – iphonic

+0

Это работает, если расширение было открыто перед приложением. – Moshe

ответ

4

Вы можете снять это, указав прямой путь к комплекту расширения. Похоже, расширения приложений живут в папке PlugIns/ в главном комплекте приложения. Вы можете создать экземпляр NSBundle с помощью -initWithPath:. Например:

- (NSBundle *)appExtensionBundle { 
    NSString *plugInsPath = [NSBundle mainBundle].builtInPlugInsPath; 
    NSString *appExtensionPath = [plugInsPath stringByAppendingPathComponent:@"MyTodayExtension.appex"]; 
    return [[NSBundle alloc] initWithPath:appExtensionPath]; 
} 

ПРИМЕЧАНИЕ. Этот код был протестирован только с расширением Today. Вы должны проверить, чтобы он работал правильно, если у вас есть другие типы расширений.

+0

Посмотрим, работает ли это ... И это так. – Moshe

+0

Работы для расширения сети – Stavash

+0

Отлично работает для меня – Bruno

0

Вы не можете. Приложение и расширение не могут обращаться друг к другу с кодом и адресным пространством. Они могут делиться только данными, используя общий доступ к контейнеру с помощью AppGroup или с помощью общего NSUserDefault.

Использование обоих подходов потребует от вас продлить хотя бы один раз.

+0

Спасибо, кажется, что это случай. – Moshe

 Смежные вопросы

  • Нет связанных вопросов^_^