2.3 KiB
2.3 KiB
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épendancesimplementation(project(":sharedUI"))+implementation(compose.desktop.currentOs); bloccompose.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:assembleDebuginchangés
6. Hors périmètre
- Packaging .app/.dmg, signature/notarisation
- Redimensionnement adaptatif de l'UI desktop, raccourcis clavier
- Distribution (DMG, Homebrew)