docs: spec génération des icônes launcher depuis le logo
This commit is contained in:
1 file changed
+65
@@ -0,0 +1,65 @@
|
|||||||
|
# Design : icônes launcher depuis le logo — Livrets
|
||||||
|
|
||||||
|
Date : 2026-08-31
|
||||||
|
Statut : Validé par le produit
|
||||||
|
|
||||||
|
## 1. Objectif
|
||||||
|
|
||||||
|
Décliner le logo maître (`docs/branding/logo.svg`, spec 2026-08-31-logo-design) en icônes launcher pour Android (adaptive + legacy), iOS (AppIcon.appiconset) et desktop (icône de fenêtre), via un script reproductible committé. Remplacer les icônes template KMP actuelles.
|
||||||
|
|
||||||
|
## 2. Décisions clés
|
||||||
|
|
||||||
|
| Décision | Choix |
|
||||||
|
|---|---|
|
||||||
|
| Pipeline | Script `docs/branding/generate-icons.sh` + `rsvg-convert` (déjà installé) ; `python3` pour lire `Contents.json` iOS |
|
||||||
|
| Rejetés | Tâche Gradle custom (lourde pour un usage occasionnel) ; PNGs sans script (non reproductible) |
|
||||||
|
| Variantes SVG | 4 fichiers dans `docs/branding/` : `logo.svg` (master), `icon-square.svg`, `icon-foreground.svg`, `icon-monochrome.svg` |
|
||||||
|
| Android adaptive | background = bleu nuit uni plein cadre ; foreground et monochrome réduits (~72 %) pour tenir dans la zone sûre 66/108 |
|
||||||
|
| Android legacy | Rendu du master (carte arrondie), 48→192 px |
|
||||||
|
| iOS | PNG remplacés in situ, tailles lues dans `Contents.json` existant (ce fichier n'est pas modifié) |
|
||||||
|
| Desktop | PNG 512 px dans les ressources + `icon = ...` dans `Main.kt` |
|
||||||
|
| Monochrome | Silhouette blanche des 4 tuiles **sans glyphes** (glyphes impossibles : blanc sur blanc ; tuiles seules = grille lisible en themed icon Android 13+) |
|
||||||
|
|
||||||
|
## 3. Spécification
|
||||||
|
|
||||||
|
### 3.1 Variantes SVG sources (`docs/branding/`)
|
||||||
|
|
||||||
|
- `icon-square.svg` : viewBox `0 0 128 128` ; rect plein `(0,0,128,128)` sans arrondi fill `#1D3557` ; tuiles et glyphes aux positions exactes du master → iOS (masque arrondi appliqué par l'OS) et background Android
|
||||||
|
- `icon-foreground.svg` : viewBox `0 0 108 108` ; groupe tuiles+glyphes du master, scale `66/92 ≈ 0.7174` centré, translaté au centre `(54,54)` → couche foreground
|
||||||
|
- `icon-monochrome.svg` : géométrie du foreground, seules les 4 tuiles en fill `#FFFFFF`, fond transparent → couche monochrome
|
||||||
|
|
||||||
|
### 3.2 Assets Android (remplacement in situ, mêmes chemins)
|
||||||
|
|
||||||
|
- Legacy `ic_launcher.png` (rendu `logo.svg`) : mdpi 48, hdpi 72, xhdpi 96, xxhdpi 144, xxxhdpi 192
|
||||||
|
- Couches adaptive (108 dp) : `ic_launcher_background.png` (navy uni), `ic_launcher_foreground.png`, `ic_launcher_monochrome.png` : mdpi 108, hdpi 162, xhdpi 216, xxhdpi 324, xxxhdpi 432
|
||||||
|
|
||||||
|
### 3.3 iOS
|
||||||
|
|
||||||
|
`generate-icons.sh` lance un script `python3` inline qui : parcourt chaque entrée `size`×`scale` de `Contents.json`, calcule la taille pixel, rastérise `icon-square.svg` et écrase le `filename` correspondant.
|
||||||
|
|
||||||
|
### 3.4 Desktop
|
||||||
|
|
||||||
|
`desktopApp/src/main/resources/icons/icon.png` (512×512, rendu `logo.svg`) ; `Main.kt` : `Window(icon = painterResource("icons/icon.png"), ...)`. API exacte (import `painterResource`) vérifiée à l'implémentation.
|
||||||
|
|
||||||
|
### 3.5 Script `docs/branding/generate-icons.sh`
|
||||||
|
|
||||||
|
- `set -euo pipefail`, racine repo détectée par rapport au script, `rsvg-convert` requis (erreur claire sinon)
|
||||||
|
- Étapes : variantes SVG (fichiers committés, pas générés) → Android legacy → Android adaptive → iOS (python3) → desktop
|
||||||
|
- Idempotent, sans interaction ; exécutable (`chmod +x`)
|
||||||
|
|
||||||
|
## 4. Faisabilité
|
||||||
|
|
||||||
|
`rsvg-convert` présent ; `python3` présent ; Compose Multiplatform expose `painterResource` côté desktop ; aucune nouvelle dépendance Gradle.
|
||||||
|
|
||||||
|
## 5. Vérifications
|
||||||
|
|
||||||
|
- `./gradlew :sharedUI:jvmTest :androidApp:assembleDebug :desktopApp:compileKotlin` OK
|
||||||
|
- Companion visuel : grille des icônes générées + simulation du masque rond Android (foreground dans zone sûre)
|
||||||
|
- iOS : chaque `filename` de `Contents.json` existe et est un PNG non vide (`file` + taille > 0)
|
||||||
|
- Test de non-régression : les PNG remplacés ont les dimensions exactes attendues (`sips -g pixelWidth`)
|
||||||
|
|
||||||
|
## 6. Hors périmètre
|
||||||
|
|
||||||
|
- Icône marketing Play Store 512 px (asset store)
|
||||||
|
- `.icns` bundle macOS, splash screens, favicons web
|
||||||
|
- Retouche du design du logo lui-même
|
||||||
Reference in new issue
Block a user