Migrations légères et synchronisation CloudKit
Faire évoluer le schéma et activer la synchronisation CloudKit avec NSPersistentCloudKitContainer.
Migrations légères et synchronisation CloudKit est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Pourquoi effectuer des migrations ?
Lorsque vous modifiez votre modèle Core Data ou SwiftData (ajout, renommage ou suppression d’attributs), vous devez migrer les stockages existants.
// Without migration, app crashes on launch:
// "The model used to open the store is incompatible with the one used to create the store"Migration légère dans Core Data
Core Data peut déduire automatiquement les migrations simples (ajout, renommage ou suppression d’un attribut) sans modèle de mappage.
let desc = NSPersistentStoreDescription(url: storeURL)
desc.shouldMigrateStoreAutomatically = true
desc.shouldInferMappingModelAutomatically = true
container.persistentStoreDescriptions = [desc]Historique des versions dans .xcdatamodeld
Créez une nouvelle version du modèle dans Xcode : Éditeur → Ajouter une version de modèle. Définissez la version actuelle comme nouvelle version.
// In MyModel.xcdatamodeld:
// ├── MyModel.xcdatamodel (v1 - old)
// └── MyModel 2.xcdatamodel (v2 - current)
// Set current version to v2 in File InspectorGestion des versions de schéma SwiftData
Utilisez VersionedSchema et SchemaMigrationPlan pour gérer les versions des modèles SwiftData.
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
Définissez les étapes de migration entre les versions dans un SchemaMigrationPlan afin de guider SwiftData lors des mises à niveau.
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)
}Étape de migration personnalisée
Pour les migrations complexes (transformations de données), utilisez une étape .custom avec les fermetures willMigrate et didMigrate.
static let migrateV1toV2 = MigrationStage.custom(
fromVersion: AppSchemaV1.self,
toVersion: AppSchemaV2.self,
willMigrate: { context in
// transform old data
},
didMigrate: nil
)NSPersistentCloudKitContainer
Remplacez NSPersistentContainer par NSPersistentCloudKitContainer pour activer la synchronisation avec CloudKit.
let container = NSPersistentCloudKitContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error { fatalError("\(error)") }
}
container.viewContext.automaticallyMergesChangesFromParent = truePrérequis de CloudKit
La synchronisation CloudKit nécessite : un compte iCloud connecté, une autorisation CloudKit et un conteneur CloudKit configuré dans le portail développeur.
// Xcode: Signing & Capabilities → + → iCloud → CloudKit
// Enable "Use CloudKit" in Core Data model inspectorSwiftData avec CloudKit
Transmettez un ModelConfiguration avec cloudKitDatabase pour activer la synchronisation CloudKit dans SwiftData.
let config = ModelConfiguration(
schema: schema,
cloudKitDatabase: .automatic
)
let container = try ModelContainer(for: schema, configurations: config)Gestion des conflits de synchronisation
Core Data CloudKit résout les conflits en appliquant la règle selon laquelle la dernière écriture prévaut. Concevez les modèles de façon à réduire les conflits liés aux écritures concurrentes.
// Best practice: keep models granular
// One attribute per write concern
// Avoid large blobs that frequently changeTest des migrations
Testez les migrations sur une copie du stockage de production avant la distribution afin de détecter les problèmes avant qu’ils n’affectent les utilisateurs.
// Copy production store to a temp location
// Load it with the new container and verify objects are intactSurveillance des migrations
Écoutez les notifications de migration Core Data pour afficher une interface de progression pendant les migrations longues.
NotificationCenter.default.addObserver(
forName: .NSPersistentStoreCoordinatorStoresWillChange,
object: container.persistentStoreCoordinator,
queue: .main
) { _ in showMigrationProgress() }Vérification rapide
Quelle sous-classe de NSPersistentContainer active la synchronisation automatique avec CloudKit ?
Récapitulatif de la leçon
Activez la migration légère avec shouldMigrateStoreAutomatically pour les modifications simples. Utilisez VersionedSchema et SchemaMigrationPlan pour SwiftData. Activez la synchronisation CloudKit en remplaçant NSPersistentCloudKitContainer ou en utilisant ModelConfiguration(cloudKitDatabase: .automatic).
Questions Fréquemment Posées
La leçon « Migrations légères et synchronisation CloudKit » est-elle gratuite ?
Oui — le texte complet de « Migrations légères et synchronisation CloudKit » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Migrations légères et synchronisation CloudKit » ?
Faire évoluer le schéma et activer la synchronisation CloudKit avec NSPersistentCloudKitContainer. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Migrations légères et synchronisation CloudKit » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pile Core Data : configuration de NSPersistentContainer
- SwiftData @Model et ModelContext
- Relations et FetchDescriptor
- Migrations légères et synchronisation CloudKit