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
 

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Toutes les vidéos
  • À propos

Plus de vidéos

  • À propos
  • Résumé
  • Code
  • Suivez vos entraînements avec HealthKit sur iOS et iPadOS

    Découvrez les bonnes pratiques pour créer une expérience d'entraînement optimale pour iOS. Passez en revue le cycle de vie d'une session d'entraînement, explorez les différences entre les entraînements sur Apple Watch et iPhone, et découvrez comment utiliser les activités en temps réel et Siri pour améliorer l'expérience de votre app sur l'écran verrouillé.

    Chapitres

    • 0:00 - Introduction
    • 0:56 - Exécuter une session d’entraînement
    • 2:50 - Obtenir les données de session
    • 8:35 - Récupérer après un incident
    • 9:34 - Bonnes pratiques

    Ressources

    • Handling Workout Requests with SiriKit
    • Running workout sessions
    • Building a workout app for iPhone and iPad
    • Building a multidevice workout app
    • HKWorkoutSession
      • Vidéo HD
      • Vidéo SD

    Vidéos connexes

    WWDC25

    • Découvrez l’API Medications de HealthKit

    WWDC24

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

    WWDC23

    • Build a multi-device workout app
    • Meet ActivityKit
  • Rechercher dans cette vidéo…
    • 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 - Introduction
    • Le framework HealthKit permet aux apps de santé et de fitness d’accéder à une base de données centralisée et chiffrée contenant les données de santé de l’utilisateur. Grâce aux API d’entraînement de la plateforme, vous pouvez créer des apps d’entraînement complètes pour iPhone et iPad, permettant aux utilisateurs de suivre leurs séances, d’accéder à des données de santé et de recevoir des indications sur leur récupération. Apprenez les bases de la gestion des séances d’entraînement, de l’accès aux mesures en temps réel, de la gestion des incidents, ainsi que des conseils et bonnes pratiques pour optimiser les entraînements.

    • 0:56 - Exécuter une session d’entraînement
    • Le même code peut être utilisé sur iPhone, iPad et Apple Watch avec seulement quelques ajustements mineurs. Pour suivre une activité, vous créez une configuration d’entraînement, définissez son type, puis démarrez une session. Le générateur d’entraînement (workout builder) collecte les données de santé tout au long de la séance.

    • 2:50 - Obtenir les données de session
    • Lorsqu’un entraînement est lancé sur l’Apple Watch, les capteurs intégrés de l’appareil offrent une expérience fluide et continue. En revanche, la collecte des données de fréquence cardiaque sur iPhone ou iPad nécessite l’appairage avec un capteur de fréquence cardiaque externe, car ces appareils n’en sont pas équipés. L’iPhone et l’iPad peuvent collecter diverses métriques d’entraînement, mais le système peut générer des échantillons différents de ceux spécifiquement demandés par une app. Vous pouvez modifier les types de données collectées par défaut pendant un entraînement. Une fois l’entraînement enregistré, vous pouvez accéder aux statistiques récapitulatives et afficher l’évolution des métriques sous forme de graphiques. Les entraînements effectués sur iPhone peuvent offrir des données plus détaillées pour certaines métriques, comme c’est le cas pour les entraînements historiques de l’Apple Watch. L’iPhone se verrouille généralement pendant les entraînements. Pour des raisons de confidentialité, les données de santé ne sont généralement pas accessibles lorsque l’appareil est verrouillé. Cependant, le système peut inviter l’utilisateur à autoriser l’accès aux données d’entraînement par les apps, même lorsque l’appareil est verrouillé. Vous pouvez ensuite afficher des activités en temps réel sur l’écran verrouillé, afin de présenter des mesures essentielles sans que l’utilisateur ait besoin de déverrouiller son téléphone. La prise en charge de Siri s’étend à l’écran verrouillé, permettant aux utilisateurs de démarrer, mettre en pause, reprendre ou annuler un entraînement en mode mains libres. Vous pouvez intégrer des intentions Siri dans vos apps pour activer cette fonctionnalité.

    • 8:35 - Récupérer après un incident
    • La récupération après incident sur Apple Watch relance automatiquement les apps et restaure les séances d’entraînement. Sur iPhone et iPad, un nouveau délégué de scène prend en charge la reprise des séances d’entraînement après un incident. Vous pouvez utiliser ce délégué d’app pour vérifier les options de reprise et récupérer la session restaurée depuis le Health store.

    • 9:34 - Bonnes pratiques
    • Pour suivre efficacement les entraînements avec HealthKit, reflétez les séances lancées depuis l’app Apple Watch sur l’iPhone, demandez uniquement les autorisations de données nécessaires et utilisez l’API Workout Builder. En suivant ces recommandations, vous garantissez une mise à jour précise des anneaux d’activité et améliorez l’expérience utilisateur. Pensez également à adopter les nouvelles API, à explorer l’app de démonstration, et à intégrer la prise en charge des entraînements sur iPhone et iPad pour étendre votre portée.

Developer Footer

  • Vidéos
  • WWDC25
  • Suivez vos entraînements avec HealthKit sur iOS et 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