iOS 27 compat: VMA test — rendre startKmh éditable au lieu de figé à 8

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 <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-09-20 15:46:57 +00:00
parent 150e78efa0
commit 263a8f694f

View File

@@ -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)
}