- Make TranscriptionService a plain Sendable class (not @Observable/@MainActor)
- Request speech authorization in ContentView.onAppear via callback (no async)
- Use @State pendingMemo + Task in View for transcription (Swift 6 safe)
- Separate saveRecording() and startTranscription() to avoid data races
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Application Support directory doesn't always exist on fresh
installs. Create it explicitly before configuring ModelContainer.
Use explicit store URL and cloudKitDatabase: .none to prevent
any CloudKit/remote notification options from being added.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Transcription runs in the View via Task after saving the memo.
Speech authorization is requested when the recording sheet opens.
Shows transcribing indicator. Record button disabled during transcription.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SwiftData's ModelContext has internal queue assertions that conflict
with @MainActor @Observable ViewModels. Move all context.fetch/insert
operations into the SwiftUI View body (which runs on the correct
queue). ViewModel now only handles audio recording state, View handles
persistence. Removed transcription from stop flow for now.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete entitlements file entirely
- Remove remote-notification background mode
- Simplify ModelContainer to plain local store
- Fix bundle ID prefix to de.felixfoertsch per convention
iCloud sync can be added back once the container is set up
in the Apple Developer Portal.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use explicit ModelConfiguration with cloudKitDatabase: .none
to prevent CloudKit from failing on store load. Can be switched
to .automatic once the iCloud container is created.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove #Predicate with local variable capture (known SwiftData crash)
- Explicitly insert VoiceMemo into context before relationship assignment
- Save context before starting async transcription
- Extract audioURL before Task boundary to avoid cross-context access
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move privacy usage descriptions from custom Info.plist to build
settings (INFOPLIST_KEY_*) and enable GENERATE_INFOPLIST_FILE so
Xcode generates a complete Info.plist with all required keys.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>