feat(deeplink): entitlement associated-domains pour coach.hypnotruck.ch

Aucun .widgetURL ne ramenait dans l'app : la Live Activity, les deux widgets
iPhone et les deux complications Watch pointent sur des URL https, mais sans
entitlement associated-domains ni fichier d'association servi, iOS ouvrait
Safari — où le cookie d'auth de la WKWebView n'existe pas.

Le versant serveur est déjà en prod (coach_sportif 8ec0047 : route AASA +
deeplink.js). Reste la capability à vérifier dans Xcode côté Mac, cf. COWORK.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-08-06 09:27:56 +00:00
parent 37d52bf18d
commit f480c36dab
2 changed files with 34 additions and 0 deletions

View File

@@ -51,6 +51,31 @@ dans **`docs/routine-watch-runbook-mac.md`** (archi, étapes, débogage).
- Côté backend `coach_sportif` : **déjà en prod** (`/api/routine`,
`/api/routine/check`, `/api/routine/day`, `data/routine_log.json`).
## 🔗 Universal Links (2026-08-06, dev — non compilé)
Constat : **aucun** `.widgetURL` ne ramenait dans l'app. La Live Activity
(`CoachLiveActivityWidget`), les deux widgets iPhone (`CoachWidgets``/calendar`
et `/forme`) et les deux complications Watch pointent tous sur des URL
`https://coach.hypnotruck.ch/…`, mais l'entitlement `associated-domains` était
absent et `/.well-known/apple-app-site-association` renvoyait 404 → **un tap
ouvrait Safari**, où le cookie d'auth injecté dans la WKWebView n'existe pas :
écran de login.
- **Backend — déjà en prod** (commit `8ec0047`) : route AASA publique déclarant
`TZ2PVTRKNY.ch.hypnotruck.coach` sur `/live`, `/routine`, `/forme`,
`/calendar` (chemins énumérés un par un pour ne pas détourner
`/calendar.ics`), et `static/deeplink.js` qui écoute `appUrlOpen` et amène la
WebView sur le bon chemin — Capacitor ne le fait pas tout seul.
- **Côté ce repo** : `App.entitlements` gagne
`com.apple.developer.associated-domains = applinks:coach.hypnotruck.ch`.
- ⚠️ **Étape Mac** : ouvrir la cible **App***Signing & Capabilities*
vérifier qu'**Associated Domains** apparaît avec `applinks:coach.hypnotruck.ch`
(l'entitlement est là, Xcode doit régénérer le profil ; si erreur de signing,
décocher/recocher *Automatically manage signing*). Puis rebuild.
- Effet attendu : tap sur la Live Activity → app → `/live` → la vue Liquid Glass
`CoachLiveView` s'ouvre d'elle-même (le JS de `/live` appelle
`openNativeLive`). C'est le point d'entrée qui manquait.
## 👉 À 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`.
- **iOS — bloqué Mac** : builder + uploader TestFlight le natif accumulé (login Apple+Google natif, watchOS live, HeartRateRangeAlert). Sur le Mac : `cd ~/coach-ios && git pull && npm install && npx cap sync ios && open ios/App/App.xcworkspace` → Clean Build Folder → Archive → Upload.