swift - When does appleExerciseTime update or change? - Stack Overflow

admin2025-04-30  0

I've been trying to figure out what the bare minimum is required for HKWorkoutBuilder to create a workout that adds time the appleExerciseTime. I couldn't find the documentation for this. This is my code so far.

func createWorkoutSample(
    expectedActiveEnergyData: [Double],
    expectedExerciseMinutesData: [Double],
    calendar: Calendar,
    startDate: Date
) async throws -> [HKSample] {
    var testData: [HKSample] = []
    let workoutConfiguration = HKWorkoutConfiguration()
    workoutConfiguration.activityType = .running
    workoutConfiguration.locationType = .outdoor

    let results = try await withThrowingTaskGroup(of: HKSample?.self) { group in
        for (index) in 0..<expectedActiveEnergyData.count {
            guard let date = calendar.date(byAdding: .day, value: index, to: startDate) else {
                continue
            }
            
            group.addTask {
                let builder = HKWorkoutBuilder(
                    healthStore: self.manager.healthStore,
                    configuration: workoutConfiguration,
                    device: .local()
                )
                let endDate = date.addingTimeInterval(expectedExerciseMinutesData[index] * 60)
                
                try await builder.beginCollection(at: date)
                
                let energyType = HKQuantityType.quantityType(
                    forIdentifier: .activeEnergyBurned
                )!
                let energyQuantity = HKQuantity(
                    unit: HKUnit.kilocalorie(),
                    doubleValue: expectedActiveEnergyData[index]
                )
                let energySample = HKQuantitySample(
                    type: energyType,
                    quantity: energyQuantity,
                    start: date,
                    end: endDate
                )

                return try await withCheckedThrowingContinuation { continuation in
                    builder.add([energySample]) { (success, error) in
                        if let error = error {
                            continuation.resume(throwing: error)
                            return
                        }

                        builder.endCollection(withEnd: endDate) { (success, error) in
                            if let error = error {
                                continuation.resume(throwing: error)
                                return
                            }

                            builder.finishWorkout { (workout, error) in
                                if let error = error {
                                    continuation.resume(throwing: error)
                                    return
                                }
                                continuation.resume(returning: workout)
                            }
                        }
                    }
                }
            }
        }

        for try await workout in group {
            if let workout = workout {
                testData.append(workout)
            } else {
                print("Skipping nil workout result.")
            }
        }
        return testData
    }

    print("Total samples created: \(results.count)")
    return results
}

When I query appleExerciseTime, there's no results. I've looked at the HKWorkoutBuilder documentation, and most information expanding on adding samples related to the deprecated HKWorkout.

转载请注明原文地址:http://anycun.com/QandA/1746027796a91544.html