Test de VMA guide au poignet
Pendant un test, le telephone est dans une poche : la montre est le seul ecran consultable en courant, et c'est elle qui porte deja vitesse, distance et FC via WorkoutManager. Deux protocoles. Paliers d'une minute de 8 km/h par pas de 0,5, avec haptique au changement et l'ecart a l'allure cible affiche — la vitesse brute demanderait un calcul mental a chaque foulee. Ou six minutes, la distance parcourue donnant directement la VMA. ⚠️ AUCUN calcul cote montre : elle transmet des mesures (paliers tenus, distance, FC max), le serveur calcule. Deux implementations d'une meme formule divergent toujours. Le POST passe par CoachRoutineBridge, qui a deja l'abonnement NotificationCenter, la base d'API et le cookie — un fichier de plus devrait etre cable a la main dans le pbxproj. ⚠️ Les paliers avancent sur `elapsedSec` de HKLiveWorkoutBuilder, PAS sur un compteur accumule au fil du Timer de la vue : ce Timer ne tourne pas quand l'ecran s'eteint, c'est-a-dire des que le poignet retombe — soit pendant l'essentiel du test. Meme famille de piege que la Live Activity fantome. L'envoi reprend la livraison differee de la routine : un test se fait dehors, l'iPhone peut etre hors de portee, et refaire un test maximal parce qu'un message s'est perdu n'est pas acceptable. Si l'envoi echoue, les chiffres restent affiches pour une saisie manuelle. VmaTestView.swift est un fichier NOUVEAU : cable dans le pbxproj (4 entrees, sauvegarde project.pbxproj.bak-vma). Verification : `grep -c "VmaTestView.swift in Sources"` doit rendre 2 (declaration + phase de compilation = 1 cible). ⚠️ NON COMPILE — a builder au prochain passage sur le Mac. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -102,6 +102,27 @@ final class ConnectivityManager: NSObject, ObservableObject {
|
||||
return true
|
||||
}
|
||||
|
||||
/// Envoie le résultat brut d'un test de VMA (paliers tenus ou distance).
|
||||
///
|
||||
/// Livraison différée garantie comme la routine : un test se fait dehors,
|
||||
/// l'iPhone peut être hors de portée, et refaire un test maximal parce que
|
||||
/// le message s'est perdu n'est pas acceptable. Le calcul de la VMA se fait
|
||||
/// côté serveur — la montre ne transmet que des mesures.
|
||||
@discardableResult
|
||||
func sendVmaResult(_ payload: [String: Any]) -> Bool {
|
||||
let session = WCSession.default
|
||||
guard session.activationState == .activated else { return false }
|
||||
if session.isReachable {
|
||||
session.sendMessage(payload, replyHandler: nil) { _ in
|
||||
session.transferUserInfo(payload)
|
||||
}
|
||||
} else {
|
||||
session.transferUserInfo(payload)
|
||||
}
|
||||
connLog.info("résultat de test VMA envoyé à l'iPhone")
|
||||
return true
|
||||
}
|
||||
|
||||
/// Signale à l'iPhone que la séance est en pause / a repris, pour que le
|
||||
/// bouton de la Live Activity affiche le bon état.
|
||||
func sendPaused(_ paused: Bool) {
|
||||
|
||||
Reference in New Issue
Block a user