# ReBreak Magic — Unified Desktop App (Nuxt + Tauri) ## Ziel Eine einheitliche Cross-Platform-Desktop-App für Mac und Windows, die: - Mac + iPhone in den ReBreak-Schutz einbindet - Windows-PC in den ReBreak-Schutz einbindet - iOS-Supervision ohne Erase über `supervise-magic` durchführt - Sideload-Protect-Profil über lokalen HTTP-Server + QR-Code installiert - Später ABM/ADE-Silent-Enrollment vorbereitet ## Tech-Stack - **Frontend:** Nuxt 4.1.3 + @nuxt/ui 4.5.1 + Tailwind CSS 4 + Vue 3 - **Desktop-Runtime:** Tauri 2.x (Rust Core + WebView) - **System-Zugriff:** Rust-Tauri-Commands + Sidecars - **iOS-Supervision:** `supervise-magic` Go-Binary als Sidecar - **Profile-Transfer:** Lokaler Rust-HTTP-Server + QR-Code ## Vergleich: Aktuelle Mac vs. Windows | Bereich | Mac (SwiftUI) | Windows (Tauri/React) | Unified (Nuxt+Tauri) | |---|---|---|---| | **UI-Framework** | SwiftUI | React + Vite | **Nuxt + NuxtUI** | | **Desktop-Runtime** | Native App | Tauri 2 | **Tauri 2** | | **System-Core** | Swift Services | Rust | **Rust** | | **Login** | Supabase JWT | 6-stelliger Pairing-Code | **Nur Pairing-Code** | | **iPhone Detection** | `libimobiledevice` via Shell | — | **`libimobiledevice` Sidecar** | | **iOS Supervision** | `supervise-magic` Go-Binary | — | **`supervise-magic` Sidecar** | | **Sideload-Profil** | AirDrop | — | **Lokaler HTTP-Server + QR-Code** | | **MDM-Enrollment** | NanoMDM HTTP-API | — | **NanoMDM HTTP-API** | | **Mac-PC-Schutz** | `.mobileconfig` DNS-Profil | — | **`.mobileconfig` + `profiles` command** | | **Windows-PC-Schutz** | — | DoH via PowerShell | **DoH + Tamper-Service** | | **Tamper-Protection** | MDM/NanoMDM | SYSTEM-Service | **Plattformabhängig** | | **Token-Speicher** | macOS Keychain | Windows Credential Manager | **Rust `keyring` crate** | | **Installer** | DMG + Notarization | NSIS | **DMG (Mac) + NSIS/MSI (Win)** | ## Gemeinsamer Wizard-Flow 1. **Welcome** — Plattform erkennen, Willkommen 2. **Pairing** — 6-stelliger Pairing-Code aus der ReBreak-App 3. **Device Detection** — iPhone per USB erkennen (Mac) / PC-Info sammeln (Win) 4. **Pre-Flight** — Find-My-iPhone prüfen, Voraussetzungen checken 5. **Supervise** — `supervise-magic` ausführen, iPhone rebootet 6. **Sideload Profile** — Lokaler Server starten, QR-Code anzeigen, User installiert Profil 7. **MDM Enrollment** — QR-Code/Download für NanoMDM-Enrollment-Profil 8. **Configure** — NanoMDM Commands pushen (Take-Management + mdmSupervised=true) 9. **Protection Active** — Schutzstatus anzeigen, Release-Cooldown verwalten ## Plattformspezifische Rust-Module ``` src-tauri/src/ ├── main.rs # Entry + Tauri-Setup ├── lib.rs # Öffentliche Commands ├── platform/ │ ├── mod.rs # Trait + Dispatcher │ ├── macos.rs # Mac-spezifisch (DNS-Profil, Keychain, USB) │ └── windows.rs # Windows-spezifisch (DoH, Service, Credential Manager) ├── sidecar/ │ └── supervise_magic.rs # Go-Binary Management ├── server/ │ └── local_http.rs # Lokaler HTTP-Server für Profile ├── config.rs # App-Konfiguration ├── backend/ │ └── api.rs # /api/magic/* Client └── error.rs # Gemeinsame Fehler-Typen ``` ## Frontend-Struktur (Nuxt) ``` app/ ├── app.vue # Tauri-Root + Layout ├── pages/ │ ├── index.vue # Welcome / Wizard-Start │ ├── pair.vue # Pairing-Code (UPinInput) │ ├── detect.vue # Geräte-Erkennung │ ├── supervise.vue # Supervision-Step │ ├── sideload.vue # Lokaler Server + QR-Code │ ├── enroll.vue # MDM-Enrollment │ ├── protect.vue # Schutz aktivieren │ └── status.vue # Status + Release ├── components/ │ ├── WizardStep.vue │ ├── QrDisplay.vue │ ├── DeviceCard.vue │ └── ProtectionStatus.vue ├── composables/ │ ├── useTauri.ts │ ├── useMagicApi.ts │ └── useLocalServer.ts └── assets/ └── css/main.css ``` ## Wichtige Entscheidungen 1. **Nuxt statt React:** Einheitlicher Stack mit Admin/Marketing, besseres Ökosystem-Sharing. 2. **Tauri statt Electron:** Kleinere Bundle-Größe, Rust-Performance, bessere System-Integration. 3. **Lokaler HTTP-Server statt AirDrop:** Plattformunabhängiger Profil-Transfer. 4. **Sidecar für Go-Binary:** `supervise-magic` muss nicht nach Rust portiert werden. 5. **ABM vorbereiten:** Architektur soll später Silent-Enrollment unterstützen, aber aktuell manuell. ## Risiken / Offene Punkte - `supervise-magic` Windows-Build noch nicht verifiziert - Verhalten von `PayloadRemovalDisallowed` bei Webserver-Download noch nicht getestet - ABM-Beantragung dauert Wochen - macOS Code-Signing + Notarization erforderlich für Production - Windows Code-Signing (EV empfohlen) für Production ## Aktueller Stand - ✅ Nuxt 4 + Tauri 2 Skelett unter `apps/rebreak-magic` - ✅ Wizard-Pages mit NuxtUI: Welcome, Pair, Detect, Supervise, Sideload, Enroll, Status - ✅ Rust-Module: Config, Backend-API, Platform-Abstraction, lokaler HTTP-Server, Sidecar-Integration - ✅ `supervise-magic` Go-Binary als Tauri-Sidecar eingebunden - ✅ Lokaler HTTP-Server für Sideload-Profil + QR-Code-Generierung - ✅ `cargo check` erfolgreich - ✅ `pnpm build` erfolgreich (Nuxt mit `nitro.preset: "static"` erzeugt `index.html`) - ✅ `.app` Bundle mit `rebreak-magic` + `supervise-magic` Sidecar wird erzeugt - ✅ Komplette Backend-Logik: Pairing-Code einlösen, Gerät registrieren, Status/Device-Liste abrufen, Release anfragen/abbrechen - ✅ Token sicher im System-Keyring gespeichert - ✅ Profil-Download vom Backend + lokaler QR-Code-Server für Sideload - ✅ Release-Cooldown in Status-Seite angezeigt - ⚠️ `.app` Bundle nur (kein DMG, um Bundling-Probleme zu vermeiden) ## Nächste Schritte 1. Plattformspezifische Schutzmechanismen implementieren (Mac DNS-Profil, Windows DoH + Service) 2. Echte Backend-API-Calls für Pairing / Status implementieren 3. Profil-Generierung in Rust ergänzen (statt hartcodiertem `/tmp/...` Pfad) 4. Windows-Build der `supervise-magic` Sidecar verifizieren 5. Code-Signing + Notarization für Production vorbereiten 6. CI-Pipeline für Mac + Windows Builds