Lichtgewicht migraties en CloudKit-sync
Schemawijzigingen migreren en CloudKit-sync inschakelen met NSPersistentCloudKitContainer.
Lichtgewicht migraties en CloudKit-sync is een gratis Swift Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.
Waarom migraties?
Wanneer je je Core Data- of SwiftData-model wijzigt (kenmerken toevoegt, hernoemt of verwijdert), moet je bestaande opslaglocaties migreren.
// Without migration, app crashes on launch:
// "The model used to open the store is incompatible with the one used to create the store"Lichtgewicht migratie in Core Data
Core Data kan eenvoudige migraties automatisch afleiden (kenmerk toevoegen, hernoemen of verwijderen) zonder een toewijzingsmodel.
let desc = NSPersistentStoreDescription(url: storeURL)
desc.shouldMigrateStoreAutomatically = true
desc.shouldInferMappingModelAutomatically = true
container.persistentStoreDescriptions = [desc]Versiegeschiedenis in .xcdatamodeld
Maak in Xcode een nieuwe modelversie: Editor → Modelversie toevoegen. Stel de huidige versie in op de nieuwe versie.
// In MyModel.xcdatamodeld:
// ├── MyModel.xcdatamodel (v1 - old)
// └── MyModel 2.xcdatamodel (v2 - current)
// Set current version to v2 in File InspectorVersiebeheer van SwiftData-schema's
Gebruik VersionedSchema en SchemaMigrationPlan om versies van SwiftData-modellen te beheren.
enum AppSchemaV1: VersionedSchema {
static var versionIdentifier = Schema.Version(1,0,0)
static var models: [any PersistentModel.Type] { [ItemV1.self] }
@Model final class ItemV1 { var name: String; init(name: String) { self.name = name } }
}SchemaMigrationPlan
Definieer migratiefasen tussen versies in een SchemaMigrationPlan om SwiftData door upgrades te leiden.
enum AppMigrationPlan: SchemaMigrationPlan {
static var schemas: [any VersionedSchema.Type] { [AppSchemaV1.self, AppSchemaV2.self] }
static var stages: [MigrationStage] { [migrateV1toV2] }
static let migrateV1toV2 = MigrationStage.lightweight(fromVersion: AppSchemaV1.self, toVersion: AppSchemaV2.self)
}Aangepaste migratiefase
Gebruik voor complexe migraties (gegevenstransformaties) een fase .custom met willMigrate- en didMigrate-sluitingen.
static let migrateV1toV2 = MigrationStage.custom(
fromVersion: AppSchemaV1.self,
toVersion: AppSchemaV2.self,
willMigrate: { context in
// transform old data
},
didMigrate: nil
)NSPersistentCloudKitContainer
Vervang NSPersistentContainer door NSPersistentCloudKitContainer om synchronisatie met CloudKit in te schakelen.
let container = NSPersistentCloudKitContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error { fatalError("\(error)") }
}
container.viewContext.automaticallyMergesChangesFromParent = trueVereisten voor CloudKit
Voor synchronisatie met CloudKit heb je het volgende nodig: een aangemeld iCloud-account, een CloudKit-recht en een in het ontwikkelaarsportaal geconfigureerde CloudKit-container.
// Xcode: Signing & Capabilities → + → iCloud → CloudKit
// Enable "Use CloudKit" in Core Data model inspectorSwiftData met CloudKit
Geef een ModelConfiguration met cloudKitDatabase door om synchronisatie met CloudKit in SwiftData in te schakelen.
let config = ModelConfiguration(
schema: schema,
cloudKitDatabase: .automatic
)
let container = try ModelContainer(for: schema, configurations: config)Synchronisatieconflicten afhandelen
Core Data CloudKit lost conflicten op met een beleid waarbij de laatste schrijver wint. Ontwerp modellen zo dat gelijktijdige schrijfconflicten tot een minimum worden beperkt.
// Best practice: keep models granular
// One attribute per write concern
// Avoid large blobs that frequently changeMigraties testen
Test migraties op een kopie van de productieopslag voordat je de app uitbrengt, zodat problemen worden ontdekt voordat gebruikers ermee te maken krijgen.
// Copy production store to a temp location
// Load it with the new container and verify objects are intactMigraties monitoren
Luister naar Core Data-migratiemeldingen om tijdens lange migraties voortgang in de gebruikersinterface te tonen.
NotificationCenter.default.addObserver(
forName: .NSPersistentStoreCoordinatorStoresWillChange,
object: container.persistentStoreCoordinator,
queue: .main
) { _ in showMigrationProgress() }Snelle controle
Welke subklasse van NSPersistentContainer schakelt automatische synchronisatie met CloudKit in?
Samenvatting van de les
Schakel lichtgewicht migratie in met shouldMigrateStoreAutomatically voor eenvoudige wijzigingen. Gebruik VersionedSchema + SchemaMigrationPlan voor SwiftData. Schakel synchronisatie met CloudKit in door over te stappen op NSPersistentCloudKitContainer of ModelConfiguration(cloudKitDatabase: .automatic).
Leer Swift met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 122
- Lessen
- 409
Veelgestelde vragen
Is de les “Lichtgewicht migraties en CloudKit-sync” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Lichtgewicht migraties en CloudKit-sync”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.
Wat leer ik in “Lichtgewicht migraties en CloudKit-sync”?
Schemawijzigingen migreren en CloudKit-sync inschakelen met NSPersistentCloudKitContainer. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Swift Academy te beginnen?
Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Lichtgewicht migraties en CloudKit-sync”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Swift Academy?
Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Core Data-stack: NSPersistentContainer instellen
- SwiftData @Model en ModelContext
- Relaties en fetch descriptors
- Lichtgewicht migraties en CloudKit-sync