ManaCore + ManaTokens als Swift-Package für alle nativen mana-e.V.-Apps. Phase α aus mana/docs/MANA_SWIFT.md durch. ManaCore: - AuthClient gegen mana-auth (Login, Refresh, Status-Maschine) - AuthenticatedTransport (URLSession + 401-Retry) - ManaAppConfig-Protocol für App-injizierbare Konfig - KeychainStore mit optionaler Shared-Access-Group - JWT-Parser für lokale Expiry-Prüfung - AuthError, CoreLog (interne OSLog-Logger) ManaTokens: - 12 Vereins-Tokens als dynamic Light/Dark Colors - 5 Brand-Literale (mana-yellow, spectrum-orange, ...) - Spacing, Radius, Typography aus mana/docs/THEMING.md Tests: 12 Unit-Tests grün via swift test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.4 KiB
4.4 KiB
CLAUDE.md — mana-swift-core
Guidance für Claude Code in diesem Repo.
Übergeordneter Plan:
../mana/docs/MANA_SWIFT.mdist die SOT für die ganze native-App-Plattform. Dieses CLAUDE.md ist die Repo-lokale Konventionen-Doku.
Was dieses Repo ist
Swift-Package-Plattform für alle nativen mana-e.V.-Apps. Enthält genau zwei Library-Products:
- ManaCore — Auth (mana-auth-Login, JWT-Refresh, Keychain), Transport (URLSession-Wrapper mit 401-Retry).
- ManaTokens — Verein-Designwerte. Spiegelt
mana/docs/THEMING.md.
Wird konsumiert von memoro-native, geplant cards-native,
nutriphi-native und weiteren.
Status
v1.0.0 — initiale Extraktion aus memoro-native (2026-05-12).
Phase α aus mana/docs/MANA_SWIFT.md — wortwörtliche Verschiebung
von Core/Auth, Core/API/Transport, plus ManaTokens neu aus
mana/docs/THEMING.md. Keine spekulativen Verallgemeinerungen.
Architektonische Invarianten
Nicht ohne explizite Diskussion antasten:
- Genau zwei Library-Products. ManaCore + ManaTokens. Ein
ManaUI-Komponenten-Package entsteht später in einem eigenen Repo, nicht hier (mana/docs/MANA_SWIFT.mdPhase ε). - Keine externen Dependencies. ManaCore darf nur Foundation,
Security, OSLog, Combine importieren. Kein Alamofire, kein Sentry,
kein nichts. Compliance (
mana/docs/COMPLIANCE.md) + Build-Stabilität. - Public API ist
Sendable. Jeder Cross-Actor-Type. Swift-6- Concurrency-Korrektheit. - Keine app-spezifischen Annahmen. ManaCore weiß nichts über Memos, Decks, Meals. PRs, die "irgendwas für Memoro" hinzufügen wollen, gehören in memoro-native, nicht hier.
- mana-auth-Wissen ist erlaubt. Endpoint-Pfade
/api/v1/auth/login,/api/v1/auth/refresh, Wire-Format mitaccessToken/refreshToken. Das ist Verein-Plattform-Konstante, nicht App-Detail. - OSLog statt print/Sentry. ManaCore loggt intern unter Subsystem
ev.mana.core. Apps haben ihr eigenes Subsystem. - App injiziert ihre Config. ManaCore hardcoded nichts (außer
die mana-auth-Endpoint-Pfade als Konstante).
authBaseURL,keychainService,keychainAccessGroupkommen vom App-Caller. - Tests gegen reine Logik. JWT-Decode, Token-Expiry, Keychain- Key-Mapping. URLSession-Calls werden über Protokoll-Injection getestet, nicht über echtes Netzwerk.
Versionierung
- Semver strikt. Patch = Bugfix ohne API-Änderung. Minor = neue API additiv. Major = breaking.
- Git-Tag nach jedem Sinn-Abschnitt auf
main. Nicht jeden Commit. - CHANGELOG.md pflicht. Was hat sich geändert, müssen Apps was anpassen.
- Pflege-Politik: Letzte zwei Major-Versionen werden mit Patches bedient. Ältere nicht.
Konventionen
- Swift 6.0, Strict Concurrency komplett
- iOS 18 / macOS 15 Minimum (gleiche Targets wie memoro-native)
- SwiftFormat mit
.swiftformat(4-space, 120-col, sorted imports) - SwiftLint mit
.swiftlint.yml - Doc-Comments pflicht auf jedem
public-Symbol (///) - Lokalisierung: Public-API-Strings auf Deutsch (Verein-Konvention), Code-Identifier auf Englisch
Lokal entwickeln
swift build # baut beide Targets
swift test # Unit-Tests
swift package generate-xcodeproj # optional, für Xcode
Für die Integration in eine App (memoro-native, cards-native):
- Dev-Cycle: in
project.ymlder Apppath: ../mana-swift-coresetzen - Release:
from: 1.0.0mit Git-Tag
Wenn eine neue Funktion dazukommt
- Frage: gehört das wirklich in ManaCore/ManaTokens, oder ist es App-spezifisch? Wenn unsicher: in die App, später extrahieren.
- Public API mit Doc-Comments.
- Unit-Tests gegen die State-Machine, nicht gegen echtes Netzwerk.
- CHANGELOG.md ergänzen.
- Bei Breaking-Change: Major-Bump-Plan in
mana/docs/MANA_SWIFT.mdnotieren, alle aktiven Apps informieren.
Wichtige Cross-Repo-Doks
mana/docs/MANA_SWIFT.md— Plattform-SOT für native Appsmana/docs/MANA_AUTH_FEDERATION.md— Auth-Protokollmana/docs/THEMING.md— Token-SOT, spiegelt sich in ManaTokensmana/docs/COMPLIANCE.md— Telemetrie/Crash-Reporter-Regelnmana/services/mana-auth/CLAUDE.md— Server-Konventionen, § "Native-App-Koordination" beschreibt die Refresh-Token-Invariantememoro-native/CLAUDE.md— erste Konsumenten-App, Konventionen hier sind aus deren PLAN.md gewachsen