Sourcery Swift : guide complet avec exemples de code

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

Sourcery Swift : Guide complet de génération de code

1. Qu'est-ce que Sourcery et pourquoi l'utiliser ?

Sourcery est un puissant outil de génération de code pour le langage Swift, créé par Krzysztof Zabłocki et son équipe. Il permet de générer automatiquement du code répétitif (boilerplate code) à partir d'annotations et de la structure de vos fichiers sources. Au lieu d'écrire manuellement des implémentations redondantes de protocoles comme Equatable, Hashable, Codable, des objets mock pour les tests ou du code pour Auto Layout, vous décrivez les règles de génération une seule fois, et Sourcery fait tout le reste.

Pourquoi en avez-vous besoin ? Dans les projets Swift réels, une grande partie du code est mécanique et répétitive. Cela fait non seulement perdre du temps aux développeurs, mais constitue aussi une source d'erreurs : oublier d'ajouter un nouveau champ dans Equatable et c'est le bug assuré. Sourcery résout ce problème en prenant en charge les tâches fastidieuses. Il analyse votre code (AST — arbre syntaxique abstrait) et, sur la base de templates (Stencil ou basés sur Swift), génère de nouveaux fichiers. C'est particulièrement utile dans les grands projets comportant des dizaines, voire des centaines de modèles, ViewController ou services.

Sourcery n'est pas une bibliothèque d'exécution — c'est un outil de compilation. Vous l'exécutez dans le cadre de votre processus de build (via une Build Phase dans Xcode ou via SPM/Tuist), il génère des fichiers, puis ces fichiers sont compilés avec le reste du code. Cette approche garantit un surcoût nul à l'exécution et une prévisibilité totale.

2. Installation

Il existe plusieurs façons d'installer Sourcery. La plus simple et recommandée est via Homebrew :

brew install sourcery

Pour les projets utilisant Swift Package Manager (SPM), vous pouvez ajouter Sourcery en tant que plugin. Cependant, on l'utilise le plus souvent comme un binaire séparé, appelé depuis un script de build. Pour une installation via Mint (gestionnaire de paquets pour les outils Swift) :

mint install krzysztofzablocki/Sourcery

Vous pouvez également télécharger le binaire prêt à l'emploi depuis GitHub Releases et le placer dans le dossier de votre projet. Après l'installation, vérifiez que la commande est disponible :

sourcery --version

3. Démarrage rapide — un exemple minimal fonctionnel

Créons un exemple simple : la génération automatique de l'implémentation du protocole Equatable pour une structure.

Étape 1 : Créez un fichier source (par exemple, Sources/Models/User.swift) :

import Foundation

// sourcery: AutoEquatable
struct User {
    let id: Int
    let name: String
    let email: String
}

Remarquez le commentaire // sourcery: AutoEquatable — c'est une annotation qui indique à Sourcery de générer l'implémentation d'Equatable pour cette structure.

Étape 2 : Créez un template (par exemple, Templates/AutoEquatable.stencil) :

// Generated by Sourcery
// swiftlint:disable all

{% for type in types.all where type.annotations.AutoEquatable %}
extension {{ type.name }}: Equatable {
    static func == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {
        {% for variable in type.storedVariables %}
        {% if not forloop.first %} && {% endif %}lhs.{{ variable.name }} == rhs.{{ variable.name }}
        {% endfor %}
    }
}
{% endfor %}

Étape 3 : Lancez Sourcery :

sourcery --sources Sources/Models --templates Templates --output Generated

Étape 4 : Résultat — dans le dossier Generated, un fichier AutoEquatable.generated.swift apparaît :

// Generated by Sourcery
// swiftlint:disable all

extension User: Equatable {
    static func == (lhs: User, rhs: User) -> Bool {
        lhs.id == rhs.id && lhs.name == rhs.name && lhs.email == rhs.email
    }
}

Recommendations