feat(web): plomberie Capacitor Android — dépendances, config, routeur, token store (portage mobile #39, phase 2) #56
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/capacitor-android-shell"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Deuxième phase du portage mobile #39 : tout ce qui est vérifiable en CI de la coquille Capacitor. Le rendu et le comportement web sont inchangés — chaque chemin natif est derrière
Capacitor.isNativePlatform(), qui vautfalsedans tout navigateur (et sous Cypress).Contenu
@capacitor/core,@capacitor/android,@capacitor/preferences(+@capacitor/clien dev), toutes en 8.5.x.apps/web/capacitor.config.ts:appIdfr.kyuno.batchcooking,appName« Batch Cooking »,webDir: "dist". Lu uniquement par l'outillage@capacitor/cli, jamais bundlé.apps/web/src/api/capacitor-token-store.ts: l'implémentationTokenStoreadossée à@capacitor/preferences(leTokenStore+setTokenStore()ont été posés en phase 1). Importée dynamiquement dansmain.tsx, seulement quandCapacitor.isNativePlatform()— vérifié : Vite la met dans un chunk séparé de 0,5 ko qui n'est jamais requis côté navigateur, donc@capacitor/preferencesn'entre pas dans le bundle web.main.tsx:HashRouteren natif (le bundle packagé sertdist/depuis l'origine locale de la WebView, sans serveur pour réécrire les liens profonds versindex.html— un accès direct à une route profonde ou un reload 404erait),BrowserRouterinchangé sur le web. Bootstrapasyncpour installer le token store natif avant le premier rendu (AuthProviderfaitGET /auth/meau montage) ; le chemin web ne fait aucunawait, le rendu n'est pas différé.build:capacitor(vite build --mode capacitor) +.env.capacitor.example: un build packagé a besoin de l'URL absolue et publique de l'API en dur — pas de « même origine que la page » possible.Étape manuelle restante (hors CI, cf. corps de l'issue #39)
npx cap add android(génèreapps/web/android/, un projet Gradle — nécessite Android Studio + le SDK), build de l'APK, lancement sur émulateur/appareil, et le test manuel « connexion → planning affiché → un appel API authentifié réussit via le jeton ». Rien de tout ça n'est mockable/exécutable en CI ; cette PR pose tout ce qui l'entoure côté code.Restent aussi à faire lors de cette étape : icônes/splash, couleur de status bar (alignée sur
_theme.scss), permissionINTERNETdu manifeste — tous dans le projet natif généré.Tests
pnpm build+pnpm lintverts.pnpm install --frozen-lockfileOK (lockfile cohérent).smoke+layout+sidebar: 14/14 en local — le refactor du bootstrap et le choix de routeur (BrowserRoutercôté web) ne cassent rien : redirection auth, navigation sidebar, layout/thème.Avancement de #39 — l'issue reste ouverte jusqu'à la génération + validation du projet natif.
🤖 Generated with Claude Code