Получите доступ к настройкам .bundle с сегодняшнего дня

В приложении я могу выбрать в настройках, которые должны использоваться на трех языках. Если ничего не выбрано, язык iPhone будет обнаружен и выбран для английского, французского или немецкого языков. Если ни один из этих языков не является языком iPhone, установлен английский язык. Ручное изменение языка в настройках работает так, как должно. Теперь я добавил сегодняшнее расширение, которое работает почти хорошо, но мне нужно получить доступ к набору параметров, чтобы получить NSUserDefaults для языков (если вручную изменить). В обеих целях я активировал группы приложений с помощью

group.com.companyname.appname

и выбрал его.

В приложении я получаю язык с

NSString *manualLanguageSet = [[NSUserDefaults standardUserDefaults] valueForKey:SPRACHWAHL];

и в сегодняшнем расширении я пытаюсь получить его:

NSString *manualLanguageSet = [[[NSUserDefaults alloc] initWithSuiteName:@"group.com.companyname.appname"] valueForKey:SPRACHWAHL];

Для NSLog(@"Settings-Sprache: %@", manualLanguageSet); при запуске сегодняшнего расширения результат (не имеет значения, если и какой язык выбран в настройках)

2014-09-13 16: 48: 36.331 HdB сегодня [3734: 284836] Настройки-Sprache: (null)

Что я могу сделать правильно/как получить доступ к настройкам (settings.bundle)?

Ответ 1

Я тоже ищу его. Единственный способ, которым я знаю, как это сделать, - это использовать SharedContainer. В вашем примере вы должны открыть

[[[NSUserDefaults alloc] initWithSuiteName:@"group.com.companyname.appname"] valueForKey:SPRACHWAHL];

в приложении-контейнере, а затем скопируйте значение языка из NSUserDefaults приложения-контейнера следующим образом:

[[[NSUserDefaults alloc] initWithSuiteName:@"group.com.companyname.appname"] setObject:[NSUserDesaults standardUserDefaults] objectForKey:SPRACHWAHL] forKEY:@"Your Key in extension"]];

тогда вы сможете получить доступ к своему совместно используемому контейнеру в своем расширении и получить эти значения.

Если у кого-то есть лучший способ сделать это, я тоже буду рад узнать.

Ответ 2

Если вы создаете пакет настроек WatchKit, он также содержит ключ

ApplicationGroupContainerIdentifier

на корневом уровне словаря пакета Root.plist, причем значение является идентификатором группы (то, что вы предоставили NSUserDefaults как имя набора).

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

Я проверил это, чтобы работать на iOS 8.3 в приложении iOS Settings, приложении iPhone и расширении WatchKit.

ОБНОВЛЕНИЕ: Apple перечисляет этот ключ, как поддерживается в iOS 8.2 и более поздних версиях https://developer.apple.com/library/ios/documentation/PreferenceSettings/Conceptual/SettingsApplicationSchemaReference/Articles/RootContent.html