WKURLSessionRefreshBackgroundTask no se llama al intentar hacer actualizaciones de fondo en watchOS

Estoy trabajando en una complicación para obtener datos programados de un servicio web. Cada 20-30 minutos (o manualmente), estoy programando una WKRefreshBackgroundTask para hacer esto.

Como sugirió Apple, quiero que el sistema operativo maneje la obtención de estos datos a través de un fondoNSURLSession.

Esta es la función que uso para descargar los datos que necesito:

func scheduleURLSession()
{
    print("\nScheduling URL Session...")

    let backgroundSessionConfig:URLSessionConfiguration = URLSessionConfiguration.background(withIdentifier: NSUUID().uuidString)
    backgroundSessionConfig.sessionSendsLaunchEvents = true

    let backgroundSession = URLSession(configuration: backgroundSessionConfig)

    let downloadTask = backgroundSession.downloadTask(with: URL(string: "https://www.myserver.com/somedata")!)
    downloadTask.resume()
}

Algunas cosas sobre esto:

Se llama cuando lo programo. Veo su declaración de impresión en la consola.Es casi idéntico al ejemplo de Apple.He omitido la URL. Esa misma URL funciona bien en las aplicaciones iOS / watchOS, por lo que no tiene nada de malo.

El problema es que, aunque estoy llamandoresume() en la tarea y permitir que active mi aplicación cuando esté completa, tampoco parece funcionar.

Cuando se complete, debería volver a un controlador WKExtensionDelegate:

func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>)

como unWKURLSessionRefreshBackgroundTaskPero no lo hace.

Mi código, idéntico al código de muestra de Apple, crea otra sesión pero vuelve a unirse a través deWKURLSessionRefreshBackgroundTaskEl identificador. Aquí es donde se establece el delegado para procesar los datos descargados. Revisa el código:

func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
    for task in backgroundTasks {
        switch task {

        case let backgroundTask as WKApplicationRefreshBackgroundTask:
            print("\nWatchKit - WKApplicationRefreshBackgroundTask")
            // self.updateComplicationDataArrivalTimes(backgroundTask)
            self.scheduleURLSession()
            backgroundTask.setTaskCompleted()

        case let snapshotTask as WKSnapshotRefreshBackgroundTask:
            // Snapshot tasks have a unique completion call, make sure to set your expiration date
            print("\nWatchKit - WKSnapshotRefreshBackgroundTask")
            snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil)

        case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
            print("\nWatchKit - WKWatchConnectivityRefreshBackgroundTask")
            connectivityTask.setTaskCompleted()

        case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
            print("\nWatchKit - WKURLSessionRefreshBackgroundTask")
            let backgroundConfigObject = URLSessionConfiguration.background(withIdentifier: urlSessionTask.sessionIdentifier)
            let backgroundSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil)

            print("Rejoining session ", backgroundSession)
            urlSessionTask.setTaskCompleted()

        default:
            // make sure to complete unhandled task types
            task.setTaskCompleted()
        }
    }
}

Pero de nuevo, parece que nunca volverá. Parece que no puedo entender por qué esto funciona a pesar de que el código es idéntico al código de muestra de Apple para este proyecto:WatchBackgroundRefresh: uso de WKRefreshBackgroundTask para actualizar las aplicaciones WatchKit en segundo plano.

¿Hay alguna configuración en mi proyecto que me falta? Estoy poniendo todo este código en elExtensionDelegate, nuevo en watchOS 3. También me estoy ajustando aWKExtensionDelegate yURLSessionDownloadDelegate.

Gracias de antemano por su ayuda!

Respuestas a la pregunta(2)

Su respuesta a la pregunta