Migrações de banco de dados em Swift: ferramentas e abordagens para iOS/macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Migrações de banco de dados em Swift (iOS/macOS): visão geral de ferramentas e exemplos



Migrações de banco de dados são o processo de alteração controlada do esquema de dados (tabelas, índices, relacionamentos) sem perda de informações já existentes. No ecossistema Swift para plataformas Apple (iOS, macOS, watchOS, tvOS), os desenvolvedores usam várias abordagens: desde o Core Data integrado até bibliotecas de terceiros, como GRDB.swift e Fluent. Neste artigo, analisaremos as principais ferramentas, seus recursos e forneceremos exemplos práticos de código.



1. Core Data e migrações (leves e manuais)



Core Data é o framework padrão da Apple para trabalhar com modelo de objetos. As migrações são divididas em dois tipos:

  • Migração leve (Lightweight Migration) — automática, se as alterações não envolverem transformações complexas (adição de atributos, exclusão, renomeação com mapping model).
  • Migração manual (Manual Migration) — necessária quando é preciso alterar tipos de dados, mesclar entidades ou realizar transformações personalizadas.


Exemplo de configuração de migração leve em Swift:

import CoreData

lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "MyDataModel") let description = container.persistentStoreDescriptions.first description?.shouldMigrateStoreAutomatically = true description?.shouldInferMappingModelAutomatically = true container.loadPersistentStores { _, error in if let error = error { fatalError("Erro ao carregar Core Data: \\(error)") } } return container}()


2. GRDB.swift — biblioteca SQLite moderna com migrações



GRDB.swift é uma biblioteca poderosa para trabalhar com SQLite, que oferece um mecanismo de migração integrado. Ela permite versionar o esquema do banco de dados e executar alterações sequencialmente.



Instalação via Swift Package Manager:

// Package.swiftdependencies: [    .package(url: "https://github.com/groue/GRDB.swift.git", from: "6.0.0")]


Exemplo de migração com GRDB.swift:

import GRDB

var migrator = DatabaseMigrator()

// Migração 1: criação da tabelamigrator.registerMigration("v1_create_users") { db in try db.create(table: "users") { t in t.autoIncrementedPrimaryKey("id") t.column("name", .text).notNull() t.column("email", .text).unique() }}

// Migração 2: adição de colunamigrator.registerMigration("v2_add_age") { db in try db.alter(table: "users") { t in t.add(column: "age", .integer).defaults(to: 0) }}

// Aplicação das migrações na inicialização do aplicativolet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")try migrator.migrate(dbQueue)


3. Fluent (Vapor) — ORM para Swift no servidor



Fluent é um ORM que faz parte do framework Vapor (Swift no servidor para macOS). As migrações no Fluent são descritas como classes que implementam o protocolo Migration.



Exemplo de migração para Fluent 4:

import Fluent

struct CreateUser: Migration { func prepare(on database: Database) -> EventLoopFuture<Void> { database.schema("users") .id() .field("name", .string, .required) .field("email", .string, .required).unique(on: "email") .create() } func revert(on database: Database) -> EventLoopFuture<Void> { database.schema("users").delete() }}

// Registro em configure.swiftapp.migrations.add(CreateUser())try app.autoMigrate().wait()


4. Comparação de ferramentas



  • Core Data — adequado para aplicativos Apple com vínculo ao modelo de objetos. As migrações são frequentemente automáticas, mas cenários complexos exigem mappin

Recommendations