Я прочитал документацию по инфраструктуре подключения WatchKit, чтобы попытаться выяснить, могу ли я делегировать все потребности интенсивной обработки моему родительскому приложению iOS. Весь код уже существует в родительском приложении для выполнения требуемой обработки, и кажется, что сделать это значительно эффективнее, чем приложение Apple Watch, дублирующее код и пытающееся выполнить его самостоятельно.
Мой вопрос заключается в том, возможно ли это, если приложение на устройстве iOS не активно в то время, когда приложение комплекта часов делает запрос? Будет ли он просто ставить запрос в очередь до тех пор, пока он не будет открыт в следующий раз, или его можно настроить для немедленной обработки? Я бы хотел, чтобы часы всегда получали какой-либо ответ или имели тайм-аут по запросу.
ОБНОВЛЕНИЕ:
Я обнаружил, что моя конкретная проблема связана с вызовом обработчика ответа из фонового потока после выполнения отдельного запроса. Когда я делал это, я не получил ответа от устройства iOS на Apple Watch. Первоначально это заставило меня подумать, что устройство iOS игнорировало запросы, пока оно не было активным.
Решением для меня было сделать следующее, чтобы обработчик ответов всегда вызывался из основного потока. Кажется, это важная часть сообщения, которую я, должно быть, пропустил в документации (или, может быть, она отсутствовала :o). Короче говоря, после внесения обновления, показанного ниже, я каждый раз успешно получал ответы.
dispatch_async(dispatch_get_main_queue(), { () -> Void in
replyHandler(myResponse) // Always call from main thread!
})
sendMessage
. Вызов этого метода из вашего расширения WatchKit, когда он активен и работает, активирует соответствующее приложение iOS в фоновом режиме и сделает его доступным. Если вам нужна конкретная помощь, опубликуйте минимальный воспроизводимый пример вместе с описанием проблемы. - person   schedule 23.03.2016