Move API keys from UserDefaults to secure Keychain storage. Add KeychainService and APIKeyManager for centralized key management. Enable iCloud Keychain sync for cross-device sharing between macOS and iOS.
Migrates vocabulary words and word replacements from UserDefaults to SwiftData for better data management and persistence.
Changes:
- Create VocabularyWord and WordReplacement SwiftData models
- Add dual ModelConfiguration setup (default.store for transcripts, dictionary.store for dictionary data)
- Implement DictionaryMigrationService for one-time UserDefaults→SwiftData migration
- Rename "Correct Spellings" to "Vocabulary" for clearer terminology
- Update all dictionary views to use @Query instead of manager classes
- Update all services to fetch from SwiftData using FetchDescriptor
- Enhance word replacement duplicate detection (now checks during add AND edit)
- Update import/export services to work with SwiftData
- Preserve all existing functionality with improved data integrity
Technical details:
- Separate store files: default.store (transcripts) + dictionary.store (vocabulary + replacements)
- Migration flag: "HasMigratedDictionaryToSwiftData_v2"
- All CRUD operations properly implemented with duplicate detection
- Replace single tap gesture with separate single/double tap handlers
- Double-tap now opens edit dialog directly (more intuitive)
- Single-tap still selects prompt (preserves existing behavior)
- Update help text to reflect new interaction pattern
- Right-click context menu remains unchanged
Improves UX by making prompt editing more discoverable and following
common UI patterns while maintaining backward compatibility.