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