From ddfd95cbd790a2c490788aef8f31f4d8e79ca975 Mon Sep 17 00:00:00 2001 From: Sylvain Bettinelli Date: Tue, 11 Aug 2026 11:40:49 +0000 Subject: [PATCH] Le guide Xcode annoncait un fichier a ajouter, il y en a quatre MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/SESSION-XCODE.md | 49 ++++++++++++++++++++++++++++++++----- docs/widgets-runbook-mac.md | 8 +++--- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/docs/SESSION-XCODE.md b/docs/SESSION-XCODE.md index c2683db..37fa621 100644 --- a/docs/SESSION-XCODE.md +++ b/docs/SESSION-XCODE.md @@ -14,19 +14,33 @@ t'arrêter après l'étape 6** et publier un autre jour. ## Avant de commencer — ce qui a changé -Bonne nouvelle : **il n'y a presque plus de fichiers à ajouter à la main.** Les -Swift sont déjà déclarés dans les bonnes targets (commits `caeac37`, `f30cc60`). +La plupart des Swift sont déjà déclarés dans les bonnes targets (commits +`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 -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). +| Fichier | Target Membership à cocher | Étape | +|---|---|---| +| `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 | |---|---| | Login Apple + Google natif | 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é | -| 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) | --- @@ -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 ``` +## É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)* **Tu peux sauter cette étape** et y revenir plus tard : tout le reste fonctionne diff --git a/docs/widgets-runbook-mac.md b/docs/widgets-runbook-mac.md index 30f082c..34e38ca 100644 --- a/docs/widgets-runbook-mac.md +++ b/docs/widgets-runbook-mac.md @@ -133,9 +133,11 @@ file, l'app la vide. 2. Ajouter les deux fichiers au projet Xcode, avec le Target Membership ci-dessus. 3. Enregistrer le widget dans le `WidgetBundle` de `CoachLiveActivity` : ajouter `CoachQuickWidget()` à côté des widgets existants. -4. **Schéma d'URL** : vérifier `coachapp://` dans le `Info.plist` de l'App - (`CFBundleURLTypes`). Les boutons pointent sur `coachapp://meals?photo=1` et - `coachapp://meals?scan=1`. +4. ~~**Schéma d'URL** : vérifier `coachapp://` dans le `Info.plist`.~~ + **Sans objet depuis `e715804`** : les boutons pointent sur + `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 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