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:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user