Расширение 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://stackoverflow.com/questions/27047455/how-to-shared-storage-between-app-and-extension-with-app-group-and-

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


person Mike Yawn    schedule 16.03.2015    source источник


Ответы (2)


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

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

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

Когда я вставил имя своего файла прав в разделе «Подписание кода», все заработало.

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

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

person Community    schedule 17.03.2015

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

person Santhosh    schedule 17.03.2015