Build simple (aucun fichier neuf, aucune capability), mais avec un piège : la montre doit être rebuildée elle aussi, sinon rien ne change — le message de fin de séance part de CoachWatch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
115 lines
4.4 KiB
Markdown
115 lines
4.4 KiB
Markdown
# Build du correctif « Live Activity fantôme » — runbook Mac
|
|
|
|
**Écrit le 2026-08-11.** Concerne le commit `5e9b4a3` (*La Live Activity
|
|
restait affichée après la fin de séance*).
|
|
|
|
Compte **15 minutes**. C'est un build simple : aucun fichier nouveau, aucune
|
|
target à créer, aucune capability à ajouter. Les cinq fichiers modifiés sont
|
|
déjà membres de leurs targets (vérifié dans `project.pbxproj`).
|
|
|
|
⚠️ **La montre doit être rebuildée aussi**, pas seulement l'iPhone : le message
|
|
de fin de séance part de `CoachWatch`. Un build iPhone seul ne corrige rien.
|
|
|
|
---
|
|
|
|
## Étape 1 — Récupérer le code
|
|
|
|
**Xcode fermé** (`Cmd+Q`, pas juste la fenêtre) :
|
|
|
|
```bash
|
|
cd ~/coach-ios
|
|
git pull
|
|
git log --oneline -1 # doit afficher 5e9b4a3 ou plus récent
|
|
```
|
|
|
|
Pas besoin de `npm install` ni de `npx cap sync ios` : aucune dépendance ni
|
|
config Capacitor n'a bougé. Si Xcode râle sur `no such module 'Capacitor'`,
|
|
alors seulement, lance `npx cap sync ios` (Xcode fermé).
|
|
|
|
## Étape 2 — Build sur l'iPhone
|
|
|
|
```bash
|
|
open ios/App/App.xcodeproj
|
|
```
|
|
|
|
1. iPhone branché et déverrouillé, **Apple Watch au poignet et appairée**
|
|
2. Schéma **App** + ton iPhone comme destination
|
|
3. **Run** (`Cmd+R`)
|
|
|
|
Pas de *Clean Build Folder* nécessaire — cinq fichiers modifiés, la
|
|
compilation incrémentale suffit.
|
|
|
|
## Étape 3 — Installer la nouvelle app sur la Watch
|
|
|
|
L'app watchOS est embarquée dans l'app iPhone, mais watchOS ne la réinstalle
|
|
pas toujours tout de suite. **Le plus fiable : builder directement dessus.**
|
|
|
|
1. Schéma **CoachWatch** (menu des schémas, en haut)
|
|
2. Destination : ton **Apple Watch Ultra 3**
|
|
3. **Run** (`Cmd+R`)
|
|
|
|
Le premier lancement sur la montre peut demander 2-3 minutes et afficher
|
|
« Waiting to attach » — c'est normal.
|
|
|
|
> Alternative sans Xcode : iPhone → app **Watch** → *Apps installées* → Coach
|
|
> → attendre la réinstallation. Plus lent et moins déterministe.
|
|
|
|
**Vérifier que la montre a bien la nouvelle version** : dans les logs (étape
|
|
4), la ligne `fin de séance signalée à l'iPhone` n'existe que dans ce build.
|
|
|
|
## Étape 4 — Tester (3 minutes)
|
|
|
|
Le test se fait dans cet ordre, en gardant Console.app ouvert sur le Mac :
|
|
|
|
```
|
|
Console.app → ton iPhone dans la colonne de gauche
|
|
Filtre : subsystem:ch.hypnotruck.coach
|
|
```
|
|
|
|
1. **Démarrer** une séance depuis l'app Coach sur la Watch
|
|
→ la Live Activity apparaît sur l'iPhone (cœur + FC qui bouge)
|
|
→ log `Live Activity started`
|
|
2. **Terminer** la séance sur la Watch
|
|
→ log côté montre : `fin de séance signalée à l'iPhone (reason=session-ended)`
|
|
→ log côté iPhone : `fin de séance reçue de la Watch` puis `Live Activity ended`
|
|
→ **la Live Activity disparaît immédiatement de l'écran**
|
|
|
|
C'est ce dernier point qui valide le correctif. Avant, elle restait ~4 h avec
|
|
la dernière FC figée.
|
|
|
|
3. **Écran verrouillé** : referme l'iPhone pendant la séance, termine sur la
|
|
montre, rallume l'écran. La bannière ne doit plus être là. C'est le cas qui
|
|
échouait vraiment — le watchdog reposait sur un `Timer` qui ne tourne pas
|
|
quand l'app est suspendue.
|
|
|
|
4. Vérifie au passage que **la FC remonte toujours** sur `/live` (le flux de
|
|
samples n'a pas changé, mais `CoachLiveBridge` a été touché).
|
|
|
|
### Le cœur fantôme actuellement à l'écran
|
|
|
|
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 5 — TestFlight *(facultatif)*
|
|
|
|
Rien de spécifique ici : c'est la procédure habituelle, étapes 7 à 9 de
|
|
`docs/SESSION-XCODE.md`. Pense à incrémenter le numéro de build.
|
|
|
|
---
|
|
|
|
## Si ça ne compile pas
|
|
|
|
| Erreur | Cause probable | Solution |
|
|
|---|---|---|
|
|
| `cannot find 'CoachAuth' in scope` | `CoachAuth.swift` absent (non versionné) | étape 2 de `docs/SESSION-XCODE.md` |
|
|
| `no such module 'Capacitor'` | sync manquant | `npx cap sync ios`, Xcode fermé |
|
|
| `value of type 'ConnectivityManager' has no member 'sendEnded'` | la target CoachWatch compile un ancien `ConnectivityManager.swift` | vérifie que le `git pull` a bien eu lieu et que Xcode n'a pas restauré un pbxproj en mémoire |
|
|
| erreur de signing sur CoachWatch | profil pas régénéré | Signing & Capabilities → décoche/recoche *Automatically manage signing* |
|
|
|
|
En cas de blocage, envoie-moi l'étape, le message exact, et :
|
|
|
|
```bash
|
|
cd ~/coach-ios && git log --oneline -3 && git status -sb
|
|
```
|