Подтвердить что ты не робот

Почему в моем расширении 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

4b9b3361

Ответ 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", но, к сожалению, значение массива отсутствовало...

В приложении Права:

введите описание изображения здесь

В расширениях расширения значение отсутствует в массиве:

введите описание изображения здесь

Также важно убедиться, что группа отображается на вкладке "Способность" для обеих целей (приложение и расширение) и что все три галочки зеленые, см. пример:

Цель приложения

введите описание изображения здесь

Цель расширения

введите описание изображения здесь