Commit Graph

11 Commits

Author SHA1 Message Date
Sylvain Bettinelli
fc3ca4ed64 Rename projet : coach-ios → coach-mobile (cohérent avec dual-platform)
- package.json : name 'coach-mobile', description mentionne iOS+Android,
  scripts 'sync', 'sync:ios', 'sync:android', 'open:android', 'build:android'
- README.md : titre "Coach Hypnotruck — Mobile (iOS + Android)", section
  Architecture mentionne Coque Android Capacitor + Health Connect, commande
  cap-assets sans --ios pour générer les deux plateformes en une fois
- coach-ios.local.json filename CONSERVÉ pour ne pas casser les references
  dans le code Swift natif AppDelegate.swift / CoachAuth.swift

Action user pour finaliser :
1. Renommer le repo Gitea : Settings → Repository name → coach-mobile
2. Local : `mv ~/coach-ios ~/coach-mobile && cd ~/coach-mobile`
3. Update remote : `git remote set-url origin git@gitea:sylvain/coach-mobile.git`
2026-05-07 16:31:59 +00:00
Sylvain Bettinelli
04581915ac Generate Android icons + splash variants depuis resources/
@capacitor/assets v3.0.5 → 87 assets Android générés à partir des sources
1024x1024 (icon) et 2732x2732 (splash) déjà présentes :
- mipmap-{m,h,xh,xxh,xxxh}dpi : ic_launcher.png + _round + _foreground
  (foreground/background layers pour adaptive icons Android 8+)
- drawable-{land,port}-{l,m,h,xh,xxh,xxxh}dpi : splash.png
- mipmap-anydpi-v26 : ic_launcher.xml et ic_launcher_round.xml
  (XML adaptive icon refs vers les layers PNG)

iOS pbxproj : strip leading zero `0920` → `920` (effet de bord du tool, pas
de comportement Xcode modifié — juste format normalisé).

Reste assets marketing pour Play Console (Feature Graphic 1024x500,
screenshots phone) — à générer au moment du upload, pas dans le repo.
2026-05-07 16:30:35 +00:00
Sylvain Bettinelli
1a6a1f13f4 Health Connect: bump minSdk 26 + privacy policy URL
@capgo/capacitor-health plugin (déjà dans package.json) requiert min SDK 26
(Android 8.0+) — Health Connect n'existe pas en deçà. Bump explicite avec
commentaire pour ne pas se faire piéger plus tard si on baisse le min sdk.

Privacy Policy URL pointée vers https://coach.hypnotruck.ch/privacy (route
déjà servie par FastAPI). C'est la page que Health Connect ouvre dans une
WebView quand l'user clique "Politique de confidentialité" dans la dialog
de permissions natives.

iOS déjà 100% configuré côté Health (entitlement + NSHealthShareUsage +
NSHealthUpdateUsage en FR). Rien à toucher.
2026-05-07 16:27:44 +00:00
Sylvain Bettinelli
7818f7b663 Init Android platform via cap add android
Génère la structure Capacitor Android (gradle + manifest + activity Java/Kotlin)
avec applicationId 'ch.hypnotruck.coach' (cohérent avec iOS), minSdk 24, target 36.

8 plugins synchronisés au passage (déjà déclarés dans package.json) :
@capacitor/{app,geolocation,haptics,local-notifications,push-notifications,
splash-screen,status-bar} et @capgo/capacitor-health.

Build APK toujours bloqué côté infra (Android SDK non installé sur cette machine,
+ attente validation Play Console pour signing/upload). Mais la structure est
prête : `cap sync` après modification du web puis `./gradlew assembleDebug`
sur une machine avec Android SDK.

Étape suivante : configurer permissions Health Connect dans AndroidManifest +
sync iOS pour cohérence cross-platform.
2026-05-07 16:26:30 +00:00
Sylvain Bettinelli
a7809992a9 Enregistre CoachAuth.swift dans project.pbxproj
Évite l'étape manuelle Add Files dans Xcode. Le fichier sera
automatiquement compilé dès qu'il existe dans ios/App/App/CoachAuth.swift.
2026-05-05 19:33:30 +00:00
Sylvain Bettinelli
50a8db9830 Inject auth cookie native dans AppDelegate au lancement
Évite le redirect 303 du backend /login qui casse WKWebView (WebKitErrorDomain
code 102, frame load interrupted by policy change). Le cookie est posé
directement dans HTTPCookieStorage.shared avec les bons attributs (domain
coach.hypnotruck.ch, path /, secure, expire 1 an).

Token lu depuis CoachAuth.kCoachWebToken défini dans CoachAuth.swift
(gitignored). Template fourni dans CoachAuth.swift.example.

Setup côté Mac mini :
1. cp ios/App/App/CoachAuth.swift.example ios/App/App/CoachAuth.swift
2. Éditer pour mettre la vraie valeur du token
3. Dans Xcode, Right-click App folder → Add Files → sélectionner CoachAuth.swift
2026-05-05 19:31:38 +00:00
Sylvain
6e3f74209b Init iOS project (cap add ios) avec privacy keys et entitlements 2026-05-05 21:29:17 +02:00
Sylvain Bettinelli
5f3144c2ec Gitignore CoachAuth.swift (contient le token WebView injecté natif) 2026-05-05 19:27:16 +00:00
Sylvain Bettinelli
b64a4029e7 Revert auto-login via /login?token=... — WKWebView casse le redirect 303
WebKit error code 102 (Frame load interrupted by policy change) sur le redirect
303 retourné par /login après pose du cookie. Solution Phase 0 : laisser le
user saisir le token une fois via le formulaire /login standard, le cookie
coach_web_token (1 an, secure, httponly, samesite=lax) doit persister dans
WKWebView pour les lancements suivants.

Si la persistance cookie échoue : inject natif via AppDelegate.swift à venir.
2026-05-05 19:24:14 +00:00
Sylvain Bettinelli
3e71dbe3a3 Auto-login via token coach_web_token au lancement
- capacitor.config.ts charge coachWebToken depuis coach-ios.local.json (gitignored)
- server.url devient https://coach.hypnotruck.ch/login?token=... → backend pose le cookie 1 an, redirige vers /
- Au prochain lancement, le cookie tient → /login?token redirige direct vers /
- coach-ios.local.json.example fourni pour setup Mac mini
2026-05-05 19:15:59 +00:00
Sylvain Bettinelli
1d82ec8b10 Init Coach Hypnotruck iOS — Capacitor 8 wrapper
- Capacitor 8 + plugins natifs (push, local-notif, geoloc, HealthKit Capgo, splash, status bar, haptics)
- Config pointe vers https://coach.hypnotruck.ch (server.url)
- Icône 1024×1024 + splash 2732×2732 depuis icon-512 PWA coach_sportif
- README complet avec procédure build sur Mac mini
- Bundle ID : ch.hypnotruck.coach, App name : Coach Hypnotruck
2026-05-05 16:17:11 +00:00