3
votes

There seems to be an issue with core data. The app is getting crash while getting a persistent coordinator for iOS 10 mobile.

The crash is:-

Fatal error: Unresolved error Error Domain=NSCocoaErrorDomain Code=259 "The file couldn’t be opened because it isn’t in the correct format." UserInfo={NSUnderlyingException=File at path does not appear to be a SQLite database: /var/mobile/Containers/Data/Application/35630A3E-0697-4244-929F-90F35DD1167E/Library/Application Support/Quickride.sqlite, NSSQLiteErrorDomain=26}

I have tried finding a solution related to core data corruption issue. But there was no solution. I guess this issue with persistent coordinator getting corrupted.

@available(iOS 10.0, *)
lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "Quickride")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error {
            fatalError("Unresolved error \(error)")
        }
    })
    return container
}()

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.appendingPathComponent("SingleViewCoreData.sqlite")
    AppDelegate.getAppDelegate().log.debug("Url : \(String(describing: url))")
    var failureReason = "There was an error creating or loading the application's saved data."
    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
                    NSInferMappingModelAutomaticallyOption: false]
    do {
        try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: mOptions)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject
        dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject

        let wrappedError = NSError(domain: "QuickRide domain", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        self.log.debug("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
    }
    return coordinator
}()

Here is the crash report of the crash:-

 Crashed: com.apple.main-thread
 0  libswiftCore.dylib             0x21b4a4c specialized _assertionFailure(_:_:file:line:flags:) + 27869
 1  libswiftCore.dylib             0x204f693 _assertionFailure(_:_:file:line:flags:) + 113116
 2  Quickride                      0x3e8795 closure #1 in closure #1 in AppDelegate.persistentContainer.getter (AppDelegate.swift:633)
 3  Quickride                      0x6ff2bd thunk for @escaping @callee_guaranteed (@guaranteed NSPersistentStoreDescription, @guaranteed Error?) -> () (<compiler-generated>)
 4  CoreData                       0x1ea637c1 -[NSPersistentStoreCoordinator addPersistentStoreWithDescription:completionHandler:] + 406
 5  CoreData                       0x1eb05e4b -[NSPersistentContainer loadPersistentStoresWithCompletionHandler:] + 398
 6  Quickride                      0x3e7d13 AppDelegate.persistentContainer.getter (<compiler-generated>)
 7  Quickride                      0x146b4f specialized static UserCoreDataHelper.getUserObject() (CoreDataHelper.swift:17)
 8  Quickride                      0x4c2487 AppStartupHandler.performSessionInitializationTask() (<compiler-generated>)
 9  Quickride                      0x3e6ee5 AppDelegate.handleUserNotification(newUserNotification:) (<compiler-generated>)
10 Quickride                      0x3e6a1b AppDelegate.processRemoteNotification(userInfo:) (<compiler-generated>)
11 Quickride                      0x3ee493 specialized AppDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:) (AppDelegate.swift:394)
12 Quickride                      0x3e6717 @objc AppDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:) (<compiler-generated>)
13 Quickride                      0x7fe83d FCM_swizzle_appDidReceiveRemoteNotificationWithHandler (FIRMessagingRemoteNotificationsProxy.m:504)
14 UIKit                          0x21ed2927 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] + 5066
15 UIKit                          0x21ebf001 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 5168
16 UIKit                          0x21ec3c1d -[UIApplication _runWithMainScene:transitionContext:completion:] + 1640
17 UIKit                          0x21ed67c5 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke.3149 + 40
18 UIKit                          0x21ec135b -[UIApplication workspaceDidEndTransaction:] + 142
19 FrontBoardServices             0x1e2fcc13 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 18
20 FrontBoardServices             0x1e2fcacd -[FBSSerialQueue _performNext] + 220
21 FrontBoardServices             0x1e2fcdb7 -[FBSSerialQueue _performNextFromRunLoopSource] + 44
22 CoreFoundation                 0x1c9d7fdd __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
23 CoreFoundation                 0x1c9d7b05 __CFRunLoopDoSources0 + 424
24 CoreFoundation                 0x1c9d5f51 __CFRunLoopRun + 1160
25 CoreFoundation                 0x1c9291af CFRunLoopRunSpecific + 470
26 CoreFoundation                 0x1c928fd1 CFRunLoopRunInMode + 104
27 UIKit                          0x21cb6e2d -[UIApplication _run] + 660
28 UIKit                          0x21cb1a53 UIApplicationMain +   150
29 Quickride                      0x7ef45 main (A ppDelegate.swift:31)
30 libdyld.dylib                  0x1c1164eb start + 2

Any idea how to solve this?

1
Did you make a change (even a minor one) to your model? - Magnas
@Magnas I had some changes to my model earlier - Rakesh
Did you already try deleting and re-installing the app? If you made a model change, you may need to write migration code, if it was a change that cannot be handled by auto-migration. - Andrew Ebling

1 Answers

1
votes

To be precise with the terminology, it is not the persistent store coordinator but the persistent store file which is corrupt. To confirm this, run Terminal.app and try to open with the sqlite3 command line tool:

sqlite3 /var/mobile/Containers/Data/Application/35630A3E-0697-4244-929F-90F35DD1167E/Library/Application Support/Quickride.sqlite

If you get the same error, you've got a corrupt file. If you are developing an app, trash the file and move on. If the file contains data that you actually need, hope you've got a prior backup that works.