es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Apple Watch HealthKit observa – Terminó el entrenamiento de la aplicación Workout.

Para mi aplicación en el Apple Watch, quiero observar cuando se completa un entrenamiento en la aplicación Workout-App, para realizar una actualización en segundo plano de mi aplicación y volver a renderizar la Complicación. Sin embargo, la consulta nunca se ejecuta.

Mi enfoque fue utilizar una consulta de observación (HKObserverQuery) y observar .workoutType(). La documentación menciona lo siguiente:

HealthKit utiliza tipos de entrenamiento para crear muestras que almacenan información sobre entrenamientos individuales.

En https://developer.apple.com/documentation/healthkit/hkobjecttype/1615132-workouttype. Por lo tanto, esto me pareció el sampleType correcto.

Agregué com.apple.developer.healthkit.background-delivery a los Entitlements de la extensión de mi WatchApp y los permisos de acceso a los entrenamientos están configurados correctamente.

Este es el código que estoy utilizando:

let query = HKObserverQuery(sampleType: .workoutType(), predicate: nil, updateHandler: { [weak self] _, completionHandler, error in
guard error == nil else {
// CoreInsights.logs.track(“HK Query Error”, level: .error)
return
}
// CoreInsights.logs.track(“Update Trigger HK”, level: .info)
// self?.performBackgroundTasks(completion: {
// completionHandler()
// })
})

self?.healthStore.execute(query)
self?.healthStore.enableBackgroundDelivery(for: .workoutType(), frequency: .immediate, withCompletion: { updateSuccess, _ in
// CoreInsights.logs.track(“HK Background (updateSuccess)”, level: .info)
})

healthStore.enableBackgroundDelivery devuelve verdadero como resultado.

¿Alguien sabe si estoy utilizando el tipo correcto y configurando correctamente el fondo en segundo plano?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código que proporcionaste es correcto y estás utilizando el tipo de muestra adecuado, HKObserverQuery, y habilitando correctamente la entrega en segundo plano para el tipo .workoutType(). Sin embargo, podría haber otros factores que estén causando que la consulta no se active.

    Una cosa a considerar es que .workoutType() solo se activa cuando se guarda un nuevo entrenamiento, por lo que si esperas que se active cuando se complete un entrenamiento, es posible que no funcione como se espera.

    Otra cosa que debes verificar es si tu aplicación está en segundo plano o no. HKObserverQuery solo se ejecutará si tu aplicación está en primer plano o tiene tareas en segundo plano habilitadas. Si tu aplicación no se está ejecutando en segundo plano, la consulta no se activará.

    Por último, podría ser un error o un retraso en el sistema. Intenta probar el código nuevamente durante un período de tiempo más largo para ver si finalmente se activa. Si no es así, puedes intentar comunicarte con el soporte para desarrolladores de Apple para obtener más ayuda.

Comments are closed.