Fix SwiftData migration crash on schema upgrades

Add = false/true defaults to all non-optional Bool properties so
SwiftData's lightweight migration knows what value to assign existing
rows. Replace try! ModelContainer with crash-safe do-catch that resets
the store on migration failure instead of crashing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
alexandrev-tibco
2026-04-30 11:24:56 +02:00
parent 4ac81d6223
commit 7da7995538
5 changed files with 24 additions and 11 deletions
+14 -1
View File
@@ -17,7 +17,20 @@ struct MealMoodApp: App {
MealSlot.self
])
let configuration = ModelConfiguration(cloudKitDatabase: .none)
return try! ModelContainer(for: schema, configurations: [configuration])
do {
return try ModelContainer(for: schema, configurations: [configuration])
} catch {
// Migration failed reset the store to avoid a crash loop
let storeURL = configuration.url
for ext in ["", "-shm", "-wal"] {
try? FileManager.default.removeItem(at: URL(fileURLWithPath: storeURL.path + ext))
}
do {
return try ModelContainer(for: schema, configurations: [configuration])
} catch {
fatalError("Cannot create ModelContainer after reset: \(error)")
}
}
}()
init() {