O WKWatchConnectivityRefreshBackgroundTask nunca é acionado em segundo plano, mas o WKSnapshotRefreshBackgroundTask
Quero atualizar o estado do meu aplicativo de relógio em segundo plano no iPhone, usandosession.updateApplicationContext(applicationContext).
Enviar um contato do aplicativo enquanto o aplicativo no relógio está ativo funciona corretamente.
Quando ativo o botão "Início" no relógio, o aplicativo de relógio fica em segundo plano,handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
é chamado e umWKSnapshotRefreshBackgroundTask
é fornecido.
Então eu não entendo por queWKSnapshotRefreshBackgroundTask
é acionado corretamente, mas não umWKWatchConnectivityRefreshBackgroundTask
.
Documentos da Apple diga „Quando você recebe dados em segundo plano do iPhone emparelhado, o sistema inicia seu aplicativo em segundo plano, instancia umWKWatchConnectivityRefreshBackgroundTask
objeto e passa o objeto de tarefa ao método handleBackgroundTasks: do delegado de extensão.".
Mas isso não acontece, nem em um dispositivo, nem no simulador. O que pode estar errado?
Editar:
Para verificar o que pode estar errado, baixei o projeto de demonstração da Apple "QuickSwitch", que pode ser baixadoaqui. Aqui está o código que deve lidar com tarefas em segundo plano:
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()
}
Aí acontece o mesmo:
Eu configurei um ponto de interrupção na linha da instrução if e executei o aplicativo.
Quando o botão home no simulador de relógio é pressionado, o ponto de interrupção é alcançado com umWKSnapshotRefreshBackgroundTask
. Isso está bom (veja acima).
No entanto, se uma linha diferente for selecionada no simulador do iPhone,O watchOS não agenda umaWKWatchConnectivityRefreshBackgroundTask
, como esperado. Afinal, este projeto de demonstração deve demonstrar exatamente esse ponto.
Talvez alguém possa experimentar o projeto de demonstração e confirmar esse problema ou não.
O que está errado?