How to clean up old NSPersistentStore files after migrating Core Data with CloudKit to App Group container

Hi,

I’m trying to migrate Core Data with CloudKit to the shared App Group Container so that widgets can get access to it.

So far, I’ve managed to do so with the following code:

init() {

	container = NSPersistentCloudKitContainer(name: “AppName”)

	let storeDescription = container.persistentStoreDescriptions.first!

	// Clean up code goes here (explained later)
	// ...

	let sharedGroupStoreURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.***")!.appendingPathComponent("AppName.sqlite")

	storeDescription.url = sharedGroupStoreURL

	container.loadPersistentStores { (storeDescription, error) in

		if let error = error as NSError? {
			print("Unresolved error \(error), \(error.userInfo)")
		}
	}

	container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy

container.viewContext.automaticallyMergesChangesFromParent = true
}

This tells Core Data to use the shared container. When the new persistentStore loads, it gets seamlessly populated with the data from CloudKit.

So far, so good. My main issue is, how do I clean up the data remaining in my app from the old NSPersistentStore?

I’ve done it adding the following clean up code:

if let defaultURL = storeDescription.url {
            
	if FileManager.default.fileExists(atPath: defaultURL.path) {
		let fileCoordinator = NSFileCoordinator(filePresenter: nil)
		fileCoordinator.coordinate(writingItemAt: defaultURL.deletingLastPathComponent(), options: .forDeleting, error: nil) { url in
			do {
				try FileManager.default.removeItem(at: url)
			} catch {
				print(error.localizedDescription)
			}
		}
	}
}

This deletes the following files:

  • ckAssetFiles
  • AppName.sqlite
  • .AppName_SUPPORT
  • AppName.sqlite-wal
  • AppName.sqlite-shm

Is this the right way to do it? Are there any other files that should be deleted to?

Thanks,

Àlex García.

Hmm

How to clean up old NSPersistentStore files after migrating Core Data with CloudKit to App Group container
 
 
Q