Swift Academy · Lektion

Einfache Migrationen und CloudKit-Synchronisierung

Migrieren Sie Schemaänderungen und aktivieren Sie die CloudKit-Synchronisierung mit NSPersistentCloudKitContainer.

Lektion 4 von 414 Schritte

Einfache Migrationen und CloudKit-Synchronisierung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum Migrationen?

Wenn Sie Ihr Core-Data- oder SwiftData-Modell ändern (Attribute hinzufügen, umbenennen oder entfernen), müssen Sie vorhandene Stores migrieren.

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

Lightweight Migration in Core Data

Core Data kann einfache Migrationen (Attribut hinzufügen, umbenennen oder entfernen) automatisch ableiten, ohne ein Mapping-Modell zu benötigen.

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

Versionsverlauf in .xcdatamodeld

Erstellen Sie in Xcode eine neue Modellversion: Editor → Add Model Version. Legen Sie die neue Version als aktuelle Version fest.

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

SwiftData-Schema versionieren

Verwenden Sie VersionedSchema und SchemaMigrationPlan, um SwiftData-Modellversionen zu verwalten.

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

Definieren Sie in einem SchemaMigrationPlan Migrationsphasen zwischen Versionen, um SwiftData durch Aktualisierungen zu führen.

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

Benutzerdefinierte Migrationsphase

Verwenden Sie für komplexe Migrationen (Datentransformationen) eine .custom-Phase mit willMigrate- und didMigrate-Closures.

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

NSPersistentCloudKitContainer

Ersetzen Sie NSPersistentContainer durch NSPersistentCloudKitContainer, um die CloudKit-Synchronisierung zu aktivieren.

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

Voraussetzungen für CloudKit

Für die CloudKit-Synchronisierung benötigen Sie: ein angemeldetes iCloud-Konto, ein CloudKit-Entitlement und einen im Developer Portal konfigurierten CloudKit-Container.

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

SwiftData mit CloudKit

Übergeben Sie eine ModelConfiguration mit cloudKitDatabase, um die CloudKit-Synchronisierung in SwiftData zu aktivieren.

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

Synchronisierungskonflikte behandeln

Core Data CloudKit löst Konflikte nach dem Prinzip „letzter Schreibvorgang gewinnt“. Entwerfen Sie Modelle so, dass konkurrierende Schreibzugriffe möglichst selten aufeinandertreffen.

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

Migrationen testen

Testen Sie Migrationen vor der Veröffentlichung mit einer Kopie des Produktiv-Stores, um Probleme zu erkennen, bevor sie sich auf Benutzer auswirken.

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

Migrationen überwachen

Reagieren Sie auf Core-Data-Migrationsbenachrichtigungen, um während langer Migrationen eine Fortschrittsanzeige einzublenden.

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

Kurze Überprüfung

Welche Unterklasse von NSPersistentContainer aktiviert die automatische CloudKit-Synchronisierung?

Zusammenfassung der Lektion

Aktivieren Sie die Lightweight Migration mit shouldMigrateStoreAutomatically für einfache Änderungen. Verwenden Sie VersionedSchema und SchemaMigrationPlan für SwiftData. Aktivieren Sie die CloudKit-Synchronisierung, indem Sie zu NSPersistentCloudKitContainer wechseln oder ModelConfiguration(cloudKitDatabase: .automatic) verwenden.

Kostenlos starten

Lerne Swift mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
122
Lektionen
409

Häufig gestellte Fragen

Ist die Lektion „Einfache Migrationen und CloudKit-Synchronisierung“ kostenlos?

Ja — der vollständige Text von „Einfache Migrationen und CloudKit-Synchronisierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Einfache Migrationen und CloudKit-Synchronisierung“?

Migrieren Sie Schemaänderungen und aktivieren Sie die CloudKit-Synchronisierung mit NSPersistentCloudKitContainer. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Einfache Migrationen und CloudKit-Synchronisierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Core-Data-Stack: NSPersistentContainer einrichten
  2. SwiftData @Model und ModelContext
  3. Beziehungen und Fetch Descriptors
  4. Einfache Migrationen und CloudKit-Synchronisierung
← Zurück zu Swift Academy