Swift Academy · Lektion

Lätta migreringar och CloudKit-synkronisering

Migrera schemändringar och aktivera CloudKit-synkronisering med NSPersistentCloudKitContainer.

Lektion 4 av 414 steg

Lätta migreringar och CloudKit-synkronisering är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.

Varför behövs migreringar

När du ändrar din Core Data- eller SwiftData-modell (lägger till, byter namn på eller tar bort attribut) måste du migrera befintliga datalager.

// Without migration, app crashes on launch:
// "The model used to open the store is incompatible with the one used to create the store"

Lättviktsmigrering i Core Data

Core Data kan automatiskt härleda enkla migreringar (lägga till attribut, byta namn eller ta bort attribut) utan en mapping model.

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

Versionshistorik i .xcdatamodeld

Skapa en ny modellversion i Xcode: Editor → Add Model Version. Ange den nya versionen som aktuell.

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

Versionshantering av SwiftData-scheman

Använd VersionedSchema och SchemaMigrationPlan för att hantera versioner av SwiftData-modeller.

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

Definiera migreringssteg mellan versioner i en SchemaMigrationPlan för att styra SwiftData genom uppgraderingar.

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)
}

Anpassat migreringssteg

För komplexa migreringar (datatransformeringar) använder du ett .custom-steg med closure-funktionerna willMigrate och didMigrate.

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

NSPersistentCloudKitContainer

Ersätt NSPersistentContainer med NSPersistentCloudKitContainer för att aktivera CloudKit-synkronisering.

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

Krav för CloudKit

CloudKit-synkronisering kräver ett inloggat iCloud-konto, ett CloudKit-entitlement och en CloudKit-container som har konfigurerats i utvecklarportalen.

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

SwiftData med CloudKit

Skicka en ModelConfiguration med cloudKitDatabase för att aktivera CloudKit-synkronisering i SwiftData.

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

Hantera synkroniseringskonflikter

Core Data CloudKit löser konflikter enligt principen att den senaste skrivningen vinner. Utforma modellerna för att minimera samtidiga skrivkonflikter.

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

Testa migreringar

Testa migreringar på en kopia av produktionslagret innan du publicerar appen, så att problem upptäcks innan användarna påverkas.

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

Övervaka migreringar

Lyssna efter Core Data-migreringsnotiser för att visa ett förloppsgränssnitt under långa migreringar.

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

Snabb kontroll

Vilken underklass till NSPersistentContainer aktiverar automatisk CloudKit-synkronisering?

Sammanfattning av lektionen

Aktivera lättviktsmigrering med shouldMigrateStoreAutomatically för enkla ändringar. Använd VersionedSchema och SchemaMigrationPlan för SwiftData. Aktivera CloudKit-synkronisering genom att byta till NSPersistentCloudKitContainer eller ModelConfiguration(cloudKitDatabase: .automatic).

Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”Lätta migreringar och CloudKit-synkronisering” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Lätta migreringar och CloudKit-synkronisering”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Lätta migreringar och CloudKit-synkronisering”?

Migrera schemändringar och aktivera CloudKit-synkronisering med NSPersistentCloudKitContainer. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Lätta migreringar och CloudKit-synkronisering”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Core Data-stacken: konfigurera NSPersistentContainer
  2. SwiftData @Model och ModelContext
  3. Relationer och Fetch Descriptors
  4. Lätta migreringar och CloudKit-synkronisering
← Tillbaka till Swift Academy