Tag 1: Hybrid SwiftUI + WKWebView, ζ-0 + ζ-1 + Teile ζ-2. Tag 2: dreilagiger weißer Flash beim App-Start gefixt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
| date | day | view | weekday | commits | review |
|---|---|---|---|---|---|
| 2026-05-14 | 1 | macher | Donnerstag | 11 | written |
Donnerstag, 2026-05-14 — Tag 1 (Macher-Sicht)
Sonderfall im Native-Stack: Hybrid SwiftUI + WKWebView. Zitare hat keinen Hardware-USP gegenüber dem Browser — Native bringt nur Widget, ShareExtension, Spotlight, Submit. Lesen bleibt im Web. Phasen ζ-0 + ζ-1 + Teile von ζ-2 in einer Schicht.
Stats
11 Commits, +3 130 / −226 LoC, 36 Files. 40× .swift, 7× .yml,
8× .md. Top-Dirs Sources/Features/WebShell (15 %),
Assets (9 %). Tags: icon, dark-mode. Session 10:15 → 21:45,
37 aktive Minuten in 3 Blöcken (Vormittag + Abend).
Phasen
- ζ-0 — Setup. Repo-Skelett,
project.yml(XcodeGen), ManaCore- ManaTokens als Package-Dependency, leerer Build im Simulator
grün,
/healthz-Probe gegenzitare-api.mana.how.
- ManaTokens als Package-Dependency, leerer Build im Simulator
grün,
- ζ-1 — WebShellView.
WKWebViewalsUIViewRepresentable/NSViewRepresentable-Bridge, Universal-Link-Routing, Cookie-SSO- Bridge (mana.accessauf.mana.how). - ζ-1 abgeschlossen —
DeepLinkRouter+ Web-Header-Hide via injizierter CSS. Header + Footer der Website werden in der App ausgeblendet, weil App-Chrome reicht. - ζ-2 native —
SwiftData-Snapshot-Cache +DailyQuoteWidgetvorbereitet. Snapshot kommt vonhttps://zitare.com/index-min.json, App-Groupgroup.ev.mana.zitarereicht es an Widget durch. - ζ-1 Polish — robuster Header-Selektor (DOM-Drift-Tolerant),
zitare.mana.howals zweite UL-Domain. - Cloudflare-TODO + PLAN.md externe Blocker.
zitare.mana.how-DNS-Record + CNAME-Cleanup nötig, sonst AASA-Validation flapsig. - TestFlight-Validation grün — Icon-Asset +
CFBundleIconNamekorrekt gesetzt. Erste Upload-Versuche scheiterten an iconAsset. - Icon-Platzhalter — vereinfachte Anführungszeichen-Glyphe, Pixel-Render. Echtes Icon kommt vor Submit.
- Mac-Window + Konto-Header nach erstem TestFlight-Build.
- CFBundleVersion 2 für nächsten Upload-Roundtrip.
- Dark-Mode-Fix — WebView folgt System-
prefers-color-schemestatt zitare.com-localStorage-Toggle. Vorher hat man im App-Modus unbeabsichtigt den Web-Schalter umgestellt.
Architektur-Entscheidungen
- Hybrid ausnahmsweise. Lese-Surfaces via
WKWebView, Native- Surfaces (Widget, ShareExt, Submit, Spotlight) pure SwiftUI. Trennung ist fest — keine schleichende Native-Re-Implementation von Read-Routes (CLAUDE.md Invariante 1, „Don't do"). - AASA-Domain
zitare.com, nichtzitare.mana.how. Public-URL trägt die App, mana.how ist API/Backstage. - Cookie-SSO-Bridge statt JWT-Header in WebView. Domain
.mana.howsetzt Cookie, WebView lädtzitare.mana.howmit Cookie automatisch. - Snapshot lokal für Widget + Spotlight, nicht für WebView. WebView lädt live, Widget/Spotlight können nicht live laden (Background-Refresh-Budget).
- Header-Hide via injizierter CSS, statt eigene App-Routes. Selektor robust gegen DOM-Drift; bricht im worst case lautlos, zeigt aber dann Header — kein Crash.
- Theme:
paper-Variant aus@mana/themes/paper, lokal inZitareTheme.swiftnachgebaut. Match zur Website.
Trade-offs
- WebView-Hybrid spart Native-Read-Surface-Aufwand komplett, aber: WebView-DOM ist nicht App-DOM. Selektor-Drift, Cookie- Sync-Edge-Cases, Performance-Regressions im JS sind Web-Sorgen, nicht App-Sorgen — und wir merken sie hier später.
zitare.comals AASA-Domain +zitare.mana.howals zweite: doppelte Universal-Link-Logik. Wenn Web-Routing sich ändert, muss App + AASA + Web nachziehen.- Snapshot-Pull bei Launch macht App schneller-startend gegen Widget-Daten, kostet aber bei jedem Cold-Start 11+ Quotes Bandbreite. Bei 50 k Quotes-Korpus später Schmerz; heute irrelevant.
- TestFlight-Roundtrip kostet Iterationen —
CFBundleIconNamefehlte,Icon-Asset hatte falsche Größe, dadurch zwei Failed- Validations. Standard für native App-Erstbuilds.
Offene Punkte
- DNS-CNAME für
zitare.mana.howin Cloudflare setzen, alter CNAME entfernen. - Echtes AppIcon statt vereinfachter Anführungszeichen-Glyphe.
- ζ-3 Submit-View in SwiftUI mit ManaAuthGate (Action-Level- Login-Eskalation). Pending.
- ζ-4 Spotlight + ShareExtension + App Intents. Pending.
- ζ-5 Polish — iPad-Split-Layout, Accessibility.
- ζ-6 App-Store-Submission — Bundle
ev.mana.zitare, Team registriert. - DailyQuoteWidget auf echtem Gerät testen — Simulator zeigt's, echtes iPhone-Widget-Behavior ist gelegentlich anders.