Native SwiftUI-Komponenten für alle nativen mana-e.V.-Apps. Heute ManaAuthUI — vollständige Auth-Reise.
Apps mit Guest-/Login-optional-Modus brauchen kein Full-Screen-
Login-Gate mehr. Aktionen, die einen Account brauchen, werden in
gate.require { ... } gewrappt — Login wird zur Inline-Eskalation,
nicht zum App-Block.
ManaAuthGate — @Observable-State-Maschine:
- require(reason:work:) sync und async Overloads
- Bei .signedIn: Aktion läuft sofort
- Bei .signedOut/.guest: Sign-In-Sheet öffnet, Aktion gemerkt;
nach erfolgreichem Sign-In läuft sie automatisch
- lastReason als optionaler Telemetrie-Hint
ManaAuthGateModifier / View.manaAuthGate(_:signIn:) — hängt das
Sign-In-Sheet an einen Root-View, beobachtet auth.status. Wechsel
auf .signedIn schließt das Sheet + resolved pending; manuelles
Dismiss verwirft.
Konvention für native Apps:
1. bootstrap() → bei .signedOut → enterGuestMode()
2. Root-View zeigt immer App-Inhalte, nie eine Vollbild-Login-Wall
3. Account-Aktionen via gate.require { ... }
Memoro hat das informell schon. Cards komplett umgestellt (siehe
cards-native commit). Manaspur folgt.
7 neue Tests: sofortiger Run bei .signedIn, Defer bei .signedOut/
.guest, resolvePending, cancelPending, lastReason-Tracking.
Setzt mana-swift-core ≥ 1.2.0 voraus.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| Sources/ManaAuthUI | ||
| Tests/ManaAuthUITests | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| Package.swift | ||
| README.md | ||
mana-swift-ui
Native SwiftUI-Komponenten für alle nativen Apps des Vereins mana e.V. Heute genau ein Library-Product:
- ManaAuthUI — vollständige Auth-Reise (Login, Sign-Up,
Email-Verifikation, Passwort-Reset, Account-Management) als
SwiftUI-Views. Konsumiert
ManaCorefür API-Calls undManaTokensfür Vereins-Designwerte.
Wird konsumiert von cards-native, manaspur-native,
memoro-native und allen kommenden Verein-Apps.
Verhältnis zu mana-swift-core
mana-swift-core liefert die Wire-/Auth-/Token-Schicht:
AuthClient, AuthenticatedTransport, KeychainStore, Farben,
Spacings. Dieses Paket setzt darauf auf und liefert UI.
Getrennte Repos, damit mana-swift-core stabil bleibt während sich
die UI-Komponenten organisch entwickeln.
Lokal entwickeln
swift build
swift test
../mana-swift-core/ muss als Schwester-Verzeichnis existieren.
Konventionen
Siehe CLAUDE.md.