Swift 6 and NSPersistentCloudKitContainer

Hello all!

I'm porting a ios15+ swiftui app to be compatible with Swift 6 and enabling strict concurrency checking gave me a warning that will be an error when switching to swift 6.

I'm initializing a persistence controller for my cloud kit container:

import CoreData

struct PersistenceController {
    static let shared = PersistenceController()

    let container: NSPersistentCloudKitContainer

    init() {
        container = NSPersistentCloudKitContainer(name: "IBreviary")

        container.loadPersistentStores(completionHandler: { _, error in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })

        container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
        container.viewContext.automaticallyMergesChangesFromParent = true
    }
}

The warning is on the merge policy:

Reference to var 'NSMergeByPropertyObjectTrumpMergePolicy' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode

I have no idea how to make this concurrency safe, nor I found a documentation entry to help me with this.

Anyone have idea how to solve this?

Thanks in advance V.

Answered by DTS Engineer in 805793022

You can fix the warning by using the enum version:

container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

Accepted Answer

You can fix the warning by using the enum version:

container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump

Best,
——
Ziqiao Chen
 Worldwide Developer Relations.

Thank you very much!

Swift 6 and NSPersistentCloudKitContainer
 
 
Q