Migrations de bases de données en Swift : outils et approches pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Migrations de bases de données en Swift (iOS/macOS) : aperçu des outils et exemples

\n\n

Les migrations de bases de données sont le processus de modification contrôlée du schéma de données (tables, index, relations) sans perte des informations existantes. Dans l'écosystème Swift pour les plateformes Apple (iOS, macOS, watchOS, tvOS), les développeurs utilisent plusieurs approches : de Core Data intégré aux bibliothèques tierces comme GRDB.swift et Fluent. Dans cet article, nous analyserons les outils clés, leurs fonctionnalités et fournirons des exemples pratiques de code.

\n\n

1. Core Data et migrations (légères et manuelles)

\n\n

Core Data est le framework standard d'Apple pour travailler avec un modèle objet. Les migrations se divisent en deux types :

\n
    \n
  • Migration légère (Lightweight Migration) — automatique, si les modifications n'impliquent pas de transformations complexes (ajout d'attributs, suppression, renommage avec mapping model).
  • \n
  • Migration manuelle (Manual Migration) — nécessaire lorsqu'il faut modifier les types de données, fusionner des entités ou effectuer des transformations personnalisées.
  • \n
\n\n

Exemple de configuration d'une migration légère en Swift :

\n
import CoreData\n\nlazy var persistentContainer: NSPersistentContainer = {\n    let container = NSPersistentContainer(name: "MyDataModel")\n    let description = container.persistentStoreDescriptions.first\n    description?.shouldMigrateStoreAutomatically = true\n    description?.shouldInferMappingModelAutomatically = true\n    container.loadPersistentStores { _, error in\n        if let error = error {\n            fatalError("Erreur de chargement de Core Data : \\(error)")\n        }\n    }\n    return container\n}()\n
\n\n

2. GRDB.swift — bibliothèque SQLite moderne avec migrations

\n\n

GRDB.swift est une bibliothèque puissante pour travailler avec SQLite, qui propose un mécanisme de migration intégré. Elle permet de versionner le schéma de la base de données et d'effectuer les modifications de manière séquentielle.

\n\n

Installation via Swift Package Manager :

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

Exemple de migration avec GRDB.swift :

\n
import GRDB\n\nvar migrator = DatabaseMigrator()\n\n// Migration 1 : création de la table\nmigrator.registerMigration("v1_create_users") { db in\n    try db.create(table: "users") { t in\n        t.autoIncrementedPrimaryKey("id")\n        t.column("name", .text).notNull()\n        t.column("email", .text).unique()\n    }\n}\n\n// Migration 2 : ajout d'une colonne\nmigrator.registerMigration("v2_add_age") { db in\n    try db.alter(table: "users") { t in\n        t.add(column: "age", .integer).defaults(to: 0)\n    }\n}\n\n// Application des migrations au démarrage de l'application\nlet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")\ntry migrator.migrate(dbQueue)\n
\n\n

3. Fluent (Vapor) — ORM pour Swift côté serveur

\n\n

Fluent est un ORM faisant partie du framework Vapor (Swift côté serveur pour macOS). Les migrations dans Fluent sont décrites comme des classes implémentant le protocole Migration.

\n\n

Exemple de migration pour Fluent 4 :

\n
import Fluent\n\nstruct CreateUser: Migration {\n    func prepare(on database: Database) -> EventLoopFuture<Void> {\n        database.schema("users")\n            .id()\n            .field("name", .string, .required)\n            .field("email", .string, .required).unique(on: "email")\n            .create()\n    }\n    \n    func revert(on database: Database) -> EventLoopFuture<Void> {\n        database.schema("users").delete()\n    }\n}\n\n// Enregistrement dans configure.swift\napp.migrations.add(CreateUser())\ntry app.autoMigrate().wait()\n
\n\n

4. Comparaison des outils

\n\n
    \n
  • Core Data — adapté aux applications Apple liées au modèle objet. Les migrations sont souvent automatiques, mais les scénarios complexes nécessitent un mappin

Recommendations