Watch : afficher la zone cardiaque pendant la séance
L'app Coach de la montre n'affichait que la FC brute — aucune notion de zone dans `ContentView.swift`. C'est pourtant au poignet que « 142 bpm » a besoin d'être traduit ; l'écran iPhone portait déjà l'information, mais on ne le regarde pas en courant. - `HeartRateZones.swift` : modèle partagé (App + CoachLiveActivity + les deux cibles Watch), câblé dans les 4 phases Sources du pbxproj comme `CoachWidgetSnapshot.swift`. ⚠️ Les bornes viennent de `/api/cardiac-zones`, version FIGÉE et datée — jamais recalculées côté natif, ce serait rouvrir les jeux de zones concurrents supprimés le 12/08. - `zone(for:)` retient la zone la plus HAUTE qui contient la valeur : les bornes se chevauchent d'un battement (Z1 100-109, Z2 109-118), et 109 bpm doit se lire Z2, pas Z1. Au-delà du haut de Z5, on reste en Z5 — un effort maximal n'est pas une absence de zone. - `ConnectivityManager` publie les zones reçues avec le snapshot et repart du dernier connu au lancement (la montre a pu redémarrer). Un snapshot partiel n'efface pas celles en place. - `HeartRateMetric` : pastille « Z3 », valeur colorée, et la plage sous le chiffre. ⚠️ La couleur ne porte jamais l'information seule — illisible pour un daltonien, et le contraste d'un écran de montre en plein soleil ne se prête pas aux nuances. Libellé VoiceOver explicite. `switch` en `return` explicites plutôt qu'en expression : la syntaxe courte exige Swift 5.9 pile, et je ne peux pas compiler ici. ⚠️ NON COMPILÉ — build Xcode requis, avec `getSnapshot` (`8a25f36`) en attente.
This commit is contained in:
@@ -75,6 +75,12 @@ struct CoachWidgetSnapshot: Codable {
|
||||
/// antérieure reste décodable.
|
||||
var routine: RoutineProgress? = nil
|
||||
|
||||
/// Zones cardiaques en vigueur, pour que la montre traduise la FC en zone
|
||||
/// pendant la séance. Modèle dans `HeartRateZones.swift`.
|
||||
/// ⚠️ Version FIGÉE servie par `/api/cardiac-zones` — jamais recalculée
|
||||
/// côté natif (cf. l'en-tête de ce fichier).
|
||||
var zones: HeartRateZones? = nil
|
||||
|
||||
/// Séance planifiée du jour (nil = jour OFF / pas de séance).
|
||||
struct TodaySession: Codable {
|
||||
var sport: String // running, cycling, strength, mobility, hiking, rest…
|
||||
|
||||
Reference in New Issue
Block a user