Post

Replies

Boosts

Views

Activity

Reply to SwfitData Crashes after MigrationPlan Completed
ModelContainer init Code import SwiftUI import HealthKit import SwiftData @main struct MeApp: App { @StateObject var viewModel = ViewModel() @StateObject private var entitlementManager: EntitlementManager @StateObject private var purchaseManager: PurchaseManager @StateObject var sessionManager = SessionManager() let ShareMeData = UserDefaults(suiteName: "group.LDPWJGJD9Z.kookybread.me") let container: ModelContainer init() { let entitlementManager = EntitlementManager() let purchaseManager = PurchaseManager(entitlementManager: entitlementManager) self._entitlementManager = StateObject(wrappedValue: entitlementManager) self._purchaseManager = StateObject(wrappedValue: purchaseManager) do { let schema = Schema([ WorkoutList.self, HealthDataStatistics.self, SportsDataStatistics.self, UserSettingTypeFor.self, TodayRingData.self, TodayHealthData.self, SleepDataSource.self, WorkoutTargetData.self, WorkoutStatisticsForTarget.self, HealthDataList.self, SleepStagesData.self, WorkoutDetailData.self, HeartZoneData.self, WorkoutSegmentData.self, WorkoutMaxMinRangeData.self, WorkoutHeartZoneData.self ]) container = try ModelContainer( for: schema, migrationPlan: MeMigrationPlan.self ) print("ModelContainer initialized successfully") } catch { print("Error initializing model container: \(error)") //The App always crashes here when it is started through TF update, but no error information can be obtained through TF. There is no error prompt in Xcode and it runs normally. fatalError("Failed to initialize model container.") } } var body: some Scene { WindowGroup { ContentView( switchSportsType: sst) .environmentObject(viewModel) .environmentObject(purchaseManager) .environmentObject(entitlementManager) .environmentObject(sessionManager) .modelContainer(container) .preferredColorScheme(darkModeSettings.isDarkModeEnabled ? .dark : nil) .task { await loadImage() await loadImage2() await purchaseManager.updatePurchasedProducts() sessionManager.startSession() } } } } TestFlight Crashlog Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000001, 0x00000001a45f58c0 Termination Reason: SIGNAL 5 Trace/BPT trap: 5 Terminating Process: exc handler [73915] Triggered by Thread: 0 Thread 0 name: Thread 0 Crashed: 0 libswiftCore.dylib 0x00000001a45f58c0 _assertionFailure(_:_:file:line:flags:) + 264 (AssertCommon.swift:144) 1 Me 0x00000001053746e0 specialized MeApp.init() + 1780 (MeApp.swift:59) 2 Me 0x00000001053736d8 MeApp.init() + 8 (<compiler-generated>:0) 3 Me 0x00000001053736d8 protocol witness for App.init() in conformance MeApp + 28 4 SwiftUI 0x00000001a9e904c0 static App.main() + 116 (App.swift:114) 5 Me 0x000000010537374c static MeApp.$main() + 24 (MeApp.swift:0) 6 Me 0x000000010537374c main + 36 7 dyld 0x00000001c9399e4c start + 2240 (dyldMain.cpp:1298) Thread 1: 0 libsystem_pthread.dylib 0x0000000202b6c0c4 start_wqthread + 0 (:-1) Thread 2: 0 libsystem_pthread.dylib 0x0000000202b6c0c4 start_wqthread + 0 (:-1) Thread 3: 0 libsystem_pthread.dylib 0x0000000202b6c0c4 start_wqthread + 0 (:-1) Thread 4: 0 libsystem_pthread.dylib 0x0000000202b6c0c4 start_wqthread + 0 (:-1) Thread 5: 0 libsystem_pthread.dylib 0x0000000202b6c0c4 start_wqthread + 0 (:-1) Thread 0 crashed with ARM Thread State (64-bit): x0: 0x800000010550e720 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x0000000302c122c0 x4: 0x0000000000000000 x5: 0x000000016ae7f390 x6: 0x000000000000002e x7: 0x0000000000000000 x8: 0x0000000000000100 x9: 0x00000000000000ff x10: 0x0000000000002280 x11: 0x0000000087a010be x12: 0x00000000000007fb x13: 0x00000000000007fd x14: 0x0000000087c0188b x15: 0x000000000000008b x16: 0x0000000087a010be x17: 0x0000000000001800 x18: 0x0000000000000000 x19: 0x000000010550e734 x20: 0x800000010550e720 x21: 0x0000000000000000 x22: 0x000000000000000b x23: 0x000000000000000e x24: 0x000000000000003b x25: 0x000000010550e725 x26: 0xd000000000000025 x27: 0x0000000000000000 x28: 0xd00000000000001e fp: 0x000000016ae7f570 lr: 0x00000001a45f58c0 sp: 0x000000016ae7f4a0 pc: 0x00000001a45f58c0 cpsr: 0x60001000 esr: 0xf2000001 (Breakpoint) brk 1 Binary Images: 0x104f80000 - 0x105613fff Me arm64 <7b33921c92b636cebdc0a3adc35d813e> /private/var/containers/Bundle/Application/103ADA5E-4672-4132-8400-E5815C58D83F/Me.app/Me 0x105850000 - 0x10585bfff libobjc-trampolines.dylib arm64e <2e2c05f8377a30899ad91926d284dd03> /private/preboot/Cryptexes/OS/usr/lib/libobjc-trampolines.dylib 0x1a45bc000 - 0x1a4b0bfff libswiftCore.dylib arm64e <d9ad5cc1ca2c3f0a8091652b0df56d14> /usr/lib/swift/libswiftCore.dylib 0x1a9ae4000 - 0x1ab882fff SwiftUI arm64e <c1325fda9da239d2ab83a338b4d8a884> /System/Library/Frameworks/SwiftUI.framework/SwiftUI 0x1c935d000 - 0x1c93e9ef7 dyld arm64e <71846eacee653697bf7d790b6a07dcdb> /usr/lib/dyld 0x202b6b000 - 0x202b77ff3 libsystem_pthread.dylib arm64e <1196b6c3333d3450818ff3663484b8eb> /usr/lib/system/libsystem_pthread.dylib EOF
Jun ’24
Reply to Crash by SwiftData MigarionPlan
The initialization code of this ModelContainer: import SwiftUI import SwiftData @main struct MeApp: App { @StateObject var viewModel = ViewModel() let container: ModelContainer init() { do { let schema = Schema([ WorkoutList.self, HealthDataStatistics.self, SportsDataStatistics.self, UserSettingTypeFor.self, TodayRingData.self, TodayHealthData.self, SleepDataSource.self, WorkoutTargetData.self, WorkoutStatisticsForTarget.self, HealthDataList.self, SleepStagesData.self, WorkoutDetailData.self, HeartZoneData.self, WorkoutSegmentData.self, WorkoutMaxMinRangeData.self, WorkoutHeartZoneData.self ]) container = try ModelContainer( for: schema, migrationPlan: MeMigrationPlan.self ) print("ModelContainer initialized successfully") } catch { print("Error initializing model container: \(error)") fatalError("Failed to initialize model container.") } } var body: some Scene { WindowGroup { ContentView( switchSportsType: sst) .environmentObject(viewModel) .modelContainer(container) } } }
Jun ’24
Reply to Crash by SwiftData MigarionPlan
Logs obtained through TestFlight's Crashlog file Thread 0 name: Thread 0 Crashed: 0 libswiftCore.dylib 0x00000001a45f58c0 _assertionFailure(_:_:file:line:flags:) + 264 (AssertCommon.swift:144) 1 Me 0x00000001053746e0 specialized MeApp.init() + 1780 (MeApp.swift:59) 2 Me 0x00000001053736d8 MeApp.init() + 8 (<compiler-generated>:0) 3 Me 0x00000001053736d8 protocol witness for App.init() in conformance MeApp + 28 4 SwiftUI 0x00000001a9e904c0 static App.main() + 116 (App.swift:114) 5 Me 0x000000010537374c static MeApp.$main() + 24 (MeApp.swift:0) 6 Me 0x000000010537374c main + 36 7 dyld 0x00000001c9399e4c start + 2240 (dyldMain.cpp:1298)
Jun ’24
Reply to Crash by SwiftData MigarionPlan
Use "-com.apple.CoreData.SQLDebug 1" to output the log in the Xcode console: CoreData: annotation: Completed persistent history metadata tables update CoreData: annotation: Updating metadata CoreData: annotation: Finished updating metadata CoreData: annotation: Starting inferred mapping validation CoreData: annotation: Executing inferred mapping validation: IEM_Transform_WorkoutList CoreData: annotation: Finished inferred mapping validation CoreData: annotation: Committing formal transaction CoreData: annotation: Finished committing formal transaction CoreData: annotation: Checkpointing WAL journal CoreData: annotation: Finished checkpointing WAL journal CoreData: annotation: Successfully completed lightweight migration on connection CoreData: annotation: Migration step 0.0 'Total migration time (on connection)' took 0.05 seconds CoreData: annotation: Migration step 2.0 'Total formal transaction time' took 0.04 seconds CoreData: annotation: Migration step 2.5 'Execution of entity schema and data migration statements' took 0.02 seconds CoreData: annotation: (migration) in-place migration completed successfully in 0.06 seconds CoreData: annotation: (migration) Automatic schema migration succeeded for store
Jun ’24
Reply to Crash by SwiftData MigarionPlan
I tried using sysdiagnose but it was too hard for me. This is how I caught the error: import SwiftUI import HealthKit import SwiftData import os.log @main struct MeApp: App { @StateObject var viewModel = ViewModel() @StateObject private var entitlementManager: EntitlementManager @StateObject private var purchaseManager: PurchaseManager @StateObject var sessionManager = SessionManager() let colors: [Color] = [ .introGreen, .introBlue] @State var sharedModelContainer: ModelContainer? @State var crashInfo: String = "No Crash" // 初始化方法 init() { let entitlementManager = EntitlementManager() let purchaseManager = PurchaseManager(entitlementManager: entitlementManager) self._entitlementManager = StateObject(wrappedValue: entitlementManager) self._purchaseManager = StateObject(wrappedValue: purchaseManager) } var body: some Scene { WindowGroup { VStack{ if let container = sharedModelContainer{ ContentView() .environmentObject(viewModel) .environmentObject(queryData) .environmentObject(ringsDataQuery) .environmentObject(darkModeSettings) .environmentObject(recordsQuery) .environmentObject(sst) .environmentObject(hrQuery) .environmentObject(purchaseManager) .environmentObject(entitlementManager) .environmentObject(sessionManager) .modelContainer(container) .preferredColorScheme(darkModeSettings.isDarkModeEnabled ? .dark : nil) .task { await loadImage() await loadImage2() await purchaseManager.updatePurchasedProducts() sessionManager.startSession() } } else { VStack{ Image("Failed") .resizable() .scaledToFit() .frame(width: 100) Text("Er...There is something wrong.") .font(.system(size: 36)) .fontWeight(.bold) .multilineTextAlignment(.center) .foregroundStyle(LinearGradient(colors: colors, startPoint: .leading, endPoint: .trailing)) Text(crashInfo) .font(.system(size: 12)) .padding(20) } .padding(.horizontal,20) .preferredColorScheme(.dark) .transition(AnyTransition.move(edge: .bottom).animation(.spring(duration: 1.5))) .transition(AnyTransition.opacity.animation(.spring(duration: 1.5))) } } .onAppear{ let log = Logger(subsystem: "Kookybread.Me", category: "modelContainer") do { let schema = Schema([ HealthDataList.self, HealthDataStatistics.self, HeartZoneData.self, UserSettingTypeFor.self, SleepDataSource.self, SleepStagesData.self, SportsDataStatistics.self, TodayHealthData.self, TodayRingData.self, WorkoutDetailData.self, WorkoutHeartZoneData.self, WorkoutList.self, WorkoutMaxMinRangeData.self, WorkoutSegmentData.self, WorkoutStatisticsForTarget.self, WorkoutTargetData.self, AvatarImage.self, NickName.self ]) sharedModelContainer = try ModelContainer( for: schema, migrationPlan: MeMigrationPlan.self ) print("ModelContainer initialized successfully") } catch { log.error("Failed to initialize model container: \(error, privacy: .public)") crashInfo = "Error: \(error.self)" } } } } }
Jun ’24
Reply to Crash by SwiftData MigarionPlan
I tested in Xcode today and found that when the migration started, the NSStoreModelVersionHashesVersion of the previous version of the Schema seemed to always be "1.0.0". Although the Models corresponded to Schema.Version(3, 0, 0) ... CoreData: annotation: Incompatible version schema for persistent store 'file:///private/var/mobile/Containers/Shared/AppGroup/48F39567-A54A-45A6-B51F-EBB5064E488C/Library/Application%20Support/default.store'. store metadata = { NSPersistenceFrameworkVersion = 1345; NSStoreModelVersionChecksumKey = "m47Q+vHOr0gMrRL9ogWBvunjLYZwmfrt0PDX73TO/oA="; NSStoreModelVersionHashes = { HealthDataList = {length = 32, bytes = 0x27b73968 fe755a8f 28dd4224 1692184d ... e7762ec3 66e4f0fa }; HealthDataStatistics = {length = 32, bytes = 0x7b1c108d 3578e7df 22035d15 b4f2eadf ... 4e150ac4 337f17f8 }; SleepDataSource = {length = 32, bytes = 0x293b98b8 9ea8499c f7c61923 afd393a3 ... 7c034d3b d8928042 }; SportsDataStatistics = {length = 32, bytes = 0x0b67e997 dddfddbd 5b53cd40 c58993f5 ... 77064cd6 b53b1b1b }; TodayHealthData = {length = 32, bytes = 0xfb6de2ab 2fd504e6 88989a57 bb77a1a2 ... 56c03fca 0973076e }; TodayRingData = {length = 32, bytes = 0x2c0a63ed 7babcb9a d206cd3e 62a35ca8 ... ee3ca37a 14b3b9ce }; UserSettingTypeFor = {length = 32, bytes = 0xdc8b892a b46ce5b3 707263dd ba511389 ... d7899956 9e8d5890 }; WorkoutList = {length = 32, bytes = 0xe510f3ad 374714f1 2845e983 d1b53a9b ... 4761cabf 477ac79b }; WorkoutStatisticsForTarget = {length = 32, bytes = 0xe4e7fef0 daf11afe b9601a0f 5374446f ... 06e0be97 eccf372b }; WorkoutTargetData = {length = 32, bytes = 0x4f636c57 b8de4f32 5be80c23 1bb882a1 ... 655be445 20d96f1a }; }; NSStoreModelVersionHashesDigest = "Qq+tCNnYs1Cq87uFu98DSiOor6rB8Noz6mfrEGibCFWNe0Y3uRqyok4sbz4LVhYpHUl3tgw9jRw6rrm6iimpxA=="; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "1.0.0" ); NSStoreType = SQLite; NSStoreUUID = "4DB70733-02E9-4BD7-8037-05AE5EE3DEDA"; "_NSAutoVacuumLevel" = 2; } ...
Jul ’24
Reply to Crash by SwiftData MigarionPlan
I continued to test other versions. Before and after the migration, ModelVersionIdentifiers was always "1.0.0" init() { let schema = Schema([ WorkoutList.self, HealthDataStatistics.self, SportsDataStatistics.self, UserSettingTypeFor.self, TodayRingData.self, TodayHealthData.self, SleepDataSource.self, WorkoutTargetData.self, WorkoutStatisticsForTarget.self, HealthDataList.self, SleepStagesData.self, WorkoutDetailData.self, HeartZoneData.self, WorkoutSegmentData.self, WorkoutMaxMinRangeData.self, WorkoutHeartZoneData.self ]) do { container = try ModelContainer( for: schema, migrationPlan: MeMigrationPlan.self ) print("ModelContainer initialized successfully") print("container \(container.self)") print("containerVersion \(container.schema.version)") print("containerEncodingVersion \(container.schema.encodingVersion)") print("containerMigrationPlan \(container.migrationPlan)") print("containerConfigurations \(container.configurations)") } catch { print("Error initializing model container: \(error)") fatalError("Failed to initialize model container.") } } Log output after migration: ModelContainer initialized successfully container SwiftData.ModelContainer containerVersion 1.0.0 containerEncodingVersion 1.0.0 containerMigrationPlan Optional(Me.MeMigrationPlan) containerConfigurations [ModelConfiguration name: default url: file:///private/var/mobile/Containers/Shared/AppGroup/0D641150-923C-4A26-B908-1FCEA6012721/Library/Application%20Support/default.store allowsSave: true isStoredInMemoryOnly: false cloudKitDatabase: CloudKitDatabase(_automatic: true, _none: false, _privateDBName: nil) cloudKitContainerIdentifier: nil groupContainer: GroupContainer(_automatic: true, _none: false, _identifier: nil) groupAppContainerIdentifier: Optional("group.XXXXXXXXX.kookybread.me")]
Jul ’24
Reply to Crash by SwiftData MigarionPlan
I just tried logging an error.localizedDescription in TestFlight and got : Could not create ModelContainer: The operation couldn’t be completed. I also tried adding -com.apple.CoreData.MigrationDebug 1 to the launch arguments, but there was no "CoreData: error: ..." in the Xcode console. I created a new project and copied the MigraitonPlan-related code from my code into it and uploaded it to Github. TestDemo
Jul ’24