zitare-native/PLAN.md
Till 03e2f041e5 ζ-1 Polish: robuster Header-Selektor + zitare.mana.how als 2. UL-Domain
- WebShellScripts.hideWebHeader: drei Selektor-Strategien gestapelt
  (data-app-nav-Marker / strukturell via :has(a.brand) / positionell
  via :first-of-type), damit Klassen-Renames in zitare-web das Hide
  nicht still brechen
- project.yml entitlements: applinks:zitare.mana.how als zweite
  Universal-Link-Domain, solange zitare.com-DNS-Zone fehlt. Beide
  Hosts liefern dasselbe AASA-File. Nach Cloudflare-Cut kann der
  Eintrag bleiben — schadet nicht
- Live-E2E verifiziert: simctl openurl https://zitare.mana.how/q/...
  → App empfängt Deep-Link, WebShell lädt die Quote-Page, native
  TabBar bleibt, Web-Header bleibt versteckt

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 20:51:03 +02:00

4.6 KiB

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.

SOT: das Greenfield-Playbook. Dieses File ist nur die App-lokale Status-Spur.

Aktueller Stand

🚧 ζ-0 — Setup (2026-05-14, in Arbeit)

  • Repo-Skelett unter ~/Documents/Code/zitare-native/
  • project.yml mit Bundle ev.mana.zitare, drei Targets (App + Widget + ShareExt), ManaSwiftCore + ManaSwiftUI via path: ../mana-swift-core / path: ../mana-swift-ui
  • .swiftformat, .swiftlint.yml, .gitignore
  • CLAUDE.md, README.md, PLAN.md
  • Source-Stubs (App, RootView, AppConfig, ZitareAPI, Log, ZitareTheme, Resources)
  • xcodegen generate lokal grün (2026-05-14)
  • swiftlint --strict 0 violations in 14 files
  • Leerer Build im iOS-Simulator (iPhone 16e, Xcode 26.2 SDK, xcodebuild ... -destination 'platform=iOS Simulator,name=iPhone 16e')
  • 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)
  • /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

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".