Piloter la séance depuis la Live Activity (Pause / Terminer)
Comme l'app Exercice : deux boutons sur la bannière de l'écran verrouillé et dans l'île dépliée. iOS n'expose aucun geste de balayage pour révéler des actions — depuis iOS 17, ce sont des boutons intégrés (App Intents), et c'est le seul mécanisme public. - Intents `CoachTogglePauseIntent` / `CoachEndWorkoutIntent`, conformes à LiveActivityIntent (sans quoi `perform()` n'est jamais appelé). - Ils vivent dans CoachLiveActivityAttributes.swift, seul fichier déjà membre des deux targets : un fichier neuf imposerait une manip Target Membership dans Xcode, source d'erreurs répétées ici. - Commandes relayées à la montre par WCSession, avec repli transferUserInfo : isReachable retombe à false quand la séance tourne en arrière-plan profond, la commande est alors différée au réveil de l'app montre. - L'état de pause remonte depuis HKWorkoutSession (seule source fiable : la montre peut mettre en pause d'elle-même) et bascule le libellé du bouton. - Le watchdog de LiveStore est neutralisé pendant la pause : sans ça, l'absence de samples aurait affiché « connexion perdue » puis terminé l'activité. - L'app watchOS gagne le bouton Pause qui lui manquait, aligné sur le même état. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -91,6 +91,36 @@ Il vient de l'ancien build. Il partira soit au premier `liveEnded` reçu (la
|
||||
nouvelle app reprend la main dessus via `adoptExisting()`), soit après 6 h,
|
||||
soit tout de suite si tu le fermes à la main (appui long → fermer).
|
||||
|
||||
## Étape 4bis — Les boutons Pause / Terminer *(build du 2026-08-11, second lot)*
|
||||
|
||||
La Live Activity porte maintenant deux boutons, comme l'app Exercice :
|
||||
**Pause / Reprendre** et **Terminer**. Ils apparaissent sur la bannière de
|
||||
l'écran verrouillé et dans l'île dynamique **dépliée** (appui long sur l'île) —
|
||||
pas en mode compact, où iOS n'accepte aucun bouton.
|
||||
|
||||
Aucune manipulation Xcode : les intents vivent dans
|
||||
`CoachLiveActivityAttributes.swift`, déjà membre des deux targets.
|
||||
|
||||
À tester, séance en cours :
|
||||
|
||||
1. **Appui long sur l'île** → les deux boutons apparaissent
|
||||
2. **Pause** → la séance se met en pause sur la montre, le bouton devient
|
||||
**Reprendre**, et la page `/live` ne bascule **pas** en « Connexion perdue »
|
||||
(le watchdog est neutralisé pendant la pause)
|
||||
3. **Reprendre** → la FC repart
|
||||
4. **Terminer** → la séance s'arrête sur la montre et la Live Activity
|
||||
disparaît immédiatement
|
||||
|
||||
⚠️ **Limite Apple, à connaître avant de crier au bug** : `WCSession.isReachable`
|
||||
retombe à false quand l'app watchOS tourne sa séance en arrière-plan profond
|
||||
(poignet baissé, écran éteint). La commande bascule alors sur
|
||||
`transferUserInfo` : elle est **garantie mais différée**, donc elle s'applique
|
||||
au réveil de l'app montre et non à la seconde. Poignet levé, c'est immédiat.
|
||||
Aucune API publique ne fait mieux.
|
||||
|
||||
Détail mineur : en **mode test** (FC simulée), la pause bascule l'état mais la
|
||||
simulation continue d'émettre des samples. Sans effet sur une vraie séance.
|
||||
|
||||
## Étape 5 — TestFlight *(facultatif)*
|
||||
|
||||
Rien de spécifique ici : c'est la procédure habituelle, étapes 7 à 9 de
|
||||
|
||||
Reference in New Issue
Block a user