zitare-native/Sources/Core/Auth/AppConfig.swift
Till JS 1d770123f5 η-0: De-Hybrid — WKWebView raus, native Tabs mit Platzhaltern
Lift von Hybrid (WKWebView für Lesen/Erkunden) auf fully-native ist
beschlossen. Diese Phase entfernt die WebShell-Infrastruktur; das volle
native Read-Surface folgt in η-2..η-5 nach docs/NATIVE_LIFT_PLAN.md.

- ManaWebShell-Dep raus aus project.yml
- Sources/Core/WebShell/CookieBridge.swift gelöscht
- RootView auf vier native Tabs (Lesen + Erkunden = Platzhalter,
  Submit + Konto unverändert nativ)
- DocComments in DeepLinkRouter / AppConfig / Account / Settings von
  WebView-Verweisen befreit
- CLAUDE.md Invarianten von Hybrid auf η umgestellt (13 Invarianten,
  pure SwiftUI + Offline-first + SafariView-Ausnahme für Legal)
- PLAN.md auf η-0 + Phasenübersicht η-0..η-10
- AppConfigTests.test_keychainService_matchesSharedGroup auf
  ManaSharedKeychainGroup aktualisiert (war drift seit Cross-App-SSO)

Verifikation:
- xcodebuild iOS-Simulator iPhone 16e: BUILD SUCCEEDED
- nm ZitareNative | grep WKWebView: 0 Referenzen
- otool -L: kein WebKit-Framework-Link
- 20/20 Tests grün

Cross-Repo-Follow-up (η-1 Blocker):
- zitare/apps/zitare/ muss index-full.json + 7 Stammdaten-JSONs liefern
- zitare/apps/api/ Volltext-Search-Endpoint bestätigen/ergänzen

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 12:32:05 +02:00

58 lines
2.6 KiB
Swift

import Foundation
import ManaCore
/// App-spezifische Konfiguration für Zitare. Implementiert
/// `ManaAppConfig` aus ManaCore und ergänzt die Zitare-eigene
/// `apiBaseURL` (api.zitare.com, getrennt von mana-auth) sowie
/// `webBaseURL` (zitare.com, für Universal-Links + Snapshot-Pull +
/// SafariView auf Legal-Seiten) und `appBaseURL` (app.zitare.com,
/// historisch SPA-Surface η-0+ nicht mehr vom Native-Client geladen).
///
/// Cutover zu .zitare.com-Subdomains am 2026-05-20. zitare.mana.how
/// ist abgeschaltet; zitare-api.mana.how bleibt als Back-Compat-
/// Surface erreichbar, der native Client nutzt sie aber nicht mehr.
enum AppConfig {
/// App-Group für Daten-Sharing zwischen App Widget ShareExt.
/// Single-Source: wird in ``manaAppConfig`` und in
/// `SnapshotModels.appGroup` (Widget-shared) gespiegelt.
static let appGroup = "group.ev.mana.zitare"
static let manaAppConfig: ManaAppConfig = DefaultManaAppConfig(
authBaseURL: URL(string: "https://auth.mana.how")!,
keychainService: ManaSharedKeychainGroup,
// Explizit auf TeamID.BundleID, statt nil. Vermeidet Logout
// bei TestFlight-Cert-Drift (siehe mana-swift-core v1.5.1).
keychainAccessGroup: ManaSharedKeychainGroup,
appGroup: appGroup
)
/// `api.zitare.com` API-Backend (Hono+Bun).
static let apiBaseURL = URL(string: "https://api.zitare.com")!
/// `zitare.com` öffentliche statische Korpus-Domain (CC-BY-SA).
/// Universal-Link-Domain für AASA.
static let publicWebURL = URL(string: "https://zitare.com")!
/// `app.zitare.com` SPA-Surface, eingeloggte Pfade (Submit,
/// Edit, Admin, Me).
static let appBaseURL = URL(string: "https://app.zitare.com")!
/// Default-Web-URL (öffentliches Lese-Surface, Snapshot, AASA).
/// η-0+: kein WebView mehr, aber bleibt Universal-Link-Domain und
/// SafariView-Ziel für Legal-Seiten.
static let webBaseURL = publicWebURL
/// Endpoint für den Korpus-Snapshot (heute Phase ζ-2: `index-min.json`,
/// in η-1 ersetzt durch `index-full.json` + Stammdaten-Collections,
/// siehe `docs/NATIVE_LIFT_PLAN.md`). Bis das im Web-Repo gebaut ist,
/// schlägt der Pull mit 404 fehl und `SnapshotSync.tryRefresh()` macht
/// fail-soft no-op.
static let snapshotURL = webBaseURL.appendingPathComponent("index-min.json")
// User-Agent-Suffix für URLSession-API-Calls.
#if os(macOS)
static let userAgent = "ZitareNative/0.1 (macOS)"
#else
static let userAgent = "ZitareNative/0.1 (iOS)"
#endif
}