Sourcery für Swift: Die ultimative Anleitung zur Codegenerierung
1. Was ist Sourcery und warum braucht man es?
Sourcery ist ein leistungsstarkes Tool zur Codegenerierung für die Programmiersprache Swift, entwickelt von Krzysztof Zabłocki und seinem Team. Es ermöglicht die automatische Generierung von Boilerplate-Code basierend auf Annotationen und der Struktur Ihrer Quelldateien. Anstatt manuell wiederkehrende Implementierungen von Protokollen wie Equatable, Hashable, Codable, Mock-Objekte für Tests oder Code für Auto Layout zu schreiben, definieren Sie die Generierungsregeln einmal – und Sourcery erledigt den Rest.
Warum ist das wichtig? In realen Swift-Projekten besteht ein erheblicher Teil des Codes aus mechanischen und sich wiederholenden Mustern. Das kostet nicht nur wertvolle Entwicklungszeit, sondern ist auch eine häufige Fehlerquelle: Ein vergessenes neues Feld in Equatable führt direkt zu einem Bug. Sourcery löst dieses Problem, indem es die Routinearbeit übernimmt. Es analysiert Ihren Code (AST – Abstrakter Syntaxbaum) und generiert auf Basis von Vorlagen (Stencil oder Swift-basiert) neue Dateien. Besonders in großen Projekten mit Dutzenden oder Hunderten von Modellen, ViewControllern oder Services entfaltet Sourcery sein volles Potenzial.
Sourcery ist keine Laufzeitbibliothek – es ist ein Compile-Zeit-Werkzeug. Sie führen es als Teil des Build-Prozesses aus (über eine Build Phase in Xcode oder via SPM/Tuist), es generiert die Dateien, und diese werden dann zusammen mit dem restlichen Code kompiliert. Dieser Ansatz garantiert null Overhead zur Laufzeit und vollständige Vorhersagbarkeit.
2. Installation
Es gibt mehrere Möglichkeiten, Sourcery zu installieren. Der einfachste und empfohlene Weg ist über Homebrew:
brew install sourcery
Für Projekte, die den Swift Package Manager (SPM) verwenden, kann Sourcery als Plugin hinzugefügt werden. Häufiger wird es jedoch als separates Binary verwendet, das aus einem Build-Skript aufgerufen wird. Für die Installation über Mint (ein Paketmanager für Swift-Tools):
mint install krzysztofzablocki/Sourcery
Sie können auch ein fertiges Binary von der GitHub Releases-Seite herunterladen und in Ihren Projektordner legen. Überprüfen Sie nach der Installation, ob der Befehl verfügbar ist:
sourcery --version
3. Schnellstart – Ein minimales Arbeitsbeispiel
Erstellen wir ein einfaches Beispiel: die automatische Generierung der Equatable-Protokollimplementierung für eine Struktur.
Schritt 1: Erstellen Sie eine Quelldatei (z.B. Sources/Models/User.swift):
import Foundation
// sourcery: AutoEquatable
struct User {
let id: Int
let name: String
let email: String
}
Beachten Sie den Kommentar // sourcery: AutoEquatable – dies ist eine Annotation, die Sourcery mitteilt, dass für diese Struktur eine Equatable-Implementierung generiert werden soll.
Schritt 2: Erstellen Sie eine Vorlage (z.B. 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 %}
Schritt 3: Führen Sie Sourcery aus:
sourcery --sources Sources/Models --templates Templates --output Generated
Schritt 4: Das Ergebnis – im Ordner Generated erscheint die Datei AutoEquatable.generated.swift:
// 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
}
} Auch in der Bibliothek
CLI-Frameworks für Kotlin: Clikt, kotlinx-cli, picocli – Überblick und Vergleich
Arbeiten mit Kafka in Swift (iOS/macOS): Bibliotheken, Clients und Beispiele
Markdown-Verarbeitung in TypeScript: Bibliotheken, Parser und praktische Anwendung
LeakCanary für Kotlin: Komplettguide mit Beispielen