COWORK : les fichiers sont dans la cible, la manip Xcode n'a plus lieu d'être
La note de ce matin demandait un « Add Files » pour IntervalEngine. Les trois fichiers du chantier sont désormais déclarés dans la cible CoachWatch directement dans le pbxproj : suivre l'ancienne consigne créerait un doublon. Ajout de l'ordre de vérification au premier build — la trace dans Santé et la non-régression de la FC sur /live sont les deux points qui décident si le chantier tient. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
55
COWORK.md
55
COWORK.md
@@ -76,10 +76,11 @@ ouvrait Safari**, où le cookie d'auth injecté dans la WKWebView n'existe pas :
|
|||||||
`CoachLiveView` s'ouvre d'elle-même (le JS de `/live` appelle
|
`CoachLiveView` s'ouvre d'elle-même (le JS de `/live` appelle
|
||||||
`openNativeLive`). C'est le point d'entrée qui manquait.
|
`openNativeLive`). C'est le point d'entrée qui manquait.
|
||||||
|
|
||||||
## 🆕 Moteur d'intervalles (2026-08-20, dev — non câblé, non compilé)
|
## 🆕 Chantier montre outdoor (2026-08-20, dev — non compilé)
|
||||||
|
|
||||||
Branche **`feat/watch-outdoor`** (poussée sur Gitea le 2026-08-20), commit
|
Branche **`feat/watch-outdoor`**, commits `f2fa3cc` (moteur d'intervalles) et
|
||||||
`f2fa3cc`. `IntervalEngine` guide les intervalles d'une séance au poignet.
|
`a04dfc4` (trace GPS). `IntervalEngine` guide les intervalles d'une séance au
|
||||||
|
poignet ; `RouteFilter` + `LocationTracker` enregistrent le parcours.
|
||||||
|
|
||||||
**Pourquoi ce code existe** : WorkoutKit ne sait pas exécuter une séance
|
**Pourquoi ce code existe** : WorkoutKit ne sait pas exécuter une séance
|
||||||
structurée dans une app tierce — son seul point d'exécution public est
|
structurée dans une app tierce — son seul point d'exécution public est
|
||||||
@@ -91,22 +92,42 @@ horloge interne. Il répond à « où en sommes-nous ? » à partir du temps et
|
|||||||
distance qu'on lui pousse. Le temps de référence est `elapsedTime` du builder,
|
distance qu'on lui pousse. Le temps de référence est `elapsedTime` du builder,
|
||||||
qui exclut déjà les pauses.
|
qui exclut déjà les pauses.
|
||||||
|
|
||||||
✅ **42 tests Swift verts sur Linux** (`./tests-linux/run.sh`, toolchain
|
✅ **57 tests Swift verts sur Linux** (`./tests-linux/run.sh`, toolchain
|
||||||
`~/workspace/toolchains/bin`), dont les 17 d'`IntervalEngine`. La logique est
|
`~/workspace/toolchains/bin`) : 17 pour `IntervalEngine`, 15 pour `RouteFilter`.
|
||||||
donc validée — ce qui reste est l'intégration, que Linux ne peut pas compiler.
|
Les deux ont été **vérifiés rouges** en neutralisant leur correction (5 échecs
|
||||||
|
sans les frontières théoriques du moteur, 4 sans le lissage du dénivelé). La
|
||||||
|
logique est donc validée — reste l'intégration, que Linux ne peut pas compiler.
|
||||||
|
|
||||||
⚠️ **ÉTAPE MAC OBLIGATOIRE — le fichier n'est PAS dans le projet Xcode.**
|
✅ **Plus d'« Add Files » à faire** — correction du 2026-08-20 après-midi. Une
|
||||||
Vérifié le 2026-08-20 : `grep -c "IntervalEngine" ios/App/App.xcodeproj/project.pbxproj`
|
note antérieure de ce fichier annonçait `IntervalEngine` absent du projet : ce
|
||||||
rend **0**. Xcode l'ignore donc totalement, et **ça compile très bien sans lui** —
|
n'est plus vrai. Les **trois** fichiers sont déclarés dans la cible `CoachWatch`
|
||||||
même piège que `VmaTestView.swift`. À faire :
|
directement dans le `pbxproj` (sauvegarde `project.pbxproj.bak-outdoor`).
|
||||||
|
|
||||||
1. `cp ios/App/App.xcodeproj/project.pbxproj ios/App/App.xcodeproj/project.pbxproj.bak-interval`
|
Contrôle avant de builder — chacun doit rendre **2** (déclaration + phase de
|
||||||
2. Clic droit sur le dossier **CoachWatch** → *Add Files to "App"…* →
|
compilation, soit 1 cible) :
|
||||||
`ios/App/CoachWatch/IntervalEngine.swift`
|
```bash
|
||||||
— **décocher** « Copy items if needed », **cocher la cible `CoachWatch`**.
|
for f in IntervalEngine RouteFilter LocationTracker; do
|
||||||
3. Contrôle : `grep -c "IntervalEngine.swift in Sources" ios/App/App.xcodeproj/project.pbxproj`
|
echo "$f: $(grep -c "$f.swift in Sources" ios/App/App.xcodeproj/project.pbxproj)"
|
||||||
doit rendre **1**.
|
done
|
||||||
4. Commit + push du `pbxproj` immédiatement (règle 3 de ce fichier).
|
```
|
||||||
|
|
||||||
|
⚠️ **À vérifier au premier build, dans cet ordre** :
|
||||||
|
1. **Une séance extérieure demande la localisation** (feuille « lorsque l'app
|
||||||
|
est active »). Si rien n'apparaît, la trace ne partira pas.
|
||||||
|
2. **La sortie a bien un parcours dans Santé** à la fin. C'est le test qui
|
||||||
|
compte : `finishRoute` doit être appelé APRÈS `finishWorkout`, sinon la
|
||||||
|
trace existe sans être associée à la séance.
|
||||||
|
3. **La FC remonte toujours sur `/live`** — `WorkoutManager` a été modifié,
|
||||||
|
c'est le test de non-régression prioritaire.
|
||||||
|
4. Écran éteint, poignet baissé : les positions continuent d'arriver. Si elles
|
||||||
|
s'arrêtent, chercher du côté du CPU (une boucle d'affichage trop rapide fait
|
||||||
|
suspendre l'app), pas du côté des autorisations.
|
||||||
|
|
||||||
|
⚠️ `Info.plist` de `CoachWatch` gagne `UIBackgroundModes = [location]` et
|
||||||
|
`NSLocationWhenInUseUsageDescription`. **La clé de background est vitale** :
|
||||||
|
armer `allowsBackgroundLocationUpdates` sans elle termine l'app. Un garde-fou
|
||||||
|
la vérifie au démarrage, mais si elle disparaissait du build, le suivi
|
||||||
|
retomberait silencieusement au premier plan seul.
|
||||||
|
|
||||||
## 👉 À reprendre
|
## 👉 À reprendre
|
||||||
- ✅ **Phase 4 login — FAIT & DÉPLOYÉ** (révocation Apple à la suppression de compte) : code complet côté backend `coach_sportif` (commit `5ae6e2d`) + clé `.p8` déployée sur le VPS prod (vérifié 2026-06-26). Rien à coder. Détails : `coach_sportif/COWORK.md`.
|
- ✅ **Phase 4 login — FAIT & DÉPLOYÉ** (révocation Apple à la suppression de compte) : code complet côté backend `coach_sportif` (commit `5ae6e2d`) + clé `.p8` déployée sur le VPS prod (vérifié 2026-06-26). Rien à coder. Détails : `coach_sportif/COWORK.md`.
|
||||||
|
|||||||
Reference in New Issue
Block a user