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:
@@ -109,6 +109,18 @@ struct LiveWorkoutView: View {
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
|
||||
// Pause/reprise : la Live Activity de l'iPhone pilote les mêmes
|
||||
// appels, l'état affiché ici doit donc suivre `isPaused` et non
|
||||
// un état local au bouton.
|
||||
Button {
|
||||
workout.isPaused ? workout.resume() : workout.pause()
|
||||
} label: {
|
||||
Label(workout.isPaused ? "Reprendre" : "Pause",
|
||||
systemImage: workout.isPaused ? "play.fill" : "pause.fill")
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.tint(workout.isPaused ? .green : .yellow)
|
||||
|
||||
Button(role: .destructive) {
|
||||
workout.end()
|
||||
} label: {
|
||||
|
||||
Reference in New Issue
Block a user