cards-native/project.yml
Till JS a1770fbc6a 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>
2026-05-13 01:00:04 +02:00

150 lines
4.1 KiB
YAML

name: CardsNative
options:
bundleIdPrefix: ev.mana
createIntermediateGroups: true
deploymentTarget:
iOS: "18.0"
macOS: "15.0"
developmentLanguage: de
groupSortPosition: top
generateEmptyDirectories: true
packages:
ManaSwiftCore:
path: ../mana-swift-core
settings:
base:
SWIFT_VERSION: "6.0"
SWIFT_STRICT_CONCURRENCY: complete
CURRENT_PROJECT_VERSION: "1"
MARKETING_VERSION: "0.1.0"
GENERATE_INFOPLIST_FILE: "NO"
ENABLE_USER_SCRIPT_SANDBOXING: "YES"
DEAD_CODE_STRIPPING: "YES"
CLANG_ENABLE_MODULES: "YES"
targets:
CardsNative:
type: application
supportedDestinations: [iOS, macOS]
dependencies:
- package: ManaSwiftCore
product: ManaCore
- package: ManaSwiftCore
product: ManaTokens
- target: CardsWidgetExtension
embed: true
sources:
- path: Sources/App
- path: Sources/Features
- path: Sources/Core
- path: Sources/Resources
excludes:
- "Info.plist"
- "CardsNative.entitlements"
info:
path: Sources/Resources/Info.plist
properties:
CFBundleShortVersionString: "0.1.0"
CFBundleVersion: "1"
CFBundleDevelopmentRegion: de
CFBundleDisplayName: Cards
LSApplicationCategoryType: "public.app-category.education"
UILaunchScreen: {}
CFBundleURLTypes:
- CFBundleURLName: ev.mana.cards
CFBundleURLSchemes:
- cards
ITSAppUsesNonExemptEncryption: false
entitlements:
path: Sources/Resources/CardsNative.entitlements
properties:
com.apple.security.app-sandbox: true
com.apple.security.network.client: true
com.apple.security.files.user-selected.read-write: true
keychain-access-groups:
- $(AppIdentifierPrefix)ev.mana.cards
com.apple.developer.associated-domains:
- applinks:cardecky.mana.how
com.apple.security.application-groups:
- group.ev.mana.cards
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.cards
CODE_SIGN_STYLE: Automatic
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
ENABLE_PREVIEWS: "YES"
CardsWidgetExtension:
type: app-extension
supportedDestinations: [iOS]
sources:
- path: Widgets/CardsWidget
excludes:
- "Resources/Info.plist"
- "Resources/CardsWidgetExtension.entitlements"
- path: Sources/Core/Sync/WidgetSnapshot.swift
info:
path: Widgets/CardsWidget/Resources/Info.plist
properties:
CFBundleDisplayName: Cards Widget
NSExtension:
NSExtensionPointIdentifier: com.apple.widgetkit-extension
entitlements:
path: Widgets/CardsWidget/Resources/CardsWidgetExtension.entitlements
properties:
com.apple.security.application-groups:
- group.ev.mana.cards
dependencies:
- sdk: WidgetKit.framework
- sdk: SwiftUI.framework
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.cards.widget
CODE_SIGN_STYLE: Automatic
SKIP_INSTALL: "YES"
INFOPLIST_KEY_CFBundleDisplayName: Cards Widget
CardsNativeTests:
type: bundle.unit-test
supportedDestinations: [iOS, macOS]
sources:
- Tests/UnitTests
dependencies:
- target: CardsNative
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.cards.tests
GENERATE_INFOPLIST_FILE: "YES"
CardsNativeUITests:
type: bundle.ui-testing
supportedDestinations: [iOS, macOS]
sources:
- Tests/UITests
dependencies:
- target: CardsNative
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: ev.mana.cards.uitests
GENERATE_INFOPLIST_FILE: "YES"
schemes:
CardsNative:
build:
targets:
CardsNative: all
CardsNativeTests: [test]
CardsNativeUITests: [test]
test:
targets:
- CardsNativeTests
- CardsNativeUITests
gatherCoverageData: false
run:
config: Debug
archive:
config: Release