docs: spec cible desktop macOS

This commit is contained in:
herel committed 2026-08-28 15:53:39 +02:00
1 parent 1eb840d519
commit 4608848794
1 file changed
+43
@@ -0,0 +1,43 @@
# Design : cible desktop macOS — Livrets
Date : 2026-08-28
Statut : Validé par le produit
## 1. Objectif
Ajouter une cible desktop macOS (Compose Multiplatform desktop) à l'app Livrets existante (Android + iOS), lançable via `./gradlew :desktopApp:run`. Zéro modification du code métier/UI existant.
## 2. Décisions clés
| Décision | Choix |
|---|---|
| Usage | Run Gradle uniquement (pas de packaging .app/.dmg en v1) |
| Structure | Nouveau module hôte `desktopApp/` (miroir d'`androidApp`), dépend de `:sharedUI` |
| Fenêtre | "Livrets", 480×800 dp, fermeture = exit |
| Stockage | `~/.livrets/history.json` (créé à la première sauvegarde par HistoryRepository) |
| JVM | compat source/target Java 17 + jvmTarget Kotlin 17 (alignement des deux tâches) |
Rejeté : cible desktop dans `sharedUI` (mélange bibliothèque/hôte) ; UI desktop native (UI Compose déjà partagée).
## 3. Architecture
- `settings.gradle.kts` : + `include(":desktopApp")`
- `desktopApp/build.gradle.kts` : plugins kotlin-jvm + compose-compiler + compose-multiplatform (aliases existants) ; `java { source/targetCompatibility 17 }` + `kotlin { jvmTarget 17 }` (sinon conflit compileJava 18 vs compileKotlin 17) ; dépendances `implementation(project(":sharedUI"))` + `implementation(compose.desktop.currentOs)` ; bloc `compose.desktop { application { mainClass = "com.livrets.desktop.MainKt" } }`
- `desktopApp/src/main/kotlin/com/livrets/desktop/Main.kt` : `fun main() = application { Window(onCloseRequest = ::exitApplication, title = "Livrets", state = rememberWindowState(480.dp, 800.dp)) { App(filesDirPath = storageDir()) } }` ; `storageDir() = System.getProperty("user.home") + "/.livrets"`
- `README.MD` : section "macOS desktop" (lancement)
## 4. Faisabilité (validée en sandbox)
`:desktopApp:jar` compile ; `:desktopApp:run` ouvre la fenêtre et le processus JVM reste vivant (testé sur cette machine, JDK 18, JVM x86_64 sous Rosetta — sans conséquence pour desktop).
## 5. Tests & vérifications
- `:desktopApp:jar` → compile
- `:desktopApp:run` → fenêtre visible (vérification manuelle de l'utilisateur)
- Régression : `:sharedUI:jvmTest` (20/20) + `:androidApp:assembleDebug` inchangés
## 6. Hors périmètre
- Packaging .app/.dmg, signature/notarisation
- Redimensionnement adaptatif de l'UI desktop, raccourcis clavier
- Distribution (DMG, Homebrew)