iOS Persistence Standards
Priority: P0
Implementation Guidelines
SwiftData (Current iOS 17+)
- Models: Use the
@Modelmacro for your Swift classes. - Container: Use
@MainActorfor configuring theModelContainer. - UI State: Use
@Queryfor reactive data fetching in SwiftUI views. - Context API: Access
modelContextfrom the@Environmentfor CRUD (modelContext.insert, modelContext.delete, modelContext.save).
Core Data (Stable & Large Legacy)
- Mapping: Define your entities and attributes in the
.xcdatamodeldfile. - Stack: Use
NSPersistentContainerto encapsulate the SQLite store. - Background: Perform heavy writes on
newBackgroundContext()to avoid UI lag. - Main Context: Use
viewContextonly for UI thread operations.
Local Persistence (Small Data)
- Keychain: Use for Auth tokens, passwords, and PII. Never store sensitive keys in
UserDefaults. - UserDefaults: Use for lightweight settings/flags (e.g.,
isDarkModeEnabled). - File System: Save images or PDFs to the
Documentsdirectory usingData.write(to:).
Anti-Patterns
- No heavy I/O on ViewContext: Use private background contexts.
- No string-based predicates: Use KeyPaths or generated helpers.
- No missing merge strategy: Set mergePolicy explicitly (e.g., mergeByPropertyObjectTrump).
References
- SwiftData & Core Data Implementation