Migrating Data to App Groups Disables iCloud Syncing

前端 未结 1 426
北海茫月
北海茫月 2021-02-03 13:52

I am adding a Today Extension to my existing app. I have added the an App Group and used this post to successfully migrate my Core Data\'s data to the App Group\'s store. My app

1条回答
  •  臣服心动
    2021-02-03 14:33

    If you are still facing the same problem, you should add the following line for the storeDescription

    storeDescription.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.com.yourapp.identifier")
    

    Source: https://developer.apple.com/videos/play/wwdc2019/202/

    Following is my CoreDataStack:

    import CoreData
    
    class CoreDataStack {
        // MARK: - Core Data stack
    
        static var persistentContainer: NSPersistentCloudKitContainer = {
            /*
             The persistent container for the application. This implementation
             creates and returns a container, having loaded 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.
            */
            let container = NSPersistentCloudKitContainer(name: "data")
            
            let storeURL = URL.storeURL(for: "group.com.myapp", databaseName: "data")
            let storeDescription = NSPersistentStoreDescription(url: storeURL)
            storeDescription.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.com.myapp")
            container.persistentStoreDescriptions = [storeDescription]
            
            container.loadPersistentStores(completionHandler: { (storeDescription, error) in
                if let error = error as NSError? {
                    // Replace this implementation with code to handle the error appropriately.
                    // fatalError() 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.
                     
                    /*
                     Typical reasons for an error here include:
                     * The parent directory does not exist, cannot be created, or disallows writing.
                     * The persistent store is not accessible, due to permissions or data protection when the device is locked.
                     * The device is out of space.
                     * The store could not be migrated to the current model version.
                     Check the error message to determine what the actual problem was.
                     */
                    fatalError("Unresolved error \(error), \(error.userInfo)")
                }
            })
            return container
        }()
        
    
    
        // MARK: - Core Data Saving support
    
        static func saveContext () {
            let context = persistentContainer.viewContext
            if context.hasChanges {
                do {
                    try context.save()
                } catch {
                    // Replace this implementation with code to handle the error appropriately.
                    // fatalError() 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.
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }
            }
        }
    }
    
    public extension URL {
        /// Returns a URL for the given app group and database pointing to the sqlite database.
        static func storeURL(for appGroup: String, databaseName: String) -> URL {
            guard let fileContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroup) else {
                fatalError("Shared file container could not be created.")
            }
    
            return fileContainer.appendingPathComponent("\(databaseName).sqlite")
        }
    }
    

    0 讨论(0)
提交回复
热议问题