-
Seguimiento de los entrenamientos con HealthKit en iOS y iPadOS
Descubre las prácticas recomendadas que te permitirán crear una experiencia de entrenamiento fantástica para iOS. Revisa el ciclo de vida de una sesión de entrenamiento, explora las diferencias entre los entrenamientos en el Apple Watch y el iPhone, y descubre cómo usar Actividades en Vivo y Siri para mejorar la experiencia de la pantalla bloqueada de la app.
Capítulos
- 0:00 - Introducción
- 0:56 - Iniciar una sesión de entrenamiento
- 2:50 - Obtener métricas de sesión
- 8:35 - Recuperarse de un accidente
- 9:34 - Prácticas recomendadas
Recursos
- Handling Workout Requests with SiriKit
- Running workout sessions
- Building a workout app for iPhone and iPad
- Building a multidevice workout app
- HKWorkoutSession
Videos relacionados
WWDC25
WWDC24
WWDC23
-
Buscar este video…
-
-
1:30 - Set up workout session
// Set up workout session // Create workout configuration let configuration = HKWorkoutConfiguration() configuration.activityType = .running configuration.locationType = .outdoor // Create workout session let session = try HKWorkoutSession(healthStore: healthStore, configuration: configuration) session.delegate = self // Get associated workout builder and add data source let builder = session.associatedWorkoutBuilder() builder.delegate = self builder.dataSource = HKLiveWorkoutDataSource(healthStore: healthStore, workoutConfiguration: configuration) -
1:54 - Starting the session
// Prepare and start session session.prepare() // Start and display count down // Start session and builder collection once count down finishes session.startActivity(with: startDate) try await builder.beginCollection(at: startDate) -
2:14 - Handling Metrics
// Handling collected metrics func workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>) { for type in collectedTypes { guard let quantityType = type as? HKQuantityType else { return } let statistics = workoutBuilder.statistics(for: quantityType) // Update the published values updateForStatistics(statistics) } } -
2:28 - Ending workout
// Stopping the workout session session.stopActivity(with: .now) // Session transitions to stopped then call end func workoutSession(_ workoutSession: HKWorkoutSession, didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) { guard change.newState == .stopped, let builder else { return } try await builder.endCollection(at: change.date) let finishedWorkout = try await builder.finishWorkout() session.end() } -
7:17 - Set up Siri Intent
// Create an INExtension within your main app // Define an intent handler public class IntentHandler: INExtension { } // Define the intents to support extension IntentHandler: INStartWorkoutIntentHandling extension IntentHandler: INPauseWorkoutIntentHandling extension IntentHandler: INResumeWorkoutIntentHandling extension IntentHandler: INEndWorkoutIntentHandling -
7:32 - Handle the Siri intent
// Handle the intent public func handle(intent: INStartWorkoutIntent) async -> INStartWorkoutIntentResponse { let state = await WorkoutManager.shared.state switch state { case .running, .paused, .prepared, .stopped: return INStartWorkoutIntentResponse(code: .failureOngoingWorkout, userActivity: nil) default: break; } Task { await MainActor.run { // Handle the intents activity type and location WorkoutManager.shared.setWorkoutConfiguration(activityType: .running, location: .outdoor) } } return INStartWorkoutIntentResponse(code: .success, userActivity: nil) } -
7:52 - App Delegate
// Implement an app delegate // Create app delegate class WorkoutsOniOSSampleAppDelegate: NSObject, UIApplicationDelegate { let handler = IntentHandler() func application(_ application: UIApplication, handlerFor intent: INIntent) -> Any? { return handler } } // Add app delegate to app struct WorkoutsOniOSSampleApp: App { @UIApplicationDelegateAdaptor(WorkoutsOniOSSampleAppDelegate.self) var appDelegate } -
9:09 - Set up crash recovery
// App Delegate func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { if options.shouldHandleActiveWorkoutRecovery { let store = HKHealthStore() store.recoverActiveWorkoutSession(completion: { (workoutSession, error) in // Handle error Task { await WorkoutManager.shared.recoverWorkout(recoveredSession: workoutSession) } }) } let configuration = UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) configuration.delegateClass = WorkoutsOniOSSampleAppSceneDelegate.self return configuration } -
9:25 - Recover the workout session
// Recover the workout for the session func recoverWorkout(recoveredSession: HKWorkoutSession) { session = recoveredSession builder = recoveredSession.associatedWorkoutBuilder() session?.delegate = self builder?.delegate = self workoutConfiguration = recoveredSession.workoutConfiguration let dataSource = HKLiveWorkoutDataSource(healthStore: healthStore, workoutConfiguration: workoutConfiguration) builder?.dataSource = dataSource }
-
-
- 0:00 - Introducción
La estructura HealthKit permite que las apps de salud y fitness accedan a una base de datos cifrada y centralizada que contiene la información de salud del usuario. Con las API de entrenamiento de la plataforma, puedes crear apps de entrenamiento integrales para el iPhone y el iPad que las personas pueden usar para llevar un registro de los entrenamientos, acceder a métricas de salud y recibir información sobre la recuperación. Aprende los conceptos básicos sobre cómo ejecutar sesiones de entrenamiento, acceder a métricas durante los entrenamientos, solucionar fallas y brindar consejos y prácticas recomendadas de entrenamiento.
- 0:56 - Iniciar una sesión de entrenamiento
El mismo código se puede usar en el iPhone, el iPad y el Apple Watch con pequeños ajustes. Para llevar un registro de cualquier actividad, crea una configuración de entrenamiento, establece su tipo y luego inicia una sesión. El generador recopila métricas de salud durante el entrenamiento.
- 2:50 - Obtener métricas de sesión
Al iniciar un entrenamiento en el Apple Watch, los sensores integrados del dispositivo brindan una experiencia fluida. Por el contrario, la recopilación de datos de frecuencia cardiaca en el iPhone o el iPad requiere el enlace con un sensor de frecuencia cardiaca externo porque estos dispositivos no tienen uno. El iPhone y el iPad pueden recopilar diversas métricas de entrenamiento, pero el sistema puede generar muestras diferentes a las solicitadas específicamente por una app. Puedes modificar los tipos de datos predeterminados recopilados durante un entrenamiento. Después de que el usuario guarda un entrenamiento, puedes consultar y mostrar estadísticas resumidas o crear gráficas de las métricas a lo largo del tiempo. Los entrenamientos del iPhone pueden tener datos más detallados disponibles para ciertas métricas, similares a los entrenamientos históricos del Apple Watch. El iPhone se suele bloquear durante los entrenamientos. Por razones de privacidad, normalmente no se puede acceder a los datos de salud mientras el dispositivo está bloqueado. Sin embargo, el sistema puede solicitarle al usuario que permita el acceso a los datos de entrenamiento a las apps incluso cuando el dispositivo está bloqueado. Luego puedes mostrar actividades en vivo en la pantalla bloqueada con métricas cruciales sin que la persona deba desbloquear su teléfono. La compatibilidad con Siri se extiende a la pantalla bloqueada, lo que permite a las personas iniciar, pausar, reanudar o cancelar entrenamientos sin usar las manos. Puedes integrar las intenciones de Siri en tus apps para habilitar esta funcionalidad.
- 8:35 - Recuperarse de un accidente
En el Apple Watch, la recuperación de fallas reinicia automáticamente las apps y restaura las sesiones de entrenamiento. Para el iPhone y el iPad, un nuevo delegado de escena se encarga de la recuperación de las sesiones de entrenamiento después de una falla. Puedes usar este delegado de app para verificar las opciones de recuperación y recuperar la sesión de la tienda de Salud.
- 9:34 - Prácticas recomendadas
Para llevar un registro efectivo de los entrenamientos con HealthKit, duplica los entrenamientos que iniciaste en la app Apple Watch en el iPhone, solicita solo la autorización de datos necesaria y usa la API de creación de entrenamientos. Con estas recomendaciones, podrás garantizar actualizaciones precisas de los círculos de Actividad y mejorar la experiencia del usuario. Asegúrate también de actualizar las nuevas API, descargar la app de demostración y considerar agregar soporte de entrenamiento para el iPhone y el iPad con el fin de expandir tu alcance en el mercado.