Почему группы приложений не работают в моем расширении 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, я замечаю эти значки, ни один из которых не имеет значка «Группа приложений»: Права">

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

Что мне не хватает? У меня закончились идеи.

Помощь?

EDIT: группы доступа работают в моем расширении Today & Safari, но не в расширении WatchKit. Я понятия не имею, почему, и все параметры сборки настроены одинаково.

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


person user2393462435    schedule 05.03.2015    source источник
comment
Вы пытались нажать кнопку обновления в левом нижнем углу списка профилей подготовки Xcode?   -  person Tom Harrington    schedule 06.03.2015
comment
Наверное, миллион раз. :(   -  person user2393462435    schedule 06.03.2015
comment
В прикрепленном вами представлении нет значка групп приложений в столбце «Права» (по крайней мере, у меня его нет, и группы приложений работают для меня). Вернемся к проблеме: уверены ли вы на 100%, что и хост-приложение, и цель расширения подписаны с правильным профилем подготовки и идентификатором кодового знака? И под правильным я подразумеваю com.mycompany.foo.myapp и com.mycompany.foo.myapp.myappwatchkitextension. Подстановочный знак здесь не сработает.   -  person lvp    schedule 06.03.2015
comment
FWIW, ни один из моих профилей не включает значок группы приложений, даже те, которые действительно работают с группами приложений. Я бы не обращал внимания на то, отображается ли значок в этом списке. Если в разделе возможностей целевого приложения указаны группы приложений, должно быть все, что нужно.   -  person Tom Harrington    schedule 07.03.2015
comment
Ладно, я не буду обращать внимание на значки. Возможности определенно включены. А профили обеспечения задаются явно, без подстановочных знаков (com.myapp и com.myextension). Я выдергиваю свои волосы, и у меня осталось не так уж много волос.   -  person user2393462435    schedule 07.03.2015
comment
Я также только что заметил, что группы доступа работают в других моих расширениях, но не в расширении WatchKit. Сюжет закручивается...   -  person user2393462435    schedule 07.03.2015
comment
@user2393462435 user2393462435 Вы создаете с отладочной конфигурацией или выпуском? Вы решили это?   -  person Rpranata    schedule 12.03.2015
comment
Очень хороший вопрос. У меня та же проблема. Приложение My Watch Kit хорошо работало в XCode 6 beta 3. Но, поскольку я использовал приложение для просмотра XCode 6.2, не смог получить доступ к группе приложений. Я пробовал почти все: переустанавливал и сбрасывал симулятор, чистил проект, собирал для отладки и релиза, экспериментировал с правами. Ничего не помогает.   -  person kelin    schedule 13.03.2015


Ответы (3)


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

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

person kelin    schedule 13.03.2015
comment
Это была проблема! БОЛЬШОЕ СПАСИБО! - person user2393462435; 13.03.2015
comment
Это не будет работать для WachOS 2+. В этом случае вы должны использовать WatchConectivity - person marcelosalloum; 18.05.2016

Вот что помогло мне. По-видимому, Xcode автоматически создал новый файл прав для нового расширения (вероятно, после того, как я настроил его из «Возможностей», но, к сожалению, значение массива отсутствовало...

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

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

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

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

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

Целевое приложение

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

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

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

person Oded Regev    schedule 09.09.2015

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

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

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

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

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

person BalestraPatrick    schedule 11.03.2015
comment
Он включен, и файл прав выглядит идентично файлу прав для моих расширений, которые уже работают. Мои настройки сборки правильно ссылаются на этот файл прав (я знаю это, потому что общая цепочка ключей работает, несмотря на то, что группа приложений не работает). - person user2393462435; 11.03.2015
comment
Вы пытались прочитать тот же ключ после установки его в приложении для iPhone? - person BalestraPatrick; 11.03.2015
comment
Смотрите код в исходном вопросе. Ставлю и читаю с одного ключа. - person user2393462435; 11.03.2015
comment
Это правильный ответ, я часами искал его в Интернете. Я выделил жирным шрифтом раздел, где мы должны выбрать расширение приложения, а затем включить эту возможность. Спасибо чувак! - person Sam B; 12.03.2015
comment
Это не правильный ответ. Вот скриншот моих настроек. Это ясно показывает, что это настроено правильно, но ВСЕ ЕЩЕ не так. Это работает в других расширениях, но не в расширении watchkit: i.imgur.com/JR9lwaO.jpg - person user2393462435; 12.03.2015