HKLiveWorkoutBuilder는 활성 운동 세션으로부터 실시간 데이터를 기반으로 운동을 점진적으로 구성하는 빌더 객체입니다

 

HKLiveWorkoutBuilder는 HealthKit 프레임워크에서 사용되는 클래스로, 운동에 관련된 데이터를 실시간으로 처리하고 저장하는 데 사용됩니다. 이 클래스는 사용자의 운동 활동 중에 발생하는 데이터를 실시간으로 수집하고, 이를 HealthKit에 저장하거나 다른 처리 작업에 사용할 수 있게 해줍니다.

 

활성화된 HKWorkoutSession 중에 HKLiveWorkoutBuilder를 사용하여 HKWorkout 샘플을 생성하세요. Apple Watch에서 운동 세션을 실행하는 완벽한 지침은 "운동 세션 실행"을 참조하세요.

 

live workout builder 구성하기

var dataSource: HKLiveWorkoutDataSource?
: 운동 세션으로부터 자동적으로 제공받는 실시간 데이터

var workoutSession: HKWorkoutSession?
: 데이터 소스에 의해 생성되고 이 빌더와 관련된 운동 세션

운동을 모니터링하고 제어하기

var delegate: (any HKLiveWorkoutBuilderDelegate)?
: 실시간 builder delegate

 

delegate 로 실시간 데이터 추적하기

func workoutBuilder(HKLiveWorkoutBuilder, didCollectDataOf: Set<HKSampleType>)

: 새로운 데이터가 builder에 추가됐다고 delegate에 전달하여 콜백됩니다

func workoutBuilderDidCollectEvent(HKLiveWorkoutBuilder)

: 새로운 이벤트가 builder에 추가됐다고 delegate에 전달하여 콜백됩니다

func workoutBuilder(HKLiveWorkoutBuilder, didBegin: HKWorkoutActivity)

: 운동 활동이 시작됐다고 delegate에 전달하여 콜백됩니다

func workoutBuilder(HKLiveWorkoutBuilder, didEnd: HKWorkoutActivity)

: 현재 운동 활동이 끝났다고 delegate에 전달하여 콜백됩니다.

 

protocol HKLiveWorkoutBuilderDelegate

: 실시간 workout builder를 모니터링하기 위한 프로토콜.

 

var currentWorkoutActivity: HKWorkoutAcitivity: HKWorkoutActivity?

: 현재 운동 활동

 

var shouldCollectWorkoutEvents: Bool

: workout builder가 운동 세션에서 생성된 이벤트를 자동으로 추가할지 여부를 결정하는 Bool 값입니다.

데이터에 접근하기

var elapsedTime: TimeInterval

: 일시 정지를 포함한 builder의 현재 내용을 기반으로 한 운동 경과 시간.

 

 

 

HKLiveWorkoutBuilder를 사용하여 실시간 운동 데이터를 처리하는 과정

1. HKLiveWorkoutBuilder 객체 생성: HKWorkoutSession 객체를 사용하여 HKLiveWorkoutBuilder 객체를 생성합니다. 이를 통해 실시간으로 운동 데이터를 수집하고 저장할 수 있는 환경을 설정합니다.

var builder: HKLiveWorkoutBuilder?


2. 데이터 수집 시작: HKLiveWorkoutBuilder의 beginCollection(withStart:) 메서드를 호출하여 데이터 수집을 시작합니다. 이 메서드는 운동 활동이 시작된 시간을 인수로 받습니다.

builder.beginCollection(withStart: Date()) { (success, error) in
    
    guard success else {
        // Handle errors.
    }
    
    // Indicate that the session has started.
}


3. 데이터 수집 및 처리: 운동 중에 발생하는 데이터(예: 심박수, 거리, 칼로리 소모 등)를 HKLiveWorkoutBuilder 객체에 전달하여 처리합니다. 이 과정은 주로 HKLiveWorkoutBuilderDelegate 프로토콜을 채택한 객체에서 수행됩니다. 예를 들어, workoutBuilder(_:didCollectDataOf:) 메서드를 구현하여 수집된 데이터를 처리할 수 있습니다.

func workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>) {
    for type in collectedTypes {
        guard let quantityType = type as? HKQuantityType else {
            return // Nothing to do.
        }
        
        // Calculate statistics for the type.
        let statistics = workoutBuilder.statistics(for: quantityType)
        let label = labelForQuantityType(quantityType)
        
        DispatchQueue.main.async() {
            // Update the user interface.
        }   
    }
}



4. 데이터 저장 및 완료: 운동이 종료되면 HKLiveWorkoutBuilder 객체의 finishWorkout(completion:) 메서드를 호출하여 데이터 수집을 완료하고, 최종적으로 HealthKit에 데이터를 저장합니다. 이 메서드는 완료될 때 호출할 클로저를 인수로 받습니다.

session.end()
builder.endCollection(withEnd: Date()) { (success, error) in
    
    guard success else {
        // Handle errors.
    }
    
    builder.finishWorkout { (workout, error) in
        
        guard workout != nil else {
            // Handle errors.
        }
        
        DispatchQueue.main.async() {
            // Update the user interface.
        }
    }
}


이러한 과정을 통해 HKLiveWorkoutBuilder를 사용하여 실시간으로 운동 데이터를 처리하고 저장할 수 있습니다. 이 클래스는 HealthKit을 사용하여 트랙킹된 운동 데이터를 효율적으로 관리하고 활용하는 데 도움을 줍니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'SwiftUI' 카테고리의 다른 글

HKQuantityType  (0) 2024.03.11
HKLiveWorkoutDataSource  (0) 2024.03.11
HKWorkoutSession  (0) 2024.03.11
HKHealthStore  (0) 2024.03.11
Alamofire  (0) 2024.03.11
ytw_developer