View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Todos los videos
  • Información

Más videos

  • Información
  • Resumen
  • Código
  • 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
      • Video HD
      • Video SD

    Videos relacionados

    WWDC25

    • Conoce la HealthKit Medications API

    WWDC24

    • Bring your app’s core features to users with App Intents

    WWDC23

    • Build a multi-device workout app
    • Meet ActivityKit
  • 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.

Developer Footer

  • Videos
  • WWDC25
  • Seguimiento de los entrenamientos con HealthKit en iOS y iPadOS
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines