WKWatchConnectivityRefreshBackgroundTask никогда не запускается в фоновом режиме, но WKSnapshotRefreshBackgroundTask
Я хочу обновить свое приложение для часов в фоновом режиме с iPhone, используяsession.updateApplicationContext(applicationContext).
Отправка контакта приложения, когда приложение на часах активно, работает правильно.
Когда я активирую кнопку «Домой» на часах, приложение часов переходит в фоновый режим,handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
называется, иWKSnapshotRefreshBackgroundTask
предоставлен.
Так что я не понимаю, почемуWKSnapshotRefreshBackgroundTask
срабатывает правильно, но неWKWatchConnectivityRefreshBackgroundTask
.
Документы Apple сказать "Когда вы получаете фоновые данные от сопряженного iPhone, система запускает ваше приложение в фоновом режиме, создаетWKWatchConnectivityRefreshBackgroundTask
объект и передает объект задачи в метод handleBackgroundTasks: вашего делегата расширения.«.
Но этого не происходит ни на устройстве, ни на симуляторе. Что может быть не так?
Редактировать:
Чтобы проверить, что может быть не так, я скачал демонстрационный проект Apple «QuickSwitch», который можно скачатьВот, Вот код, который должен обрабатывать фоновые задачи:
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for backgroundTask in backgroundTasks {
if let wcBackgroundTask = backgroundTask as? WKWatchConnectivityRefreshBackgroundTask {
// store a reference to the task objects as we might have to wait to complete them
self.wcBackgroundTasks.append(wcBackgroundTask)
} else {
// immediately complete all other task types as we have not added support for them
backgroundTask.setTaskCompleted()
}
}
completeAllTasksIfReady()
}
Там то же самое происходит:
Я установил точку останова в строке оператора if и запустил приложение.
Когда нажата кнопка домой на симуляторе часов, точка останова достигается с помощьюWKSnapshotRefreshBackgroundTask
, Это нормально (см. Выше).
Однако, если на симуляторе iPhone выбрана другая строка,watchOS не планируетWKWatchConnectivityRefreshBackgroundTask
, как и ожидалось. В конце концов, этот демонстрационный проект должен продемонстрировать именно эту точку.
Может быть, кто-нибудь может попробовать демо-проект и подтвердить эту проблему или нет.
Что случилось?