|
|
# 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
|