# Mawari **Wer war wann dran? Auf einen Blick.** Mawari (回り, japanisch: „reihum, die Runde“) ist eine macOS-App von Zielke Studio für die Planung der Leben-und-Dienst-Zusammenkunft. Die offizielle Einteilung läuft weiter über die bestehende App (NW Scheduler). Mawari ergänzt sie um die eine Frage, die dort untergeht: **Wann hatte wer zuletzt welche Aufgabe?** - Übersicht in zwei Bereichen: Aufgaben für Diener (Ernannte) und Schulungsaufgaben - je Person und Aufgabe das letzte Datum, „nie“ oder „–“ (nicht freigegeben) - Spaltenkopf klicken = sortieren (wer am längsten nicht dran war, steht oben) - Zelle klicken = Eintrag mit Person und Aufgabe vorbelegt - Export für Numbers (.xlsx, öffnet sich direkt in Numbers) - bewusst **keine** Vorschläge, keine Abwesenheiten, keine Verknüpfung mit der App ## Dokumente | Datei | Inhalt | |---|---| | [CLAUDE.md](CLAUDE.md) | Arbeitsanweisungen für Claude Code | | [CHANGELOG.md](CHANGELOG.md) | Versionen | | [docs/datenformat.md](docs/datenformat.md) | Aufbau von `daten.json`, Sicherungen, Kompatibilität zum HTML-Tool | | [design/README.md](design/README.md) | Farben, Symbol, Texte | ## Daten `~/Library/Application Support/Mawari/daten.json`, jede Änderung wird sofort gespeichert. Einmal täglich landet eine Kopie in `Sicherungen/` (die letzten 60 bleiben). Das Format ist identisch mit dem früheren HTML-Tool (`leben-und-dienst.json`), dessen Dateien lassen sich über *Ablage › Sicherung / HTML-Daten laden …* übernehmen. Zum Testen ohne echte Daten: `MAWARI_DATA_DIR=/irgendein/ordner …/Mawari.app/Contents/MacOS/Mawari`. ## Bauen ```bash brew install xcodegen # einmalig xcodegen # erzeugt Mawari.xcodeproj aus project.yml open Mawari.xcodeproj ``` macOS 14+, Universal (arm64 + x86_64), Swift 6, SwiftUI. Einzige Abhängigkeit: Sparkle 2.10.0. Symbol neu zeichnen: `swift Tools/make-icon.swift`. Das `.xcodeproj` und `App/Info.plist` sind generiert und nicht im Repo. Nach Änderungen an `project.yml` erneut `xcodegen` ausführen. Signiert wird mit **Developer ID Application** (Team `XY4C2RG3L5`), Hardened Runtime an. Ohne dieses Zertifikat `CODE_SIGN_IDENTITY`/`DEVELOPMENT_TEAM` in `project.yml` anpassen. ## Struktur | Pfad | Inhalt | |---|---| | `App/Sources/MawariApp.swift` | Einstieg, Fenster, Menüs, Oberflächenzustand | | `App/Sources/Model.swift` | Datenmodell (Aufgaben, Personen, Einträge), Datumshilfen | | `App/Sources/Store.swift` | Laden, Speichern, tägliche Sicherung, Abfragen | | `App/Sources/OverviewView.swift` | Übersicht „wer war wann dran“ mit Sortierung | | `App/Sources/HistoryView.swift`, `EntrySheet.swift` | Verlauf und Eintrag bearbeiten | | `App/Sources/PersonsView.swift`, `TasksView.swift` | Personen (mit Freigaben) und Aufgaben pflegen | | `App/Sources/Exporter.swift` | .xlsx-Export (eigener Writer, ohne Abhängigkeit), Sicherung speichern/laden | | `App/Sources/Theme.swift` | Farben | | `App/Sources/UpdateController.swift` | Sparkle | | `Tools/` | Symbol erzeugen, DMG bauen, Appcast, Veröffentlichen | | `design/` | Symbolvorlage und Designnotizen | | `project.yml` | XcodeGen-Projektdefinition | ## Neue Version veröffentlichen 1. In `project.yml` `MARKETING_VERSION` erhöhen und `CURRENT_PROJECT_VERSION` um 1 hochzählen. 2. `bash Tools/build-dmg.sh` – Release-Build, Signatur (Developer ID), Notarisierung von App und DMG. 3. `bash Tools/make-appcast.sh "Was ist neu – ein Satz"` – signiert das DMG mit dem Sparkle-Schlüssel, schreibt `build/appcast.xml`. 4. `bash Tools/publish.sh` – lädt DMG und Appcast nach `update.zielke.studio/mawari/`. Installierte Kopien suchen einmal am Tag nach Updates und bieten sie an. Von Hand: *Mawari › Nach Updates suchen …* **Einmalig vor dem ersten Veröffentlichen:** Ordner auf dem Server anlegen (siehe `zielke-apps/README.md`): ```bash ssh -t samuelzielke@10.0.5.223 'sudo install -d -o samuelzielke -g www-data -m 2775 /var/www/updates/mawari' ``` **Schlüssel sichern:** Der private Sparkle-Schlüssel liegt im Schlüsselbund dieses Macs (Dienst `https://sparkle-project.org`, Konto `mawari`). Geht er verloren, kann keine installierte Kopie mehr aktualisiert werden. Export: `generate_keys --account mawari -x mawari-sparkle.key` (liegt nach dem ersten Build unter `build/dd/SourcePackages/artifacts/sparkle/Sparkle/bin/`), Datei in die Passwörter-App, dann löschen. Notarisierung nutzt das Profil `patchcord-notary` (gleiches Team). Anderes Profil: `NOTARY_PROFILE=… bash Tools/build-dmg.sh`. ## Ausblick: Anbindung an NW Scheduler Geprüft, noch nicht umgesetzt. Eine Live-Schnittstelle (API) bietet NW Scheduler nicht. Möglich ist ein **Import aus Dateien**: - NW Scheduler kann die Einteilungen der Leben-und-Dienst-Zusammenkunft als CSV ausgeben (Spalten `Date, Person, PartType, Assignment, School`, PartType z. B. `Chairman`, `OpeningPrayer`, `TreasuresTalk`, `Gems`, `BibleReading`, `Apply1–4`, `Living1–3`, `CBS`, `CBSReader`). Andere Tools lesen genau dieses Format ein. - Außerdem gibt es Sicherungspakete, die z. B. CongPlan inklusive Zuteilungsverlauf übernimmt. Ein Upgrade wäre also: *Ablage › Aus NW Scheduler importieren …* liest die CSV, ordnet `PartType` den Mawari-Aufgaben zu, gleicht Namen mit den Personen ab und ergänzt nur neue Einträge. Vorher an einer echten Exportdatei prüfen, wie Namen und Partner darin stehen. © Zielke Studio