Swift Academy · leksjon

Lette migreringer og CloudKit-synkronisering

Migrer skjem endringer og aktiver CloudKit-synkronisering med NSPersistentCloudKitContainer.

Leksjon 4 av 414 trinn

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 Inspector

Versjonering 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 = true

Krav 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 inspector

SwiftData 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 change

Teste 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 intact

Overvå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).

Gratis å komme i gang

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

  1. Core Data-stakken: oppsett av NSPersistentContainer
  2. SwiftData @Model og ModelContext
  3. Relasjoner og Fetch Descriptors
  4. Lette migreringer og CloudKit-synkronisering
← Tilbake til Swift Academy