Swift Academy · Lektion

Enkle migreringer og CloudKit-synkronisering

Migrér skemaændringer, og aktivér CloudKit-synkronisering med NSPersistentCloudKitContainer.

Lektion 4 af 414 trin

Enkle migreringer og CloudKit-synkronisering er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvorfor migreringer?

Når du ændrer din Core Data- eller SwiftData-model (tilføjer, omdøber eller fjerner attributter), skal 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"

Letvægtsmigrering i Core Data

Core Data kan automatisk udlede simple migreringer (tilføjelse, omdøbning eller fjernelse af attributter) uden en tilknytningsmodel.

let desc = NSPersistentStoreDescription(url: storeURL)
desc.shouldMigrateStoreAutomatically = true
desc.shouldInferMappingModelAutomatically = true
container.persistentStoreDescriptions = [desc]

Versionshistorik i .xcdatamodeld

Opret en ny modelversion i Xcode: Redigering → Tilføj modelversion. Angiv den nye som den aktuelle version.

// In MyModel.xcdatamodeld:
// ├── MyModel.xcdatamodel  (v1 - old)
// └── MyModel 2.xcdatamodel (v2 - current)
// Set current version to v2 in File Inspector

Versionsstyring af SwiftData-skemaer

Brug VersionedSchema og SchemaMigrationPlan til at administrere SwiftData-modelversioner.

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

Definér migreringsstadier mellem versioner i en SchemaMigrationPlan for at styre SwiftData gennem opgraderinger.

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 migreringsstadie

Brug ved komplekse migreringer (datatransformationer) et .custom-stadie med willMigrate- og didMigrate-lukninger.

static let migrateV1toV2 = MigrationStage.custom(
  fromVersion: AppSchemaV1.self,
  toVersion: AppSchemaV2.self,
  willMigrate: { context in
    // transform old data
  },
  didMigrate: nil
)

NSPersistentCloudKitContainer

Erstat NSPersistentContainer med NSPersistentCloudKitContainer for at aktivere CloudKit-synkronisering.

let container = NSPersistentCloudKitContainer(name: "MyModel")
container.loadPersistentStores { _, error in
  if let error { fatalError("\(error)") }
}
container.viewContext.automaticallyMergesChangesFromParent = true

Krav til CloudKit

CloudKit-synkronisering kræver: en iCloud-konto, der er logget ind på, en CloudKit-berettigelse og en CloudKit-container, der er konfigureret i udviklerportalen.

// Xcode: Signing & Capabilities → + → iCloud → CloudKit
// Enable "Use CloudKit" in Core Data model inspector

SwiftData med CloudKit

Send en ModelConfiguration med cloudKitDatabase for at aktivere CloudKit-synkronisering i SwiftData.

let config = ModelConfiguration(
  schema: schema,
  cloudKitDatabase: .automatic
)
let container = try ModelContainer(for: schema, configurations: config)

Håndtering af synkroniseringskonflikter

Core Data CloudKit løser konflikter med en politik, hvor den seneste skrivning vinder. Design modellerne, så samtidige skrivekonflikter begrænses.

// Best practice: keep models granular
// One attribute per write concern
// Avoid large blobs that frequently change

Testning af migreringer

Test migreringer på en kopi af produktionslageret, før du udgiver appen, så problemer opdages, inden brugerne bliver berørt.

// Copy production store to a temp location
// Load it with the new container and verify objects are intact

Overvågning af migrering

Lyt efter Core Data-migreringsmeddelelser for at vise en statusbrugergrænseflade under lange migreringer.

NotificationCenter.default.addObserver(
  forName: .NSPersistentStoreCoordinatorStoresWillChange,
  object: container.persistentStoreCoordinator,
  queue: .main
) { _ in showMigrationProgress() }

Hurtigt tjek

Hvilken NSPersistentContainer-underklasse aktiverer automatisk CloudKit-synkronisering?

Opsummering af lektionen

Aktivér letvægtsmigrering med shouldMigrateStoreAutomatically til simple ændringer. Brug VersionedSchema + SchemaMigrationPlan til SwiftData. Aktivér CloudKit-synkronisering ved at skifte til NSPersistentCloudKitContainer eller ModelConfiguration(cloudKitDatabase: .automatic).

Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Enkle migreringer og CloudKit-synkronisering” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Enkle migreringer og CloudKit-synkronisering”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Enkle migreringer og CloudKit-synkronisering”?

Migrér skemaændringer, og aktivér CloudKit-synkronisering med NSPersistentCloudKitContainer. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Enkle migreringer og CloudKit-synkronisering”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Core Data-stakken: opsætning af NSPersistentContainer
  2. SwiftData @Model og ModelContext
  3. Relationer og Fetch Descriptors
  4. Enkle migreringer og CloudKit-synkronisering
← Tilbage til Swift Academy