Code + Identity-Rename zur Vorbereitung auf Apple-Dev-Portal-Aktion (Bundle ev.mana.wordeck, App-Group group.ev.mana.wordeck, AASA applinks:wordeck.com). Build bleibt funktional, aber gegen die neue text-only-API können image-occlusion-Creates 422 zurückgeben — das wird mit der Wordeck-Native v1.0-Welle (parallele Apple-Aktion) sauber gemacht. Umbenennung: - 41 Files: cardecky/Cardecky → wordeck/Wordeck (Display, Strings, Kommentare) - 57 Files: CardsNative → WordeckNative, CardsAPI → WordeckAPI, CardsTheme → WordeckTheme, CardsBrand → WordeckBrand, CardsWidget → WordeckWidget, CardsDueWidget → WordeckDueWidget - Bundle-ID ev.mana.cardecky → ev.mana.wordeck (project.yml, Info.plist, entitlements, Keychain-Service, App-Group) - AASA applinks:cardecky.mana.how → applinks:wordeck.com - API-Base cardecky-api.mana.how → api.wordeck.com - 10 Files renamed (App-Entry, API-Extensions, Theme, Widget, Entitlements, Tests) - xcodeproj regenerated via xcodegen → WordeckNative.xcodeproj - MaskRegionsTests.swift gelöscht (image-occlusion entfällt mit Wordeck text-only) Forgejo-Repo git.mana.how/till/cards-native → wordeck-native umbenannt (Auto-Redirect aktiv). Lokales Verzeichnis Code/cards-native/ bleibt vorerst — wird beim nächsten Apple-Setup mit Bundle-Test umbenannt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.2 KiB
7.2 KiB
RELEASE_CHECKLIST — wordeck-native
Externe Schritte vor App-Store-Submission. Alles unter dieser Sektion läuft NICHT durch das Repo — sondern durch das Apple- Developer-Portal, App-Store-Connect, das Cards-Web-Repo (für AASA) und über Xcode (für Build + Sign).
Vor TestFlight (intern, kein Apple-Review)
Apple-Developer-Konfiguration
- Team-ID gesetzt (
QP3GLU8PH3, mana e.V.) —DEVELOPMENT_TEAMinproject.yml > settings > base. Greift bei Archive automatisch. - App-ID
ev.mana.wordeckim Developer-Portal anlegen, falls noch nicht da. Mit Capabilities: App Groups, Keychain Sharing, Associated Domains. - App-ID
ev.mana.wordeck.share+ev.mana.wordeck.widgetfür die Extensions analog anlegen, ebenfalls mit App Groups. - App-Group
group.ev.mana.wordeckim Portal anlegen und allen drei App-IDs zuweisen. - Keychain-Access-Group: heute
ev.mana.wordeck. Wenn Shared-Keychain mitmemoro-nativegewünscht (siehemana/docs/MANA_SWIFT.mdPhase γ), auf$(AppIdentifierPrefix)ev.mana.sharedumstellen undAppConfig.manaAppConfig.keychainAccessGroupsetzen. - Provisioning Profiles für alle drei Targets generieren (Development + Distribution). Bei "Automatic Signing" macht Xcode das beim ersten Build selbst, wenn das Team-ID stimmt.
Asset-Polish
- AppIcon ersetzen. Heute Platzhalter aus
scripts/make-appicon.swift(forest-green "C"). Vor Submission durch ein vom Designer erstelltes Icon austauschen (Sources/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png). - Marketing-Versionsnummer in
project.ymlsetzen (MARKETING_VERSION→ "1.0.0"). - Build-Nummer monoton inkrementieren bei jedem TestFlight-
Upload (
CURRENT_PROJECT_VERSION).
Server-seitige Vorbedingungen
- AASA-Endpoint auf
wordeck.com/.well-known/apple-app-site-association— SvelteKit-Server-Route gebaut incards/apps/web/src/routes/.well-known/apple-app-site-association/+server.ts(2026-05-13). Content-Typeapplication/json, paths/d/*und/u/*. Lokal mitnode build+ curl verifiziert. PUBLIC_APPLE_TEAM_ID=QP3GLU8PH3incards/infrastructure/docker-compose.production.ymlhinterlegt (Commit folgt). Wird zur Runtime von$env/dynamic/publicaufgelöst und in den AASA-Response geschrieben.- Production-Deploy von cards-web durchgeführt 2026-05-13.
Probe von außen:
curl https://wordeck.com/.well-known/apple-app-site-associationliefertapplication/jsonmit"appID":"QP3GLU8PH3.ev.mana.wordeck". Cloudflare-Tunnel reicht den Endpoint sauber durch (kein HTML-Captive, kein Redirect). - api.wordeck.com muss erreichbar bleiben — die App ist 100% Online-write. Health-Probe verifizieren.
Build + Archive
xcodegen generate- In Xcode: Product → Archive (Destination "Any iOS Device")
- Im Organizer: Validate App
- Distribute App → TestFlight & App Store
TestFlight-Test-Plan
- Endurance: 200+ Karten lernen, Flugmodus zwischendurch.
- Cross-Device: Web↔Native parallel. Karte gegrade in App → Web zeigt nach Reload identischen Review-State.
- Widget: ans Home-Screen pinnen, Due-Count nach App-Refresh.
- Universal-Link:
https://wordeck.com/d/<slug>in Safari öffnen → App startet auf Explore-Tab + Public-Deck-Detail. - Share-Extension: Text in Safari markieren → Teilen → "Als Karte speichern" → Karte landet in der App.
- Siri-Shortcut: "Hey Siri, Karten lernen" → App öffnet.
- Daily-Reminder: Tagesgrenze überqueren, Notification kommt zur konfigurierten Uhrzeit.
- Login/Logout: kompletter Auth-Roundtrip.
- Offline-Grades: Reviews offline machen, online gehen,
PendingGrade-Queue läuft leer.
Vor App-Store-Submission (öffentliches Review)
App-Store-Connect
- App-Eintrag erstellen unter https://appstoreconnect.apple.com
mit Bundle-ID
ev.mana.wordeck. - App-Name + Subtitle (max 30 Zeichen): - Name: "Wordeck" - Subtitle: "Karteikarten — Verein mana"
- Description (de + en, max 4000 Zeichen). Vorschlag in
docs/MARKETING_COPY.md— vor Submission gegenlesen und Vereins-Tonalität schärfen. - Keywords (max 100 Zeichen, comma-separated): "Karteikarten,Spaced Repetition,Lernen,Vokabeln,Anki,Flashcards,FSRS,mana,Verein,Open Source"
- Screenshots für iPhone 16 Pro Max + iPhone SE-3 + iPad Pro. 6.7", 6.5", 5.5", iPad 12.9" — siehe Apple's Specs.
- Privacy-Policy-URL:
https://wordeck.com/privacy(live seit 2026-05-13, SvelteKit-Route mit Verein-Content). - Support-URL:
https://wordeck.com/help(live, FAQ + Kontakt-Email kontakt@mana-ev.ch). - Marketing-URL (optional) —
wordeck.com. - Age-Rating: vermutlich 4+ (no objectionable content).
- Pricing: Free.
- App-Privacy (Data Type Declaration): - Email-Adresse (für Login) - User-Inhalt (Karten, Decks) - Nutzungsdaten (FSRS-Reviews) - Nicht für Tracking verwendet.
Compliance / Verein-Werte
- Lese
mana/docs/COMPLIANCE.mdund prüfe, dass keine Telemetrie, kein Crash-Reporter, kein SaaS-Tracker in Submission- Build (Stripe + APNs sind die akzeptierten Ausnahmen — Cards nutzt keines davon heute). - Subscriptions / In-App-Purchases: Marketplace-Paid-Decks
sind über
mana-creditsabgewickelt, nicht über StoreKit. Im App-Store-Connect "no In-App-Purchases" auswählen, außer wir wollen vor Submission StoreKit fürmana-creditseinführen (separate Architektur-Frage).
Hub-App vs Standalone-App (siehe MANA_SWIFT.md)
- Entschieden: separate Apps. memoro-native und wordeck-native sind eigenständige App-Store-Einträge. Keine Hub-App.
Carryover-Tasks (β-6 / β-7-Reste)
- Siri-Shortcut via App Intents (
StudyCardsIntent) — funktional, v1: nur "App öffnen". Erweiterung "Direkt in Default-Deck-Study" kann später kommen. - Share-Extension "Save as Card" — Pragma-Lösung: Extension
speichert
PendingSharein App-Group, Haupt-App zeigt Banner, User wählt Ziel-Deck und Back-Text. Kein direkter API-Call aus der Extension (Auth-State wäre kompliziert, Pragma reicht für v1). - Card-Edit (PATCH
/cards/:id): heute deferred, ergänzen wenn Beta-User danach fragen. - Anki-Import: heute deferred, weil Web client-side parsed
und kein Server-Endpoint existiert. Native bräuchte eigenen
.apkg-Parser (sqlite-basiert) — eigener Sprint.
Nach Submission
- Monitoring: nach Release
api.wordeck.com/healthzund Rate-Limit-Auslastung beobachten — Native-App kann Last-Spitzen erzeugen. - DSGVO-Endpoint (
/api/v1/dsgvo/export,/delete) testweise aus Native triggerbar machen (β-7-Extension oder β-8). - Update-Cadence: erstmal alle 2-4 Wochen ein Build. Build-Nummer monoton, Marketing-Version semver.