Files
coach-ios/CLAUDE.md
Sylvain Bettinelli 6e4011db3f docs(watchos): plan technique + handoff Claude Code Mac mini
Préparation du chantier watchOS Live Workout (live FC/calories/distance
sur l'iPhone pendant que Sylvain fait du sport sur l'Apple Watch).

Décision archi : la phase native Swift/watchOS nécessite Xcode + Apple
Watch device, indispo dans la session Linux où ces docs ont été écrites.
D'où le handoff vers Claude Code lancé sur le Mac mini Sylvain.

Fichiers ajoutés :

- `docs/watchos-live-workout-plan.md` (444 lignes)
  Plan technique complet en 5 phases :
  1. Création target watchOS Xcode + entitlements
  2. Code Swift watchOS (4 fichiers : CoachWatchApp, WorkoutManager,
     ConnectivityManager, ContentView)
  3. Plugin Capacitor iOS (CoachLiveBridge.swift) qui reçoit les samples
     WCSession et les publie au JS via notifyListeners
  4. Route web /live + template (squelette prêt à coller dans
     coach_sportif/web/)
  5. Tests device + TestFlight internal
  Inclut décisions d'archi (HKLiveWorkoutBuilder, sendMessage avec
  fallback transferUserInfo, pas de Live Activity V1), pseudocode Swift,
  estimation effort 12-20h sur 3-5 jours, et risques + mitigations.

- `HANDOFF-WATCHOS.md` (181 lignes)
  Instructions étape par étape pour Claude Code Mac. Liste les memories
  à charger (project_coach_watchos_live, project_coach_ios,
  project_coach_app_commercial, user_sante_cardio,
  feedback_inline_display_none_toggle), workflow Step 1..6 (setup env,
  création target, lecture docs Apple, implémentation Swift, route web,
  tests device), garde-fous et règle "qui possède quoi" pendant le
  chantier (Mac = Swift natif, Linux = backend Python).

- `CLAUDE.md` (1ère commit, fichier existait en local non-tracked)
  Pointeur ajouté dans la section Backlog vers les 2 nouveaux fichiers.

Aucun fichier Swift n'a été écrit ici (décision conjointe avec Sylvain
pour ne pas risquer du code à l'aveugle sans Xcode pour valider les
APIs HealthKit/WCSession à jour).
2026-05-24 13:25:07 +00:00

4.9 KiB

CLAUDE.md — coach-ios (wrapper mobile Capacitor)

Instructions pour Claude Code sur ce projet. Lis ce fichier en début de session.

🎯 Contexte projet

  • Nature : wrapper Capacitor 8 (iOS + Android) qui charge https://coach.hypnotruck.ch dans une WebView
  • Pas de code web embarquéserver.url dans capacitor.config.ts pointe vers la prod → déploiement web = mise à jour app sans review Apple/Google
  • Bundle ID : ch.hypnotruck.coach (iOS + Android)
  • Repo Gitea : encore nommé coach-ios (renommage coach-mobile à faire) ; fichier coach-ios.local.json conservé pour ne pas casser les refs Swift
  • Plateformes : iOS 13+ et Android 8.0+ (API 26+, requis par Health Connect)
  • Build iOS : nécessite le Mac mini (macOS 13+, Xcode 15+). Pas de Mac cloud nécessaire.
  • État : iOS prêt (HealthKit + cookie inject AppDelegate). Android prêt. Bloqué externe : upgrade macOS 26 pour build iOS + Play Console $25 ~3-5j.

🔒 Règles non négociables

  1. Le code web n'est PAS ici — pour modifier l'UI/UX, c'est coach_sportif/web/. Ce repo ne touche QUE le natif (Swift, Kotlin, plugins Capacitor, config).
  2. Cookie inject AppDelegate (iOS) : mécanisme critique pour l'auth WKWebView. Toute modif AppDelegate.swift doit préserver ce flux.
  3. Health Connect Android : nécessite la privacy policy URL dans le manifest (validation Play Console).
  4. Pas d'extrapolation : root cause vérifiable avant tout fix natif. iOS+Android = doubles surfaces de bug.
  5. Default yes : décider et exécuter (sauf actions destructives).
  6. Pousser après commit : git push systématique.
  7. Descriptions Info.plist en FR (NSHealthShareUsageDescription etc.) — App Store FR.

🛠️ Workflow par phase

Avant toute feature native

  • brainstorming — explorer l'intent (souvent : "ce truc marche sur web, comment le porter en natif ?")
  • grill-with-docs — challenger : est-ce vraiment du natif ou du web qui marcherait via WebView ?

Code Swift / iOS

  • swiftui-pro — quand le chantier watchOS live workout démarrera (HKWorkoutPlan + WatchConnectivity)
  • Vérifier CoachHealthRoute.swift, CoachWorkoutKit.swift, CoachWorkoutObserver.swift avant de toucher au flow HealthKit

Code Kotlin / Android

  • compose-state-hoisting — si plugin Capacitor custom avec UI Compose
  • kotlin-coroutines-structured-concurrency — appels Health Connect async
  • kotlin-flow-state-event-modeling — observations Health Connect

Bug / régression natif

  • investigate — root cause discipline (cassures fréquentes : permissions, signatures, entitlements)
  • diagnose — reproduire sur device réel, pas juste simulator

QA / ship

  • qa (gstack) — l'app pointant vers la prod web, tester le web couvre 80%
  • webapp-testing — Playwright sur coach.hypnotruck.ch (le contenu réel de la WebView)
  • cso — audit signatures, entitlements, secrets dans coach-ios.local.json
  • ship — workflow PR (mais les releases App Store/Play Store restent manuelles depuis Mac mini)

📂 Conventions code

  • iOS natif : ios/App/App/*.swift
    • AppDelegate.swift — bootstrap + cookie inject (NE PAS CASSER)
    • MainViewController.swift — WKWebView config
    • CoachAuth.swift.example → copier en CoachAuth.swift (gitignored, contient secret partagé)
    • CoachHealthRoute.swift / CoachWorkoutKit.swift / CoachWorkoutObserver.swift — pont HealthKit ↔ web
  • Android natif : android/app/src/main/java/ch/...
  • Config Capacitor : capacitor.config.ts (TS, source de vérité) → généré vers ios/App/App/capacitor.config.json
  • Resources : resources/ → assets (icons, splash) générés par @capacitor/assets

🔗 Plugins Capacitor utilisés

  • @capacitor/push-notifications
  • @capacitor/local-notifications
  • @capacitor/geolocation
  • @capgo/capacitor-health — HealthKit (iOS) / Health Connect (Android)
  • @capacitor/splash-screen
  • @capacitor/status-bar
  • @capacitor/haptics

🚧 Backlog notable

  • Renommer le repo Gitea coach-ioscoach-mobile
  • Upgrade macOS 26 sur Mac mini pour reprendre les builds iOS
  • Play Console validation (~3-5j, $25 one-shot) pour upload Android
  • watchOS live workout compagnon (chantier ACTIF depuis 2026-05-24) — plan technique complet dans docs/watchos-live-workout-plan.md. Handoff pour Claude Code Mac dans HANDOFF-WATCHOS.md (à lire en 1er si tu reprends ce chantier).
  • Push workouts vers Apple Watch (HKWorkoutPlan) / Polar (Training Targets API) / Garmin — backlog 2026-05-12

⚠️ Limites connues sync

  • Apple Watch sync : impossible via API tierce — le wrapper HealthKit dans cette app est obligatoire pour récupérer les données Watch.
  • Polar AccessLink : pas d'historique pré-enregistrement (limitation API).
  • Push training-targets vers Polar : nécessiterait migration AccessLink v4 (backlog).