Расширение WatchKit не видит обновлений NSUserDefaults для группы приложений

Я видел пару вопросов по этому поводу и перепробовал все предоставленные ответы, но это все еще не работает для меня.

Я пытаюсь поделиться несколькими небольшими фрагментами данных (строки и BOOL) между моим iPhone-приложением и его расширением WatchKit. (Если это имеет какое-то значение, информация читается GlanceController из WK-приложения)

На сайте разработчика я создал группу приложений (group.com.theYawns.Sorcerers-Apprentice). Если я посмотрю на "Идентификаторы приложений", то у меня появятся два идентичных идентификатора для моего приложения (com.theYawns.Sorcerers-Apprentice) и один для расширения (com.theYawns.Sorcerers-Apprentice.watchkitextension). Для каждого из них включена "Группа приложений" (как для разработки, так и для распространения), и группа приложений выбирается, если я редактирую идентификатор приложения.

Я включил "Группы приложений" в возможностях как для приложения, так и для расширения. Меня беспокоит то, что периодически - несколько раз в день, но не во всех сборках - если я захожу и смотрю на вкладку "Возможности", у меня появляется красный восклицательный знак с надписью "Добавить группы приложений" в файл разрешений. Если я посмотрю на файл с правами, то там есть право, и если я нажму "Исправить проблему", красный восклицательный знак изменится на галочку. Но тот факт, что это нужно делать несколько раз в день, беспокоит меня, что что-то не так.

Я много раз обновлял свои профили обеспечения в настройках XCode, и хотя я не вижу значок "Группы приложений" в разделе "Права", при наведении курсора я вижу группы приложений в всплывающей подсказке.

Как в моем приложении, так и в расширении я получаю ссылку на пользовательские настройки по умолчанию через

NSUserDefaults *sharedAppDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.theYawns.Sorcerers-Apprentice"]; 

Я также попытался добавить [sharedAppDefaults synchonize] после каждой записи и до того, как мой WatchKit попытается прочитать, на случай, если что-то не удалялось. (Не имеет никакого значения).

Мой идентификатор пакета расширения WatchKit отличается от идентификатора пакета приложения iPhone, что является одним из ответов, которые я видел в другой ветке.

Я также добавил NSTimer для обновления взгляда каждые 10 секунд, поэтому, если возникла проблема с синхронизацией при получении изменений, я ожидал бы, что она разрешится сама собой после одного или двух циклов обновления, но это не так.

Действительно озадачен... кажется, что у других проблема была решена с помощью ответов из других тем, но ни один из них не помог мне.

Другие темы, которые я искал, включают:

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

https://stackru.com/questions/27047455/how-to-shared-storage-between-app-and-extension-with-app-group-and-

WatchKit NSUserDefaults и NSKeyedUnarchiver проблема

2 ответа

Решение

Хорошо, я нашел ответ на форумах разработчиков Apple.

На вкладке "Возможности" цели XCode оказалось, что у меня установлены все правильные права. И я мог видеть файл "Права" в моем проекте, открыть его и убедиться, что он был настроен правильно.

НО - если я заглянул под вкладку "Настройки сборки" моей цели приложения, в разделе "Подписание кода" не было файла разрешений. (Все это правильно отображается для расширения WatchKit, но не для основного приложения iPhone).

Когда я подключил имя своего файла с правами доступа к подписи кода, все начало работать.

Это кажется мне ошибкой - я не верю, что вкладка "Возможности" и вкладка "Настройки сборки" одной и той же цели когда-либо искали права в разных местах. Но хотел опубликовать ответ, который работал для меня здесь, на случай, если кто-то еще столкнется с этим.

Сводка: чтобы убедиться, что права доступа правильные, вы должны увидеть, как правильно настроены переключатели в разделе "Возможности", и вы должны увидеть файл полномочий, на который есть ссылки в разделе "Параметры сборки / Подписание кода".

Вы должны добавить разрешение в свой профиль обеспечения расширения приложения. Чтобы сделать это, войдите в свою учетную запись разработчика, чтобы добавить разрешения, после этого загрузите последний профиль обеспечения. Чтобы проверить, была ли группа приложений включена или нет, откройте загруженный профиль обеспечения в "TextEditor" и выполните поиск "группа приложений". Это покажет вам результат, если вы сделали это правильно. Используйте эти недавно загруженные профили инициализации, и вам покажут галочку в возможностях.

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