Получите доступ к настройкам .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