# 📦 Guide: Desktop App Packaging (Conveyor & Gradle) Dieses Dokument beschreibt den professionellen Packaging-Prozess für die Meldestelle Desktop App. Wir nutzen **Conveyor** als primäres Werkzeug für das Cross-Platform Packaging (Windows, Linux, macOS), da es stabile Installer inklusive signierter Updates und gebündelter JREs erzeugt. --- ## 1. Strategie: Conveyor vs. Gradle | Feature | Conveyor (Empfohlen) | Gradle (Compose Plugin) | | :--- | :--- | :--- | | **Zielgruppe** | Endanwender (Produktion) | Entwickler (Lokaler Test) | | **Plattformen** | Windows (.msix), Linux (.deb), macOS | Nur Host-OS (Linux auf Linux) | | **Updates** | Automatisch integriert | Manuell | | **JRE** | Amazon Corretto (isoliert) | System JRE oder Toolchain | --- ## 2. Cross-Packaging mit Conveyor Conveyor ist so konfiguriert, dass es von Linux aus Pakete für alle Zielsysteme schnüren kann. ### Voraussetzungen 1. **JAR-Dateien:** Die App muss kompiliert sein: ```bash ./gradlew :frontend:shells:meldestelle-desktop:jvmJar ``` 2. **Icons:** Das System sucht nach `icon.png` in `frontend/shells/meldestelle-desktop/src/jvmMain/resources/`. ### Pakete bauen Führen Sie Conveyor im Projekt-Root aus: ```bash # Komplette Release-Site (Windows & Linux) conveyor make site # Nur ein spezifisches Paket (schneller für Tests) conveyor make debian-package # Linux .deb conveyor make windows-msix # Windows .msix ``` Die Ergebnisse liegen im Ordner `output/`. --- ## 3. Konfiguration (`conveyor.conf`) Wichtige Parameter der aktuellen Konfiguration (v1.0.1): * **JDK:** Nutzt `Amazon Corretto 21` für maximale Cross-Platform Stabilität. * **Heap-Size:** Erhöht auf `-Xmx1024m`, um auch große Stammdaten-Importe zu bewältigen. * **Linux-Deps:** Automatische Installation von `libasound2`, `libgl1-mesa-glx` und `libx11-6`. * **Native Access:** `--enable-native-access=ALL-UNNAMED` ist für Netty/SQLite aktiviert. --- ## 4. Netzwerk & Sicherheit (WICHTIG) Damit die P2P-Funktionen (Chat, Discovery, Sync) nach der Installation funktionieren, müssen folgende Ports auf dem Host-System offen sein: | Port | Protokoll | Funktion | | :--- | :--- | :--- | | **8080** | TCP | P2P Sync & Datenabgleich | | **8090** | TCP | Veranstaltungs-Chat (WebSocket) | | **5353** | UDP | mDNS Discovery (Geräte finden) | ### Firewall-Einrichtung (Linux) Nutzen Sie das optimierte Setup-Script: ```bash sudo ./setup-firewall-linux.sh ``` ### Windows-Besonderheit Beim ersten Start der `.msix` App wird Windows fragen, ob der Netzwerkzugriff erlaubt werden soll. **Wichtig:** Sowohl "Private" als auch "Öffentliche" Netzwerke anhaken, falls auf Turnieren oft Gast-WLANs oder Hotspots genutzt werden. --- ## 5. Troubleshooting ### Problem: "No main class specified" **Lösung:** Stellen Sie sicher, dass in der `Main.kt` eine saubere Top-Level `fun main()` existiert und in der `conveyor.conf` auf `at.mocode.frontend.shell.desktop.MainKt` verwiesen wird. ### Problem: SQLite / Native Libs laden nicht **Lösung:** Prüfen Sie, ob `extract-native-libraries.conf` in der `conveyor.conf` inkludiert ist. ### Problem: JmDNS findet keine Teilnehmer **Lösung:** Prüfen Sie die Ports via `ss -tulpn`. Auf Linux blockieren oft Docker-Interfaces (`br-*`) den Broadcast. Die App filtert diese nun automatisch, aber ein aktives `setup-firewall-linux.sh` ist zwingend erforderlich.