Monorepo avec Swift : organisation du code pour débutants

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

Monorepo avec Swift : organisation du code pour débutants



Lorsque vous commencez à développer des applications en Swift pour iOS ou macOS, tôt ou tard vous vous posez la question : comment organiser le code pour qu'il ne devienne pas chaotique ? Surtout si vous avez plusieurs projets (par exemple, une application iOS, une extension watchOS et une partie serveur avec Vapor). L'une des approches modernes est le monorepo. Dans cet article, nous allons voir ce qu'est un monorepo, pourquoi il est utile dans le développement Swift et comment l'organiser en pratique.



Qu'est-ce qu'un monorepo et pourquoi en a-t-on besoin ?



Un monorepo est une approche de gestion du code où tous les projets, bibliothèques et modules sont stockés dans un seul dépôt (par exemple, Git). Contrairement aux multi-repos, où chaque projet vit dans son propre dépôt séparé, le monorepo regroupe tout au même endroit.



Pour les développeurs Swift, cela offre plusieurs avantages :



  • Version unique des dépendances — vous savez exactement quelle version de la bibliothèque est utilisée dans tous les projets.
  • Refactorisation simplifiée — la modification d'une API dans une bibliothèque est immédiatement visible dans tous les projets dépendants.
  • Paramètres communs — un seul SwiftLint, une seule configuration CI/CD, des règles de formatage uniques.
  • Recherche facile — tout est au même endroit, pas besoin de passer d'un dépôt à l'autre.


Cependant, il y a aussi des nuances : un monorepo nécessite de la discipline et une structure appropriée, sinon il se transforme en « dépotoir ». Mais pour les débutants, c'est un excellent moyen d'apprendre à organiser le code.



Structure d'un monorepo pour les projets Swift



Supposons que vous créiez une application iOS avec des modules communs. Une structure typique de monorepo en Swift pourrait ressembler à ceci :



MyMonorepo/├── Apps/│   ├── iOSApp/          # Application iOS principale│   │   ├── Sources/│   │   ├── Resources/│   │   └── Package.swift│   └── macOSApp/        # Version macOS│       ├── Sources/│       └── Package.swift├── Packages/│   ├── Core/            # Utilitaires communs (réseau, journalisation)│   │   ├── Sources/│   │   └── Package.swift│   ├── UIComponents/    # Composants UI réutilisables│   │   ├── Sources/│   │   └── Package.swift│   └── Analytics/       # Module d'analyse│       ├── Sources/│       └── Package.swift├── Scripts/             # Scripts auxiliaires├── .swiftlint.yml       # Configuration unique du linter├── Package.swift        # Manifeste racine (optionnel)└── README.md


Notez que nous utilisons ici Swift Package Manager (SPM) — l'outil standard pour la gestion des dépendances en Swift. Chaque module est un Swift Package distinct qui peut être connecté aux applications.



Comment créer un monorepo en Swift : guide étape par étape



Créons un monorepo simple avec deux modules et une application. Suivez les étapes suivantes dans le terminal :



Étape 1 : Créez le répertoire racine et initialisez Git



mkdir MyMonorepocd MyMonorepogit init


Étape 2 : Créez la structure des dossiers



mkdir -p Apps/iOSApp/Sourcesmkdir -p Packages/Core/Sourcesmkdir -p Packages/UIComponents/Sources


Étape 3 : Créez le Package.swift pour le module Core



Créez le fichier Packages/Core/Package.swift :



// swift-tools-version:5.9import PackageDescription

let package = Package( name: "Core", platforms: [ .iOS(.v16), .macOS(.v13) ], products: [ .library( name: "Core", targets: ["Core"]) ], targets: [ .target( name: "Core", path: "Sources") ])


Étape 4 : Écrivez un code simple dans le module Core



Créez Packages/Core/Source

Blogs

Book Recommendations