diff --git a/ios/App/CoachWatch/WorkoutManager.swift b/ios/App/CoachWatch/WorkoutManager.swift index 029f1bf..91affb9 100644 --- a/ios/App/CoachWatch/WorkoutManager.swift +++ b/ios/App/CoachWatch/WorkoutManager.swift @@ -1,5 +1,8 @@ import Foundation import HealthKit +import os + +private let workoutLog = Logger(subsystem: "ch.hypnotruck.coach.watchkitapp", category: "workout") /// Pilote la séance via HKLiveWorkoutBuilder et pousse les metrics vers l'iPhone. /// `@MainActor` (donc Sendable) : l'état observable vit sur le main ; les callbacks @@ -39,7 +42,10 @@ final class WorkoutManager: NSObject, ObservableObject { do { try await healthStore.requestAuthorization(toShare: share, read: read) + let woStatus = healthStore.authorizationStatus(for: HKQuantityType.workoutType()) + workoutLog.info("requestAuthorization OK; workoutType share status=\(woStatus.rawValue)") } catch { + workoutLog.error("requestAuthorization threw: \(error.localizedDescription)") statusMessage = "Autorisation Santé refusée : \(error.localizedDescription)" return } @@ -60,12 +66,16 @@ final class WorkoutManager: NSObject, ObservableObject { let start = Date() session.startActivity(with: start) + workoutLog.info("startActivity called, beginning collection…") try await builder.beginCollection(at: start) isRunning = true statusMessage = nil + workoutLog.info("beginCollection OK, isRunning=true") } catch { self.session = nil self.builder = nil + let ns = error as NSError + workoutLog.error("start failed domain=\(ns.domain) code=\(ns.code): \(error.localizedDescription)") statusMessage = "Démarrage séance impossible : \(error.localizedDescription)" } } @@ -138,6 +148,7 @@ extension WorkoutManager: HKWorkoutSessionDelegate { didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) { + workoutLog.info("session didChangeTo state=\(toState.rawValue) from=\(fromState.rawValue)") guard toState == .ended else { return } let builder = workoutSession.associatedWorkoutBuilder() Task { @@ -154,6 +165,8 @@ extension WorkoutManager: HKWorkoutSessionDelegate { nonisolated func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: Error) { let message = error.localizedDescription + let ns = error as NSError + workoutLog.error("session didFailWithError domain=\(ns.domain) code=\(ns.code): \(message)") Task { @MainActor in self.statusMessage = "Erreur séance : \(message)" self.isRunning = false