0Pricing
Swift Academy · Aula

Migrações leves e sincronização com CloudKit

Migre alterações de esquema e ative a sincronização com CloudKit usando NSPersistentCloudKitContainer.

Migrações leves e sincronização com CloudKit é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Por que fazer migrações?

Quando você altera seu modelo do Core Data ou do SwiftData (adicionando, renomeando ou removendo atributos), precisa migrar os armazenamentos existentes.

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

Migração leve no Core Data

O Core Data pode inferir automaticamente migrações simples (adicionar, renomear ou remover atributos) sem um modelo de mapeamento.

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

Histórico de versões no .xcdatamodeld

Crie uma nova versão do modelo no Xcode: Editor → Adicionar versão do modelo. Defina a versão atual como a nova versão.

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

Versionamento de esquema no SwiftData

Use VersionedSchema e SchemaMigrationPlan para gerenciar as versões do modelo 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 etapas de migração entre versões em um SchemaMigrationPlan para orientar o SwiftData durante as atualizações.

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 migração personalizada

Para migrações complexas (transformações de dados), use uma etapa .custom com closures willMigrate e didMigrate.

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

NSPersistentCloudKitContainer

Substitua NSPersistentContainer por NSPersistentCloudKitContainer para ativar a sincronização com o CloudKit.

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

Requisitos do CloudKit

A sincronização com o CloudKit exige: uma conta do iCloud conectada, a autorização do CloudKit e um contêiner do CloudKit configurado no portal do desenvolvedor.

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

SwiftData com CloudKit

Passe um ModelConfiguration com cloudKitDatabase para ativar a sincronização com o CloudKit no SwiftData.

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

Lidando com conflitos de sincronização

O Core Data CloudKit resolve conflitos usando uma política de último registro vencedor. Projete os modelos para minimizar a contenção causada por gravações concorrentes.

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

Testando migrações

Teste as migrações em uma cópia do armazenamento de produção antes de distribuir o app, para detectar problemas antes que afetem os usuários.

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

Monitorando migrações

Observe as notificações de migração do Core Data para mostrar a interface de progresso durante migrações longas.

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

Verificação rápida

Qual subclasse de NSPersistentContainer ativa a sincronização automática com o CloudKit?

Recapitulação da lição

Ative a migração leve com shouldMigrateStoreAutomatically para alterações simples. Use VersionedSchema + SchemaMigrationPlan no SwiftData. Ative a sincronização com o CloudKit substituindo o contêiner por NSPersistentCloudKitContainer ou usando ModelConfiguration(cloudKitDatabase: .automatic).

Perguntas Frequentes

A aula “Migrações leves e sincronização com CloudKit” é grátis?

Sim — o texto completo de “Migrações leves e sincronização com CloudKit” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Migrações leves e sincronização com CloudKit”?

Migre alterações de esquema e ative a sincronização com CloudKit usando NSPersistentCloudKitContainer. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Migrações leves e sincronização com CloudKit”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Pilha do Core Data: configuração de NSPersistentContainer
  2. SwiftData @Model e ModelContext
  3. Relacionamentos e Fetch Descriptors
  4. Migrações leves e sincronização com CloudKit
← Voltar para Swift Academy