diff --git a/ios/App/CoachWatch/WorkoutManager.swift b/ios/App/CoachWatch/WorkoutManager.swift index 13c5a03..029f1bf 100644 --- a/ios/App/CoachWatch/WorkoutManager.swift +++ b/ios/App/CoachWatch/WorkoutManager.swift @@ -26,6 +26,7 @@ final class WorkoutManager: NSObject, ObservableObject { func startWorkout(activityType: HKWorkoutActivityType, locationType: HKWorkoutSessionLocationType) async { + guard !isRunning, session == nil else { return } guard HKHealthStore.isHealthDataAvailable() else { statusMessage = "HealthKit indisponible sur cet appareil" return @@ -63,6 +64,8 @@ final class WorkoutManager: NSObject, ObservableObject { isRunning = true statusMessage = nil } catch { + self.session = nil + self.builder = nil statusMessage = "Démarrage séance impossible : \(error.localizedDescription)" } } @@ -141,7 +144,11 @@ extension WorkoutManager: HKWorkoutSessionDelegate { try? await builder.endCollection(at: date) _ = try? await builder.finishWorkout() } - Task { @MainActor in self.isRunning = false } + Task { @MainActor in + self.isRunning = false + self.session = nil + self.builder = nil + } } nonisolated func workoutSession(_ workoutSession: HKWorkoutSession, @@ -150,6 +157,8 @@ extension WorkoutManager: HKWorkoutSessionDelegate { Task { @MainActor in self.statusMessage = "Erreur séance : \(message)" self.isRunning = false + self.session = nil + self.builder = nil } } }