Releasing new Core Data Schema to iCloud production
Asked Answered
P

1

7

I have an app out in the App Store, and I am working on a lightweight migration (adding new attributes and new entities, not deleting anything). From extensive research, I know that I need to add a new version of my current Core Data Model for the local version of the data model. Anyone who updates their app and only uses the local data will automatically be migrated over.

However, I can not find anything about what happens when I update the iCloud schema (from icloud.developer.apple.com). Mainly, I'm concerned about users who are on older versions of the app and are using iCloud. When I update the schema in the iCloud website, will users on an older version of the app lose their current data or not be able to sync their data since their local schema will be different from the iCloud one?

Also, I'm using an NSPersistentCloudKitContainer for syncing the Core Data with CloudKit.

Any help is greatly appreciated as I do not want to mess up anyone's data!

Paramaribo answered 13/8, 2021 at 18:48 Comment(0)
C
8

No, their data still be on iCloud and they could continue to use your app.

When your Schema is deployed to the Production environment, you can not change types of Records or delete them, so all your changes will be done only in addition to the current Schema settings and does not affect users, which have not updated the app yet.

I had a similar question previously and was quite anxious about updating my app Schema, but everything went well - no problems for users and no data was lost.

Do not forget to initialize your new scheme from the app and deploy changes to the Production on iCloud dashboard. You could initialize your scheme in your AppDelegate when you initialize your NSPersistentCloudKitContainer with following code:

let options = NSPersistentCloudKitContainerSchemaInitializationOptions()
try? container.initializeCloudKitSchema(options: options)

After that you could comment out these lines until the next update of Core Data model.

You could check that all changes are uploaded in the iCloud dashboard by clicking on Deploy Schema Changes - you will see a confirmation window with all the changes to the model which will be deployed. It is also possible to change your Scheme directly in the iCloud dashboard, but it is not so convenient (unless you need to add just one Record type).

Since changes in the Schema are not affecting existing users, I usually move them to Production before I submit the app for review, but after all testing related to new Record types is done and I am not planning to change anything there.

Cristionna answered 14/8, 2021 at 11:31 Comment(2)
Amazing! Just to make sure I understand 100%: 1) by "initialize your new scheme from the app," is that just making a new version of the Core Data Model (going to "Editor" -> "Add Model Version..."), or is there another step I need to do? 2) I should only deploy the new changes to production when I submit the app to App Store Connect? Thank you so much for your help!Paramaribo
I've updated the answer, since for part 1 some code is requiredCristionna

© 2022 - 2024 — McMap. All rights reserved.