0Pricing
Swift Academy · Lección

Migraciones ligeras y sincronización con CloudKit

Migre cambios de esquema y habilite la sincronización con CloudKit mediante NSPersistentCloudKitContainer.

Migraciones ligeras y sincronización con CloudKit es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

¿Por qué realizar migraciones?

Cuando cambia su modelo de Core Data o SwiftData (al añadir, cambiar el nombre o eliminar atributos), debe migrar los almacenes existentes.

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

Migración ligera en Core Data

Core Data puede inferir automáticamente migraciones sencillas (añadir, cambiar el nombre o eliminar un atributo) sin un modelo de asignación.

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

Historial de versiones en .xcdatamodeld

Cree una nueva versión del modelo en Xcode: Editor → Añadir versión del modelo. Establezca la nueva versión como versión actual.

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

Versionado de esquemas en SwiftData

Use VersionedSchema y SchemaMigrationPlan para gestionar las versiones de los modelos de 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

Defina las etapas de migración entre versiones en un SchemaMigrationPlan para guiar a SwiftData durante las actualizaciones.

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

Etapa de migración personalizada

Para migraciones complejas (transformaciones de datos), use una etapa .custom con closures willMigrate y didMigrate.

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

NSPersistentCloudKitContainer

Reemplace NSPersistentContainer por NSPersistentCloudKitContainer para activar la sincronización con CloudKit.

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

Requisitos de CloudKit

La sincronización con CloudKit requiere: una cuenta de iCloud con sesión iniciada, el entitlement de CloudKit y un contenedor de CloudKit configurado en el portal de desarrolladores.

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

SwiftData con CloudKit

Pase un ModelConfiguration con cloudKitDatabase para activar la sincronización con CloudKit en SwiftData.

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

Gestión de conflictos de sincronización

Core Data CloudKit resuelve los conflictos mediante una política de last-write-wins. Diseñe los modelos para minimizar las colisiones de escrituras simultáneas.

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

Pruebas de migraciones

Pruebe las migraciones en una copia del almacén de producción antes de publicar la app para detectar problemas antes de que afecten a los usuarios.

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

Supervisión de migraciones

Escuche las notificaciones de migración de Core Data para mostrar la interfaz de progreso durante migraciones largas.

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

Comprobación rápida

¿Qué subclase de NSPersistentContainer activa la sincronización automática con CloudKit?

Repaso de la lección

Active la migración ligera con shouldMigrateStoreAutomatically para cambios sencillos. Use VersionedSchema y SchemaMigrationPlan para SwiftData. Active la sincronización con CloudKit cambiando a NSPersistentCloudKitContainer o usando ModelConfiguration(cloudKitDatabase: .automatic).

Preguntas frecuentes

¿La lección «Migraciones ligeras y sincronización con CloudKit» es gratis?

Sí — el texto completo de «Migraciones ligeras y sincronización con CloudKit» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Migraciones ligeras y sincronización con CloudKit»?

Migre cambios de esquema y habilite la sincronización con CloudKit mediante NSPersistentCloudKitContainer. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Migraciones ligeras y sincronización con CloudKit»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Stack de Core Data: configuración de NSPersistentContainer
  2. @Model y ModelContext de SwiftData
  3. Relaciones y descriptores de búsqueda
  4. Migraciones ligeras y sincronización con CloudKit
← Volver a Swift Academy