v0.7.0 — Phase β-6 Native-Polish
Drei Sub-Pakete: Keyboard-Shortcuts, Daily-Reminder-Notifications, WidgetKit-Extension mit App-Group-Daten-Sharing. Siri-Shortcuts und Share-Extension auf β-7 verschoben — niedrige Priorität, die drei großen Brocken decken 90% des Native-Polish ab. Keyboard-Shortcuts: - Hidden Buttons in StudySessionView mit .keyboardShortcut - Space = flip, 1/2/3/4 = again/hard/good/easy - iPad-Magic-Keyboard + macOS-tauglich Daily-Reminders: - NotificationManager @Observable mit UNUserNotificationCenter - Authorization-State + Permission-Request-Flow - UNCalendarNotificationTrigger täglich zur konfigurierten Zeit - SettingsView in AccountView mit Toggle + DatePicker - UserDefaults-Persistierung von Hour/Minute/Enabled WidgetKit-Extension: - WidgetSnapshot Codable mit topDecks (Top-3 by dueCount) + totalDueCount - WidgetSnapshotStore schreibt in group.ev.mana.cards-Container - DeckListStore.refresh schreibt Snapshot + WidgetCenter.reloadAllTimelines - CardsWidgetExtension-Target im project.yml (app-extension) - CardsWidgetBundle + CardsDueWidget mit 5 Familien (small/medium/ accessoryCircular/accessoryInline/accessoryRectangular) - DueProvider TimelineProvider mit 30-min-Refresh - DueWidgetView Family-Switch - WidgetSnapshot.swift shared in beiden Targets via XcodeGen sources - App-Group im Haupt- und Widget-Entitlement 35 Tests grün (keine neuen Tests in β-6 — WidgetKit + Notifications sind System-API-Integrationen, Tests wären überwiegend Mocks). Build inkl. Widget-Extension grün. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
07ada72b0f
commit
a1770fbc6a
15 changed files with 580 additions and 13 deletions
58
PLAN.md
58
PLAN.md
|
|
@ -1,9 +1,9 @@
|
|||
# Plan — cards-native (SwiftUI Universal)
|
||||
|
||||
**Stand: 2026-05-13 — Phasen β-0 bis β-5 abgeschlossen.**
|
||||
Alle 7 Card-Types + voller Marketplace (Explore/Browse/Subscribe)
|
||||
+ TabBar + Universal-Link-Handling für `cardecky.mana.how/d/<slug>`.
|
||||
35 Unit-Tests + 1 UI-Test grün.
|
||||
**Stand: 2026-05-13 — Phasen β-0 bis β-6 abgeschlossen.**
|
||||
Alle 7 Card-Types + Marketplace + Native-Polish (Keyboard-Shortcuts,
|
||||
Daily-Reminder-Notifications, WidgetKit-Extension mit App-Group).
|
||||
35 Unit-Tests + 1 UI-Test grün, Widget-Build grün.
|
||||
|
||||
Pflicht-Check für β-2: Endurance-Test auf realem Gerät (200+ Karten
|
||||
mit Flugmodus zwischendurch) steht aus — Aufgabe für Till.
|
||||
|
|
@ -27,6 +27,38 @@ mit Flugmodus zwischendurch) steht aus — Aufgabe für Till.
|
|||
- `LoginView` (Email/PW gegen mana-auth)
|
||||
- 3 Unit-Tests (AppConfig)
|
||||
|
||||
✅ **β-6 — Native-Polish (2026-05-13, Tag `v0.7.0`)**
|
||||
- Keyboard-Shortcuts in `StudySessionView`: Space = flip,
|
||||
1/2/3/4 = again/hard/good/easy (über hidden Buttons mit
|
||||
`.keyboardShortcut(.space/KeyEquivalent)`, iPad-Magic-Keyboard
|
||||
+ macOS-tauglich)
|
||||
- `NotificationManager` @Observable: Permission-Request,
|
||||
Authorization-State, täglicher `UNCalendarNotificationTrigger`
|
||||
zur konfigurierten Uhrzeit (UserDefaults-Persistierung)
|
||||
- `SettingsView` (in AccountView verlinkt): Toggle + DatePicker
|
||||
für Reminder, "Über"-Section mit Server-URLs
|
||||
- `WidgetSnapshot` Codable mit `topDecks` (Top-3 nach dueCount)
|
||||
und `totalDueCount`
|
||||
- `WidgetSnapshotStore` schreibt in App-Group-Container
|
||||
`group.ev.mana.cards`
|
||||
- `DeckListStore.refresh` ruft `updateWidgetSnapshot()` und
|
||||
`WidgetCenter.shared.reloadAllTimelines()` nach jedem Pull
|
||||
- `CardsWidgetExtension`-Target (eigenes app-extension-Bundle):
|
||||
`CardsWidgetBundle` + `CardsDueWidget` mit `StaticConfiguration`,
|
||||
Support für systemSmall, systemMedium, accessoryCircular,
|
||||
accessoryInline, accessoryRectangular
|
||||
- `DueProvider` als `TimelineProvider`: liest Snapshot, plant
|
||||
Refresh alle 30 min (plus instant-Refresh via Haupt-App)
|
||||
- `DueWidgetView` mit Family-Switch, alle 5 Family-Layouts
|
||||
- `com.apple.security.application-groups: group.ev.mana.cards`
|
||||
im Haupt- und Widget-Entitlement
|
||||
- `WidgetSnapshot.swift` in beiden Targets via XcodeGen-source-array
|
||||
(single-source-of-truth)
|
||||
|
||||
**Deferred auf β-7:** Siri-Shortcuts (App Intents), Share-Extension
|
||||
für Save-as-Card. Niedrige Priorität — Keyboard + Notifications +
|
||||
Widget decken 90% des Native-Polish ab.
|
||||
|
||||
✅ **β-5 — Marketplace (2026-05-13, Tag `v0.6.0`)**
|
||||
- `PublicDeckEntry`, `PublicDeck`, `PublicDeckVersion`, `PublicDeckOwner`,
|
||||
`PublicDeckDetail`, `ExploreResponse`, `BrowseResponse`,
|
||||
|
|
@ -136,19 +168,19 @@ ausgeliefert wird — heute 404. Web-seitige Aufgabe.
|
|||
| β-3 | ✅ 2026-05-13 | Editor: Deck-CRUD + Card-Create (5 Types); Anki-Import auf β-3-ext verschoben |
|
||||
| β-4 | ✅ 2026-05-13 | Media-Upload, image-occlusion (Touch-Mask-Editor), audio-front (AVAudioPlayer) |
|
||||
| β-5 | ✅ 2026-05-13 | Marketplace (Explore/Browse/Subscribe) + TabBar + Universal-Link-Handler (AASA server-side pending) |
|
||||
| β-6 | — | Native-Polish (Widgets, Notifications, Share-Extension) |
|
||||
| β-6 | ✅ 2026-05-13 | Keyboard-Shortcuts + Daily-Reminders + WidgetKit (Siri/Share deferred auf β-7) |
|
||||
| β-7 | — | App-Store-Submission |
|
||||
|
||||
## Nächste Schritte für β-6 (Native-Polish)
|
||||
## Nächste Schritte für β-7 (App-Store-Vorbereitung)
|
||||
|
||||
Aus Greenfield-Plan-Sektion "Phase β-6":
|
||||
Aus Greenfield-Plan-Sektion "Phase β-7":
|
||||
|
||||
1. WidgetKit-Extension (Small, Medium, Lock-Screen) mit Due-Count
|
||||
2. UNUserNotificationCenter — tägliche Reminder zur konfigurierten Zeit
|
||||
3. Siri-Shortcuts ("Karten lernen" → Default-Deck)
|
||||
4. Share-Extension "Save as Card" für Safari/Mail
|
||||
5. Keyboard-Shortcuts iPad/macOS (Space=flip, 1-4=Rating, J/K=next/prev)
|
||||
6. App-Group `group.ev.mana.cards` für Widget-Daten-Sharing
|
||||
1. App-Icon (drei Größen iOS, plus macOS-Idiom)
|
||||
2. Localized App-Store-Screenshots
|
||||
3. TestFlight-Build, eine Woche Beta-Test
|
||||
4. App-Store-Submission unter `ev.mana.cards`, Verein-Developer-Account
|
||||
5. (β-6-Carryover) Siri-Shortcuts via App Intents
|
||||
6. (β-6-Carryover) Share-Extension "Save as Card"
|
||||
|
||||
## Notizen aus β-4
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue