WKWatchConnectivityRefreshBackgroundTask nunca se activa en segundo plano, pero WKSnapshotRefreshBackgroundTask
Quiero actualizar el estado de mi aplicación de reloj en segundo plano desde iPhone, usandosession.updateApplicationContext(applicationContext).
Enviar un contacto de la aplicación mientras la aplicación en el reloj está activa funciona correctamente.
Cuando activo el botón de inicio en el reloj, la aplicación del reloj pasa a segundo plano,handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)
se llama y unWKSnapshotRefreshBackgroundTask
está provisto.
Así que no entiendo por qué unWKSnapshotRefreshBackgroundTask
se activa correctamente, pero no unWKWatchConnectivityRefreshBackgroundTask
.
Documentos de Apple decir „Cuando recibe datos de fondo del iPhone emparejado, el sistema inicia su aplicación en segundo plano, crea una instanciaWKWatchConnectivityRefreshBackgroundTask
objeto, y pasa el objeto de la tarea al método handleBackgroundTasks de su delegado de extensión: método.".
Pero esto no sucede, ni en un dispositivo, ni en el simulador. ¿Qué podría estar mal?
Editar:
Para comprobar qué podría estar mal, descargué el proyecto de demostración "QuickSwitch" de Apple que se puede descargaraquí. Aquí está el código que debe manejar las tareas en 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()
}
Ahí pasa lo mismo:
Establecí un punto de interrupción en la línea de la instrucción if y ejecuté la aplicación.
Cuando se presiona el botón de inicio en el simulador de reloj, se alcanza el punto de interrupción con unWKSnapshotRefreshBackgroundTask
. Esto está bien (ver arriba).
Sin embargo, si se selecciona una línea diferente en el simulador de iPhone,watchOS no programa unWKWatchConnectivityRefreshBackgroundTask
, como se esperaba. Después de todo, este proyecto de demostración debería mostrar exactamente este punto.
Tal vez alguien podría probar el proyecto de demostración y confirmar este problema o no.
¿Qué está mal?