Почему группы приложений не работают внутри моего расширения WatchKit?

Я видел все другие посты SO о совместном использовании данных NSUserDefaults между хост-приложениями и расширениями приложений, но мой по-прежнему не работает. Вот все, что я сделал:

  1. Включите группы приложений на вкладке "Возможности" Xcode для расширения и хост-приложения.
  2. Задайте имя группы "group.com.mycompany.foo" и убедитесь, что расширение и приложение хоста добавлены в группу.
  3. Подтверждено, что файл прав существует для обоих с ключом "com.apple.security.application-groups", установленным на мое имя группы приложений. (Что бы это ни стоило, я также использую возможности общей цепочки для ключей между расширением и хост-приложением, и это работает - так что я не думаю, что это проблема с правами)
  4. Восстановлены все профили обеспечения. На самом деле, я даже отозвал все свои сертификаты и заново создал все профили после настройки группы приложений.

И после всего этого этот код все еще не работает:

// 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 - Права

Но, как я уже говорил ранее, я пошел до того, что очистил свою цепочку для ключей, сертификаты и профили обеспечения после настройки группы приложений. Так что, если это действительно проблема, как мне добавить права на профили?

Что мне не хватает? Я свежая из идей.

Помогите?

РЕДАКТИРОВАТЬ: Группы доступа работают в моем расширении Today & Safari, но не в расширении WatchKit. Я понятия не имею, почему, и все параметры сборки, похоже, настроены одинаково.

РЕДАКТИРОВАТЬ 2: Для тех, кто настаивает на том, что мои возможности не настроены должным образом, вот скриншот: возможности

3 ответа

Решение

У меня была похожая проблема. Что я заметил, так это то, что мои WatchKit Extension и WatchKit App имели одинаковые идентификаторы пакетов. Я изменил идентификатор пакета моего приложения WatchKit. Также я не забыл изменить NSExtensionAttributes/WKAppBundleIdentifier в info.plist Расширения, чтобы соответствовать этому идентификатору. Теперь все работает. Я надеюсь, что это поможет вам!

Коротко: идентификаторы комплекта приложения WatchKit и расширения должны отличаться!

Вы пытались прочитать тот же ключ из приложения iPhone?

Я считаю, что проблема заключается в том, что вы не активировали право группы приложений в своем расширении WatchKit.

  1. Выберите расширение WatchKit в настройках вашего проекта.

  2. Выберите вкладку "Возможности" под расширением WatchKit, найдите "Группы приложений" и включите его.

  3. Выберите тот же идентификатор группы приложений, который вы создали ранее (он должен появиться автоматически и просто отметьте его).

Вот что помогло мне. Очевидно, Xcode автоматически создал новый файл Entitlements для нового Расширения (возможно, после того, как я установил его из "Возможности", но, к сожалению, значение массива отсутствовало...

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

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

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

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

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

Другие вопросы по тегам