Почему в моем расширении WatchKit не будут работать группы приложений?
Я видел все остальные сообщения SO о совместном использовании данных NSUserDefaults между хост-приложениями и расширениями приложений, но мои все еще не работают. Здесь все, что я сделал:
- Включить группы приложений на вкладке "Возможности" Xcode для приложения расширения и хоста.
- Задайте имя группы "group.com.mycompany.foo" и подтвердите, что добавление и хост-приложение добавлены в группу.
- Подтвержден файл прав для обоих с ключом "com.apple.security.application-groups", установленным для моего имени группы приложений. (Для чего это стоит, я также использую общие возможности keychain между приложением расширения и хоста, и это работает - поэтому я не верю, что это проблема с правами).
- Регенерирует все профили обеспечения. Фактически, я даже отозвал все свои сертификаты и обновил все профили после настройки группы приложений.
И после всего этого код все равно не работает:
// in the host app
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
[testDefaults setObject:@"TEST" forKey:@"foo"];
[testDefaults synchronize];
а затем:
// in the extension
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
NSLog(@"%@", [testDefaults objectForKey:@"foo"]);
что приводит к:
(null)
Когда я смотрю в настройках Xcode, я замечаю эти значки, ни один из которых не имеет иконки "Группа приложений":
![Xcode Preferences - Entitlements]()
Но, как я уже говорил, я дошел до того, как очистил свои профили ключей, сертификаты и профилирование после настройки группы приложений. Итак, если это действительно проблема, как добавить право на профили?
Что мне не хватает? Я свеж от идей.
Справка
EDIT. Группы доступа работают в моем расширении Today и Safari, а не в расширении WatchKit. Я понятия не имею, почему, и все настройки сборки отображаются так же.
EDIT 2. Для тех, кто настаивает на том, что мои возможности не настроены должным образом, снимок экрана: ![Capabilities]()
Ответы
Ответ 1
У меня была аналогичная проблема. Что я заметил, что приложение WatchKit Extension и WatchKit имеет одинаковые идентификаторы пакетов. Я изменил идентификатор пакета моего приложения WatchKit. Также я не забыл изменить NSExtensionAttributes/WKAppBundleIdentifier в info.plist Extension, чтобы соответствовать этому id. Теперь все работает. Надеюсь, это поможет вам!
В ближайшее время: Идентификаторы пакетов для WatchKit App и Extension должны быть разными!
Ответ 2
Вы пытались прочитать тот же ключ из приложения iPhone?
Я считаю, что проблема заключается в том, что вы не активировали право на участие в группе приложений в своем расширении WatchKit.
-
Выберите расширение WatchKit в настройках проекта.
-
Выберите вкладку Capabilities в разделе WatchKit Extension и найдите группы приложений и поместите ее на.
-
Выберите тот же идентификатор группы приложений, который был создан ранее (он должен появиться автоматически и просто проверьте его).
Ответ 3
Вот что помогло. По-видимому, Xcode автоматически создал новый файл Entitlements для нового расширения (возможно, после того, как я настроил его из "Capabilities", но, к сожалению, значение массива отсутствовало...
В приложении Права:
![введите описание изображения здесь]()
В расширениях расширения значение отсутствует в массиве:
![введите описание изображения здесь]()
Также важно убедиться, что группа отображается на вкладке "Способность" для обеих целей (приложение и расширение) и что все три галочки зеленые, см. пример:
Цель приложения
![введите описание изображения здесь]()
Цель расширения
![введите описание изображения здесь]()