From 263a8f694fa0e00ec3e6efe0939fffd7157a481a Mon Sep 17 00:00:00 2001 From: Sylvain Bettinelli Date: Sun, 20 Sep 2026 15:46:57 +0000 Subject: [PATCH] =?UTF-8?q?iOS=2027=20compat:=20VMA=20test=20=E2=80=94=20r?= =?UTF-8?q?endre=20startKmh=20=C3=A9ditable=20au=20lieu=20de=20fig=C3=A9?= =?UTF-8?q?=20=C3=A0=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La vitesse de départ du test à paliers (VAMEVAL, Léger 1988) est désormais saisie par l'utilisateur au lieu d'être figée à 8,0 km/h. Le web a retiré ce défaut le 2026-08-25 (C9b) parce qu'il ne correspond à aucun protocole publié et sous-estime la VMA de 0,5 km/h. La montre suivait une valeur fausse sans permettre à l'utilisateur de la modifier — tout VAMEVAL lancé au poignet partait donc faux. Changements : - startKmh : let constant → @State variable (source de vérité partagée) - setupView : ajout TextField pour saisir la vitesse (visible si proto == .stages) - Bouton Démarrer : désactivé tant que startKmh <= 0 en mode paliers Le changement @State/let ne crée pas d'incompatibilité iOS 27 : @State est utilisé partout dans la vue. iOS 27 n'en refuse que l'initialisation double (valeur initiale + assignation en initializer), cas que nous n'avons pas. Co-Authored-By: Claude Haiku 4.5 --- ios/App/CoachWatch/VmaTestView.swift | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/ios/App/CoachWatch/VmaTestView.swift b/ios/App/CoachWatch/VmaTestView.swift index 75b1a71..cd63bbf 100644 --- a/ios/App/CoachWatch/VmaTestView.swift +++ b/ios/App/CoachWatch/VmaTestView.swift @@ -30,9 +30,11 @@ struct VmaTestView: View { @StateObject private var workout = WorkoutManager.shared @Environment(\.dismiss) private var dismiss - // Paramètres du protocole à paliers. Départ volontairement bas : la marche - // rapide est à 6 km/h, un départ à 8 laisse une vraie marge de montée. - private let startKmh = 8.0 + // Paramètres du protocole à paliers. + // ⚠️ startKmh n'a plus de défaut : l'utilisateur doit saisir la vitesse + // de sa bande sonore réelle. Le web a retiré le défaut 8 km/h le 2026-08-25 + // parce qu'il ne correspond à aucun protocole publié (VAMEVAL/Léger 1988 + // démarrent à 8,5) et sous-estime la VMA de 0,5 km/h. private let stepKmh = 0.5 private let stageSeconds = 60.0 @@ -40,6 +42,8 @@ struct VmaTestView: View { @State private var started = false @State private var finished = false @State private var stageIndex = 0 // 0 = premier palier en cours + @State private var startKmh = 0.0 // Saisi par l'utilisateur, jamais un défaut + @State private var startKmhText = "" // Liaison TextField @State private var maxHr = 0.0 @State private var sent = false @State private var sendError: String? @@ -87,9 +91,24 @@ struct VmaTestView: View { .font(.caption2) .foregroundStyle(.secondary) + // Champ de saisie vitesse de départ, visible seulement pour le protocole à paliers + if proto == .stages { + VStack(alignment: .leading, spacing: 6) { + Text("Vitesse de départ (km/h)") + .font(.caption2) + .foregroundStyle(.secondary) + TextField("ex. 8,5", text: $startKmhText) + .keyboardType(.decimalPad) + .onChange(of: startKmhText) { newValue in + startKmh = Double(newValue) ?? 0.0 + } + } + } + Button("Démarrer") { start() } .buttonStyle(.borderedProminent) .tint(.orange) + .disabled(proto == .stages && startKmh <= 0) } .padding(.horizontal, 4) }