diff --git a/ios/App/CoachWatch/WorkoutManager.swift b/ios/App/CoachWatch/WorkoutManager.swift index d8dd147..67af0bb 100644 --- a/ios/App/CoachWatch/WorkoutManager.swift +++ b/ios/App/CoachWatch/WorkoutManager.swift @@ -23,7 +23,10 @@ final class WorkoutManager: NSObject, ObservableObject { private var builder: HKLiveWorkoutBuilder? private var lastSentAt = Date.distantPast - private let sendInterval: TimeInterval = 2 + // Throttle léger anti-saturation BLE pour les metrics à haute fréquence + // (calories/distance). La FC, elle, est poussée immédiatement à chaque + // nouvel échantillon — comme l'app Exercice native d'Apple. + private let minSendInterval: TimeInterval = 0.5 private var simTask: Task? private override init() { super.init() } @@ -137,7 +140,10 @@ final class WorkoutManager: NSObject, ObservableObject { elapsedSec = elapsed let now = Date() - guard now.timeIntervalSince(lastSentAt) >= sendInterval else { return } + // Nouvelle FC -> envoi immédiat (temps réel, comme Apple). Sinon (mise à + // jour calories/distance seule), on applique le throttle anti-saturation. + let heartRateUpdated = hr != nil + guard heartRateUpdated || now.timeIntervalSince(lastSentAt) >= minSendInterval else { return } lastSentAt = now ConnectivityManager.shared.sendSample([ "heartRate": heartRate,