пакет настроек не работает на watchOS 2

Это НЕ было проблемой в watchOS 1, но теперь в watchOS 2 я не могу прочитать значения в расширении часов.

Согласно документы Apple, это возможно. По словам некоторых людей в этой теме, это возможно. По словам сотрудника Apple в этой теме, это возможно.

Я настраиваю все правильно, насколько я могу судить:

  • Я включил группы приложений как в приложении iOS, так и в расширении для часов с одним и тем же идентификатором.
  • Я добавил Settings-Watch.bundle в приложение iOS и добавил ApplicationGroupContainerIdentifier с тем же идентификатором в plist.

Когда я инициализирую объект NSUserDefaults с идентификатором в качестве имени набора, я не могу прочитать значения в расширении наблюдения. Я могу прочитать их в приложении для iOS. Это происходит в симуляторе и реальном устройстве.

Пожалуйста, НЕ публикуйте ответ о том, как это сделать с помощью Watch Connectivity. Это можно сделать только с помощью общих групп приложений в watchOS 2 без Watch Connectivity, люди могут это сделать, и здесь это прямо из документы:

В watchOS 2 ваше расширение WatchKit может считывать значения настроек, но вы не можете записывать новые значения. Настройки в watchOS 2 пересылаются с iOS на Apple Watch, но любые внесенные вами изменения не отправляются обратно на iOS.


person spybart    schedule 17.09.2015    source источник
comment
Не могли бы вы опубликовать пример того, как вы пытаетесь прочитать пакет настроек?   -  person agy    schedule 23.09.2015
comment
Я пробовал это и на часах, и я могу подтвердить, что проблема не устранена! (Группы включены, с правильным профилем и настройками)   -  person insanoid    schedule 24.09.2015


Ответы (3)


Я отредактировал свой ответ. Ранее в нем говорилось о невозможности использования групп приложений для синхронизации данных в watchOS 2, но ваш конкретный вопрос касается пакета настроек, который по-прежнему синхронизируется с iOS на Apple Watch. в watchOS 2.

Я не могу заставить это работать в Xcode 7.1/7.2 в симуляторе, но это работает на реальном устройстве. Из документации:

Настройки в watchOS 2 пересылаются с iOS на Apple Watch, но любые внесенные вами изменения не отправляются обратно на iOS. В watchOS 1 расширения WatchKit имеют прямой доступ к базе данных по умолчанию и могут читать и записывать значения.

Для всех трех целей должна быть настроена одна и та же группа приложений (название приложения Watch здесь, по-видимому, является недостающим компонентом в вопросе OP):

цели группа приложений

Мои настройки:

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

Небольшой код простого интерфейса в InterfaceController.swift:

@IBOutlet var label: WKInterfaceLabel!

@IBAction func buttonAction() {

    let sharedDefaults = NSUserDefaults.init(suiteName: "group.testSettings")
    let name_preference = String(sharedDefaults?.objectForKey("name_preference"))
    self.label.setText(name_preference)
}

и окончательный результат:

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

Итак, это работает, как и ожидалось, только не в симуляторе. Кажется, что между двумя устройствами в Simulator происходит некоторая изоляция, и это немного расстраивает, пытаясь понять, что именно там происходит.

person Charlie Schliesser    schedule 22.09.2015
comment
Первый блок цитируемого текста как раз то, о чем я говорю. Настройки в watchOS 2 перенаправляются с iOS на Apple Watch. Зачем им это писать, если это не откровенная ложь? - person spybart; 22.09.2015
comment
также проверьте мой пересмотренный вопрос, я разместил ссылку на ветку, где сотрудник Apple говорит, что это возможно. - person spybart; 23.09.2015
comment
Это интересно, и я пытаюсь проработать это вместе с вами :) Вы имеете в виду эту цитату, да? Однако есть одно исключение, и это пакет настроек. Это будет автоматически синхронизировано с iPhone на часы. Похоже, что пакет настроек все еще должен быть перенесен на Apple Watch. - person Charlie Schliesser; 23.09.2015
comment
Верный. И в одной из других тем, на которые я ссылался, люди говорят, что у них это работает. - person spybart; 23.09.2015
comment
@spybart см. исправленный ответ. - person Charlie Schliesser; 24.09.2015
comment
Спасибо за исправленный ответ. Единственное, что вы делаете иначе, чем я, — это также включает группы приложений в цель приложения для часов. Я проверю это и посмотрю, работает ли это для меня. - person spybart; 25.09.2015
comment
У меня в Симуляторе не работает. Я пробую много вещей, чтобы выяснить, почему... Если вы можете заставить это работать, пожалуйста, дайте мне знать! - person Charlie Schliesser; 25.09.2015
comment
Это сработало! Решение действительно состояло в том, чтобы добавить группы приложений ко всем трем целям. В watchOS 1 вам не нужно было добавлять его в целевое приложение для часов, и в документации нет упоминания об этом новом требовании. Работает только на реальном устройстве, в симуляторе не работает. У меня есть открытый отчет об ошибке в Apple, я сообщу им об этом открытии. Спасибо! Идите вперед и сделайте пометку об этом в своем ответе, и я приму ответ. - person spybart; 25.09.2015
comment
Пересмотренный ответ. В документах определенно не говорилось о добавлении приложения Watch в качестве цели. Рад, что вы открыли ошибку! Я обнаружил ошибку, связанную с тем, что симуляторы не разговаривают друг с другом, как ожидалось. - person Charlie Schliesser; 25.09.2015
comment
На странице отчета об ошибке есть ошибка, и она зависает, бесконечно загружая мой билет. - person spybart; 26.09.2015
comment
Он работает, однако NSUserDefaultsDidChangeNotification не приходит, когда пользователи меняют настройки. В итоге, что делать, если настройки связаны с усложнением, нет возможности обновляться в реальном времени. Я предпочитаю использовать настройки в приложении и WCSession для взаимодействия с пользователем. - person jeeeyul; 14.10.2015
comment
Есть еще одно ограничение. Вы не должны сохранять экземпляр NSUserDefault. Вы должны повторно инициировать NSUserDefault, когда это необходимо. Существующий экземпляр никогда не синхронизируется. - person jeeeyul; 07.03.2016

Это связано с тем, что приложения теперь работают на Apple Watch, а это означает, что они не могут получать настройки с iPhone, поскольку настройки больше не хранятся на том же устройстве. Подробнее здесь: Невозможно получить значения из пакета настроек в watchOS 2

person Roel    schedule 21.09.2015
comment
Ваш ответ не относится к этому сценарию. Прочитайте темы, на которые я ссылался в вопросе. - person spybart; 23.09.2015
comment
Чего ждать? Мой ответ был опубликован, когда в этом вопросе было гораздо меньше информации. - person Roel; 24.09.2015