Files
livrets/README.MD
T
herel a673a9dc60 feat: configurer la signature release Android
Le build release lit androidApp/keystore.properties (gitigné) pour signer
l'AAB ; sans ce fichier, il échoue volontairement. La keystore servira de
clé d'upload Play : la section Publication du README documente la
procédure et la nécessité de la sauvegarder.
2026-08-31 15:04:27 +02:00

84 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Livrets
Jeu d'entraînement aux tables de multiplication (Kotlin Multiplatform, Android + iOS).
## Règles du jeu
- Au lancement, on configure : le **nombre de questions** (5–50), le **temps par question** (3–30 s)
et la **table maximum** (1–12).
- Chaque question est une multiplication tirée au hasard dans les tables 1 à la table maximum :
soit `a × b = ?`, soit `a × ? = b`. On répond avec le pavé numérique.
- Temps écoulé = réponse comptée comme fausse (une saisie en cours est auto-validée).
- Après chaque réponse, un feedback (vert/rouge) s'affiche 1,5 s puis la question suivante arrive.
- À la fin : score, taux de réussite, temps moyen et résumé de chaque réponse fausse.
- L'**Historique** conserve les parties passées et le taux de réussite cumulé par table.
## Lancer l'application
### Android
```bash
./gradlew :androidApp:installDebug # appareil/émulateur connecté
# ou générer l'APK :
./gradlew :androidApp:assembleDebug # androidApp/build/outputs/apk/debug/
```
### iOS
Ouvrir `iosApp/iosApp.xcodeproj` dans Xcode et lancer le scheme `iosApp` sur un simulateur.
### macOS desktop
Lancer l'application en fenêtre (480×800) depuis le terminal :
```bash
./gradlew :desktopApp:run
```
Les données sont stockées dans `~/.livrets/`.
## Play Jeux Services (Android)
Connexion silencieuse au lancement, envoi automatique du score en fin de partie et
bouton « Classement » sur l'accueil (UI native Play Jeux). Hors connexion ou sans
configuration console, tout échoue silencieusement : le jeu reste pleinement jouable.
Score soumis : `round((somme des produits réussis) × 30 ÷ secondes par question)`.
Prérequis manuels dans [Google Play Console](https://play.google.com/console) :
1. Créer l'app (package `com.livrets.androidApp`).
2. Jouer → Play Jeux Services : créer le jeu, lier l'app Android, ajouter les
empreintes SHA-1 debug et release.
3. Créer les 10 leaderboards avec les IDs `questions_5` … `questions_50`
(« 5 questions » … « 50 questions »).
4. Ajouter des testeurs Play Jeux Services pour valider la connexion en dev.
## Publication Android (Play Store)
Générer l'App Bundle signé :
```bash
./gradlew :androidApp:bundleRelease # androidApp/build/outputs/bundle/release/androidApp-release.aab
```
La signature release lit `androidApp/keystore.properties` (gitigné) avec les clés
`storeFile`, `storePassword`, `keyAlias`, `keyPassword`. Sans ce fichier, le build
release échoue (volontairement) et seuls les builds debug restent possibles.
La keystore `androidApp/livrets-release.keystore` sert de clé d'upload Play :
**la sauvegarder** (avec `keystore.properties`), sinon plus de mises à jour possibles.
À chaque release : incrémenter `versionCode` dans `androidApp/build.gradle.kts`.
## Tests
```bash
./gradlew :sharedUI:jvmTest # logique de jeu, générateur, persistance
```
## Structure
- `sharedUI/` : logique de jeu (`game/`), persistance (`data/`), UI Compose (`ui/`), thème (`theme/`)
- `androidApp/` : hôte Android
- `iosApp/` : hôte iOS (Xcode)