108 lines
5.2 KiB
Markdown
108 lines
5.2 KiB
Markdown
# 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 | WebView rendert, UL-Routing testbar, Web-Header ausgeblendet | ✅ |
|
|
| ζ-2 | Snapshot-Sync + DailyQuoteWidget | Code + Tests grün, Endpoint im Web-Repo + Apple-Dev-Portal-App-Group fehlen für E2E | 🚧 (Code-Done) |
|
|
| ζ-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 | ⏳ |
|
|
|
|
## Externe Blocker (nicht von Native-Code lösbar)
|
|
|
|
- [ ] **Apple-Dev-Portal: App-Group `group.ev.mana.zitare`** registrieren
|
|
— sonst kein macOS-Build und kein Widget auf realem Gerät. Selbe
|
|
Aktion wie für cards-/memoro-native nötig.
|
|
- [ ] **Cloudflare:** DNS-CNAME für `zitare.com` (Apex) auf
|
|
`1435166a-0e3f-4222-8de6-744f32cea5c9.cfargotunnel.com`
|
|
proxied. Plus Cleanup des versehentlichen
|
|
`zitare.com.mana.how`-CNAME. Vollständige Anleitung in
|
|
[`docs/CLOUDFLARE_TODO.md`](docs/CLOUDFLARE_TODO.md).
|
|
- [ ] **Forgejo-Repo `git.mana.how/till/zitare-native`** anlegen +
|
|
Push — ✅ erledigt 2026-05-14, 5 Commits live.
|
|
|
|
## 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".
|