Le guide Xcode annoncait un fichier a ajouter, il y en a quatre

SESSION-XCODE.md disait « une seule exception : CoachWatchComplications.swift ».
C'etait vrai le 3 aout, jour ou il a ete ecrit. Le widget de saisie rapide est
arrive le 6 aout avec trois fichiers Swift de plus, et aucun n'appartient a une
target : CoachQuickLog.swift, CoachQuickSync.swift, CoachQuickWidget.swift.
Verifie dans project.pbxproj, pas suppose.

Consequence si on suivait le guide tel quel : l'extension ne compile pas, et le
widget « Saisie des repas et boissons » n'apparait nulle part - sans que rien
n'explique pourquoi, puisque le guide affirmait qu'il n'y avait rien a ajouter.

Une etape 4b liste les trois fichiers avec leur Target Membership exact.
CoachQuickLog va dans DEUX cibles, l'extension ecrivant la file que l'app vide.
Et ce qui est deja fait est dit comme tel, pour ne pas le refaire : le widget
est enregistre dans le WidgetBundle, et CoachQuickSync.flush() est bien appele
par AppDelegate.

Le point 4 du runbook widgets demandait de verifier le schema coachapp:// dans
l'Info.plist. Il est barre : depuis e715804 les boutons pointent sur des URL
https routees par Universal Links, precisement parce que coachapp:// n'etait
routé nulle part et ouvrait l'app sur sa derniere page consultee.

Aucun code touche, uniquement de la documentation de session.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-08-11 11:40:49 +00:00
parent ebb9273dc3
commit ddfd95cbd7
2 changed files with 48 additions and 9 deletions

View File

@@ -14,19 +14,33 @@ t'arrêter après l'étape 6** et publier un autre jour.
## Avant de commencer — ce qui a changé ## Avant de commencer — ce qui a changé
Bonne nouvelle : **il n'y a presque plus de fichiers à ajouter à la main.** Les La plupart des Swift sont déjà déclarés dans les bonnes targets (commits
Swift sont déjà déclarés dans les bonnes targets (commits `caeac37`, `f30cc60`). `caeac37`, `f30cc60`). **Quatre** ne le sont pas et doivent être ajoutés à la
main — état vérifié dans `project.pbxproj` le 2026-08-11 :
Une seule exception : `CoachWatchComplications.swift`, qui a besoin d'une target | Fichier | Target Membership à cocher | Étape |
qui n'existe pas encore. C'est l'étape 5 — **et elle est facultative** (elle |---|---|---|
n'apporte que les complications sur le cadran de la montre). | `App/CoachQuickLog.swift` | **App + CoachLiveActivity** | 4b |
| `App/CoachQuickSync.swift` | **App** seule | 4b |
| `CoachLiveActivity/CoachQuickWidget.swift` | **CoachLiveActivity** seule | 4b |
| `CoachWatchWidgets/CoachWatchComplications.swift` | **CoachWatchWidgets** (target à créer) | 5 |
⚠️ Les trois premiers sont arrivés le **2026-08-06**, après la rédaction de ce
guide, qui annonçait « une seule exception » — c'était vrai le 3 août. Sans eux,
le widget « Saisie des repas et boissons » ne se compile pas. Leur runbook
détaillé est `docs/widgets-runbook-mac.md`.
Déjà fait côté code, à ne pas refaire : `CoachQuickWidget()` est enregistré dans
le `WidgetBundle` (`CoachLiveActivityBundle.swift`) et `CoachQuickSync.flush()`
est appelé depuis `AppDelegate` (l. 57).
| Ce que tu vas activer | Étape | | Ce que tu vas activer | Étape |
|---|---| |---|---|
| Login Apple + Google natif | rien à faire, déjà câblé | | Login Apple + Google natif | rien à faire, déjà câblé |
| Live workout watchOS | rien à faire, déjà câblé | | Live workout watchOS | rien à faire, déjà câblé |
| Routine sur la Watch | rien à faire, déjà câblé | | Routine sur la Watch | rien à faire, déjà câblé |
| Widgets iPhone (Séance du jour, Score de forme) | étapes 2-3 (App Group) | | Widgets iPhone (Séance du jour, Score de forme) | étapes 3-4 (App Group) |
| Widget Saisie rapide (eau, café, photo, scan) | étape 4b (3 fichiers à ajouter) |
| Complications sur le cadran Watch | étape 5 (facultative) | | Complications sur le cadran Watch | étape 5 (facultative) |
--- ---
@@ -117,6 +131,29 @@ bloqué par les modifications locales :
git add -A ios/App && git commit -m "chore(xcode): App Groups sur App, LiveActivity et Watch" && git push git add -A ios/App && git commit -m "chore(xcode): App Groups sur App, LiveActivity et Watch" && git push
``` ```
## Étape 4b — Les trois fichiers du widget « Saisie rapide » *(~5 min)*
Ils existent dans le repo depuis le 6 août mais n'appartiennent à aucune target :
tant qu'ils n'y sont pas, le widget eau/café n'existe pas et l'extension ne
compile pas.
Dans Xcode, clic droit sur le dossier de la cible → **Add Files to "App"…**
**décoche** *Copy items if needed* → coche la ou les targets du tableau. Pour un
fichier déjà présent dans l'arborescence, passe par l'inspecteur de droite
(`Cmd+Option+1`) → **Target Membership**.
| Fichier | Cocher |
|---|---|
| `ios/App/App/CoachQuickLog.swift` | **App** *et* **CoachLiveActivity** |
| `ios/App/App/CoachQuickSync.swift` | **App** seule |
| `ios/App/CoachLiveActivity/CoachQuickWidget.swift` | **CoachLiveActivity** seule |
`CoachQuickLog.swift` doit bien être dans **les deux** cibles : l'extension
écrit la file d'attente, l'app la vide.
Rien d'autre à câbler — `CoachQuickWidget()` est déjà dans le `WidgetBundle` et
`CoachQuickSync.flush()` est déjà appelé par `AppDelegate`. Puis commit + push.
## Étape 5 — Complications Watch *(facultative, ~15 min)* ## Étape 5 — Complications Watch *(facultative, ~15 min)*
**Tu peux sauter cette étape** et y revenir plus tard : tout le reste fonctionne **Tu peux sauter cette étape** et y revenir plus tard : tout le reste fonctionne

View File

@@ -133,9 +133,11 @@ file, l'app la vide.
2. Ajouter les deux fichiers au projet Xcode, avec le Target Membership ci-dessus. 2. Ajouter les deux fichiers au projet Xcode, avec le Target Membership ci-dessus.
3. Enregistrer le widget dans le `WidgetBundle` de `CoachLiveActivity` : 3. Enregistrer le widget dans le `WidgetBundle` de `CoachLiveActivity` :
ajouter `CoachQuickWidget()` à côté des widgets existants. ajouter `CoachQuickWidget()` à côté des widgets existants.
4. **Schéma d'URL** : vérifier `coachapp://` dans le `Info.plist` de l'App 4. ~~**Schéma d'URL** : vérifier `coachapp://` dans le `Info.plist`.~~
(`CFBundleURLTypes`). Les boutons pointent sur `coachapp://meals?photo=1` et **Sans objet depuis `e715804`** : les boutons pointent sur
`coachapp://meals?scan=1`. `https://coach.hypnotruck.ch/meals?photo=1` et `?scan=1`, routés par
Universal Links comme les autres widgets. Un `coachapp://` n'était routé
nulle part et ouvrait l'app sur sa dernière page consultée, au hasard.
5. Cible de déploiement **iOS 17 minimum** : en dessous, le widget compile mais 5. Cible de déploiement **iOS 17 minimum** : en dessous, le widget compile mais
les boutons d'App Intent n'apparaissent pas. les boutons d'App Intent n'apparaissent pas.
6. Builder sur un device réel — les App Intents ne s'exécutent pas de façon 6. Builder sur un device réel — les App Intents ne s'exécutent pas de façon