Расширение 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?
2 ответа
Хорошо, я нашел ответ на форумах разработчиков Apple.
На вкладке "Возможности" цели XCode оказалось, что у меня установлены все правильные права. И я мог видеть файл "Права" в моем проекте, открыть его и убедиться, что он был настроен правильно.
НО - если я заглянул под вкладку "Настройки сборки" моей цели приложения, в разделе "Подписание кода" не было файла разрешений. (Все это правильно отображается для расширения WatchKit, но не для основного приложения iPhone).
Когда я подключил имя своего файла с правами доступа к подписи кода, все начало работать.
Это кажется мне ошибкой - я не верю, что вкладка "Возможности" и вкладка "Настройки сборки" одной и той же цели когда-либо искали права в разных местах. Но хотел опубликовать ответ, который работал для меня здесь, на случай, если кто-то еще столкнется с этим.
Сводка: чтобы убедиться, что права доступа правильные, вы должны увидеть, как правильно настроены переключатели в разделе "Возможности", и вы должны увидеть файл полномочий, на который есть ссылки в разделе "Параметры сборки / Подписание кода".
Вы должны добавить разрешение в свой профиль обеспечения расширения приложения. Чтобы сделать это, войдите в свою учетную запись разработчика, чтобы добавить разрешения, после этого загрузите последний профиль обеспечения. Чтобы проверить, была ли группа приложений включена или нет, откройте загруженный профиль обеспечения в "TextEditor" и выполните поиск "группа приложений". Это покажет вам результат, если вы сделали это правильно. Используйте эти недавно загруженные профили инициализации, и вам покажут галочку в возможностях.