# Plan — zitare-native (SwiftUI Hybrid) **Stand: 2026-05-14 — Phase ζ-0 Setup.** Repo-Skelett, `project.yml`, `CLAUDE.md`, leerer Build steht aus. Vollständige Phasen-Begründung in [`../mana/docs/playbooks/ZITARE_NATIVE_GREENFIELD.md`](../mana/docs/playbooks/ZITARE_NATIVE_GREENFIELD.md). > **SOT:** das Greenfield-Playbook. Dieses File ist nur die App-lokale > Status-Spur. ## Aktueller Stand 🚧 **ζ-0 — Setup (2026-05-14, in Arbeit)** - [x] Repo-Skelett unter `~/Documents/Code/zitare-native/` - [x] `project.yml` mit Bundle `ev.mana.zitare`, drei Targets (App + Widget + ShareExt), ManaSwiftCore + ManaSwiftUI via `path: ../mana-swift-core` / `path: ../mana-swift-ui` - [x] `.swiftformat`, `.swiftlint.yml`, `.gitignore` - [x] `CLAUDE.md`, `README.md`, `PLAN.md` - [x] Source-Stubs (App, RootView, AppConfig, ZitareAPI, Log, ZitareTheme, Resources) - [x] `xcodegen generate` lokal grün (2026-05-14) - [x] `swiftlint --strict` 0 violations in 14 files - [x] Leerer Build im iOS-Simulator (iPhone 16e, Xcode 26.2 SDK, `xcodebuild ... -destination 'platform=iOS Simulator,name=iPhone 16e'`) - [x] Unit-Tests grün (6/6 AppConfigTests) + UI-Smoke grün - [ ] Leerer Build auf macOS — **blockiert auf Apple-Developer-Portal- Setup.** App-Group `group.ev.mana.zitare` muss im Portal registriert werden, sonst Provisioning-Profile-Fehler. Same Blocker wie cards-native ζ-7 / memoro-native (siehe Memory `project_memoro_native.md` „Apple-Dev-Portal App-Group- Aktivierung nötig vor Test"). - [ ] ManaCore-Login mit Founder-Account, JWT im Keychain (manueller Test im Simulator, nicht im CI) - [x] `/healthz`-Probe gegen `zitare-api.mana.how` loggt 200 (live gegen Mac-Mini-API verifiziert 2026-05-14 12:14, HTTP/2 200, OSLog „Healthz: OK") - [ ] AASA auf `https://zitare.com/.well-known/apple-app-site-association` (Aufgabe ans Zitare-Web-Repo, blockiert ζ-1 nicht ζ-0) - [ ] Git-Repo `git.mana.how/till/zitare-native` (push) ### ζ-0 Verifikations-Log ``` 2026-05-14 12:08 xcodebuild iOS Simulator iPhone 16e — BUILD SUCCEEDED (nach Fix: .iso8601withFractional war cards-native- local; in zitare-native auskommentiert, ζ-3 Port-TODO) 2026-05-14 12:10 Unit-Tests: 6/6 AppConfigTests passed in 0.03s 2026-05-14 12:11 UI-Smoke: test_appLaunches passed in 5.79s (nach Fix: Test suchte "Zitare" das nur im Account- Tab ist, jetzt auf Default-Tab "Lesen" geändert) 2026-05-14 12:09 xcodebuild macOS — BUILD FAILED, blockiert auf Apple-Dev-Portal App-Group-Registrierung 2026-05-14 12:14 iPhone 16e Simulator: App-Launch + Live-Healthz gegen zitare-api.mana.how → HTTP/2 200, OSLog "[ev.mana.zitare:app] Zitare starting — auth status: signedOut" und "[ev.mana.zitare:api] Healthz: OK" (Fix: AuthenticatedTransport rejecte notSignedIn auf public Endpoint, jetzt direkter URLSession-Call für /healthz) ``` ## Phasen-Übersicht | Phase | Ziel | Erfolg | Status | |---|---|---|---| | ζ-0 | Setup, leerer Build, Login | iOS-Build ✅, Tests ✅, Healthz Live ✅ | ✅ (Mac + Git-Push offen) | | ζ-1 | WebShellView + Universal-Links | zitare.mana.how rendert im WebView, UL-Routing implementiert | 🚧 (90%) | | ζ-2 | Snapshot-Sync + DailyQuoteWidget | Widget auf realem Gerät zeigt Zitat | ⏳ | | ζ-3 | Submit-View nativ | Founder submittet Quote, Draft in /admin/queue | ⏳ | | ζ-4 | Spotlight + ShareExt + App Intents | Spotlight findet, ShareExt POSTet | ⏳ | | ζ-5 | Polish (Theme-Sync, iPad, A11y) | Eine Woche ohne Safari-Tab nutzbar | ⏳ | | ζ-6 | App-Store-Submission | Approved | ⏳ | ## Web-Vorbedingungen (Aufgabe an `../zitare/`) - [ ] AASA-Eintrag auf `https://zitare.com/.well-known/apple-app-site-association` mit `appID: QP3GLU8PH3.ev.mana.zitare` - [ ] `index-min.json` als versionierter, ETag-versehener Endpoint (oder einigen, dass die Build-Output-Datei stabil bleibt) - [ ] `POST /api/v1/share/receive` mit `mana/text`-Envelope-Handler (Manifest registriert, Code TBD) - [ ] `zitare.com` Cloudflare-Zone-Onboarding (steht im `zitare/STATUS.md` als offen) - [ ] Cookie-SSO-Compat auf `zitare.mana.how` end-to-end testen (Phase 2.G im Web-Repo code-fertig, Live-Test offen) ## Verifikations-Lücken Wird nach jedem ζ-Schritt befüllt. ## Quirks Wird im Verlauf befüllt. Format-Vorbild: `../zitare/STATUS.md` Sektion „Quirks".