Statut chantier, commits, et 3 deltas vs pseudocode (ConnectivityManager non @MainActor, WorkoutManager @MainActor + délégués nonisolated, registerPluginInstance Capacitor 8). Reste : test device + TestFlight + cross-check JS /live. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.0 KiB
5.0 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.chdans une WebView - Pas de code web embarqué —
server.urldanscapacitor.config.tspointe 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(renommagecoach-mobileà faire) ; fichiercoach-ios.local.jsonconservé 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
- 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). - Cookie inject AppDelegate (iOS) : mécanisme critique pour l'auth WKWebView. Toute modif
AppDelegate.swiftdoit préserver ce flux. - Health Connect Android : nécessite la privacy policy URL dans le manifest (validation Play Console).
- Pas d'extrapolation : root cause vérifiable avant tout fix natif. iOS+Android = doubles surfaces de bug.
- Default yes : décider et exécuter (sauf actions destructives).
- Pousser après commit :
git pushsystématique. - 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.swiftavant de toucher au flow HealthKit
Code Kotlin / Android
compose-state-hoisting— si plugin Capacitor custom avec UI Composekotlin-coroutines-structured-concurrency— appels Health Connect asynckotlin-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 surcoach.hypnotruck.ch(le contenu réel de la WebView)cso— audit signatures, entitlements, secrets danscoach-ios.local.jsonship— workflow PR (mais les releases App Store/Play Store restent manuelles depuis Mac mini)
📂 Conventions code
- iOS natif :
ios/App/App/*.swiftAppDelegate.swift— bootstrap + cookie inject (NE PAS CASSER)MainViewController.swift— WKWebView configCoachAuth.swift.example→ copier enCoachAuth.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é versios/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-ios→coach-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 — Phases 1-3 RÉALISÉES (2026-05-25, sur
main) : targetCoachWatch+ 4 fichiers Swift watchOS + plugin CapacitorCoachLiveBridge. Builds verts (watchsimulator + App embed), UI validée sur sim. Reste : test device + TestFlight. Détails et deltas watchOS 26 dansdocs/watchos-live-workout-plan.md(section "Avancement réel"). - 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).