Lette migreringer og CloudKit-synkronisering
Migrer skjem endringer og aktiver CloudKit-synkronisering med NSPersistentCloudKitContainer.
Lette migreringer og CloudKit-synkronisering er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hvorfor migreringer?
Når du endrer Core Data- eller SwiftData-modellen (legger til, gir nytt navn til eller fjerner attributter), må du migrere eksisterende lagre.
// Without migration, app crashes on launch:
// "The model used to open the store is incompatible with the one used to create the store"Lettvektsmigrering i Core Data
Core Data kan automatisk utlede enkle migreringer (legge til attributter, gi dem nye navn eller fjerne dem) uten en mapping-modell.
let desc = NSPersistentStoreDescription(url: storeURL)
desc.shouldMigrateStoreAutomatically = true
desc.shouldInferMappingModelAutomatically = true
container.persistentStoreDescriptions = [desc]Versjonshistorikk i .xcdatamodeld
Opprett en ny modellversjon i Xcode: Editor → Add Model Version. Angi den nye versjonen som gjeldende.
// In MyModel.xcdatamodeld:
// ├── MyModel.xcdatamodel (v1 - old)
// └── MyModel 2.xcdatamodel (v2 - current)
// Set current version to v2 in File InspectorVersjonering av SwiftData-skjema
Bruk VersionedSchema og SchemaMigrationPlan til å håndtere versjoner av SwiftData-modellen.
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
Definer migreringsstadier mellom versjoner i en SchemaMigrationPlan for å styre SwiftData gjennom oppgraderinger.
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)
}Tilpasset migreringsstadium
For komplekse migreringer (datatransformasjoner) bruker du et .custom-stadium med willMigrate- og didMigrate-closures.
static let migrateV1toV2 = MigrationStage.custom(
fromVersion: AppSchemaV1.self,
toVersion: AppSchemaV2.self,
willMigrate: { context in
// transform old data
},
didMigrate: nil
)NSPersistentCloudKitContainer
Erstatt NSPersistentContainer med NSPersistentCloudKitContainer for å aktivere CloudKit-synkronisering.
let container = NSPersistentCloudKitContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error { fatalError("\(error)") }
}
container.viewContext.automaticallyMergesChangesFromParent = trueKrav for CloudKit
CloudKit-synkronisering krever en innlogget iCloud-konto, en CloudKit-entitlement og en CloudKit-container som er konfigurert i utviklerportalen.
// Xcode: Signing & Capabilities → + → iCloud → CloudKit
// Enable "Use CloudKit" in Core Data model inspectorSwiftData med CloudKit
Send en ModelConfiguration med cloudKitDatabase for å aktivere CloudKit-synkronisering i SwiftData.
let config = ModelConfiguration(
schema: schema,
cloudKitDatabase: .automatic
)
let container = try ModelContainer(for: schema, configurations: config)Håndtere synkroniseringskonflikter
Core Data CloudKit løser konflikter med en last-write-wins-policy. Utform modeller slik at samtidige skrivekonflikter blir minst mulig.
// Best practice: keep models granular
// One attribute per write concern
// Avoid large blobs that frequently changeTeste migreringer
Test migreringer på en kopi av produksjonslageret før lansering, slik at du oppdager problemer før brukerne blir berørt.
// Copy production store to a temp location
// Load it with the new container and verify objects are intactOvervåke migreringer
Fang opp Core Data-varsler om migrering for å vise fremdrift i brukergrensesnittet under lange migreringer.
NotificationCenter.default.addObserver(
forName: .NSPersistentStoreCoordinatorStoresWillChange,
object: container.persistentStoreCoordinator,
queue: .main
) { _ in showMigrationProgress() }Kunnskapssjekk
Hvilken underklasse av NSPersistentContainer aktiverer automatisk CloudKit-synkronisering?
Oppsummering av leksjonen
Aktiver lettvektsmigrering med shouldMigrateStoreAutomatically for enkle endringer. Bruk VersionedSchema + SchemaMigrationPlan for SwiftData. Aktiver CloudKit-synkronisering ved å bytte til NSPersistentCloudKitContainer eller ModelConfiguration(cloudKitDatabase: .automatic).
Lær deg Swift med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 122
- Leksjoner
- 409
Ofte stilte spørsmål
Er leksjonen «Lette migreringer og CloudKit-synkronisering» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Lette migreringer og CloudKit-synkronisering», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Lette migreringer og CloudKit-synkronisering»?
Migrer skjem endringer og aktiver CloudKit-synkronisering med NSPersistentCloudKitContainer. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Swift Academy?
Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Lette migreringer og CloudKit-synkronisering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?
Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Core Data-stakken: oppsett av NSPersistentContainer
- SwiftData @Model og ModelContext
- Relasjoner og Fetch Descriptors
- Lette migreringer og CloudKit-synkronisering