Swift Macros vs Sourcery Vergleich

Native Compile-Time-Macros ab Swift 5.9

VS
Sourcery

Externes Swift-Codegenerierungstool (Stencil-basiert)

8 Min. LesezeitiOS

Punktevergleich

Diagramm wird geladen...

Detaillierte Bewertung

Detaillierte Bewertung: Swift Macros und Sourcery — Bewertungen pro Kategorie auf einer Skala von 1 bis 10
KategorieSwift MacrosSourcery
Performance
9/10
7/10
Erlernbarkeit
7/10
8/10
Ökosystem
8/10
8/10
Community
8/10
9/10
Arbeitsmarkt
8/10
6/10
Zukunftssicherheit
10/10
6/10

Vor- und Nachteile

Swift Macros

Vorteile

  • Nativ im Swift-Compiler — perfekte Integration
  • Typsicher, Syntaxfehler bereits zur Compile-Zeit
  • IDE-Unterstützung (Autovervollständigung, Navigation in Xcode)
  • Eingebaute Makros wie @Observable, @Query, #Preview
  • Weit verbreitet in SwiftUI, SwiftData, dem Testing-Framework
  • Async-sicher, Thread-sicher
  • Plattformunabhängig (iOS, macOS, Linux)
  • Zukunftssicher — offiziell von Apple gefördert

Nachteile

  • Nur Swift 5.9+ (Xcode 15+)
  • Lernkurve erfordert Kenntnisse der SwiftSyntax-API
  • Debugging schwierig — die Macro-Expansion ist nur über #expand sichtbar
  • Erhöht die Build-Zeit (beim ersten Build)

Am besten geeignet für

Neue Swift-5.9+-ProjekteSwiftUI-, SwiftData-ProjekteBibliotheks-/Framework-AutorenErstellung typsicherer DSLsOffizielles Apple-Muster (Testing-Framework)

Sourcery

Vorteile

  • Kompatibel ab Swift 5.0 (alte Projekte)
  • Externe Build-Phase — nicht zur Laufzeit
  • Stencil-Templates — intuitiv
  • Eingebaute Annotationen wie AutoMockable, AutoLenses, AutoEquatable
  • In Xcode integriert (Build-Phase-Skript)
  • Breites Angebot an Community-Templates
  • Generierter Code wird in Git eingecheckt (inspizierbar)
  • Umfangreiche Unterstützung für Mocking

Nachteile

  • Externe Abhängigkeit (im Gegensatz zu nativen Swift Macros)
  • Fügt eine Build-Phase hinzu — keine so saubere Integration
  • Generierte Dateien im Repo — Review-Rauschen
  • Einschränkungen des Swift-Typsystems (schwächer als Macros)

Am besten geeignet für

Legacy-Swift-Projekte (5.0-5.8)Umfangreiches Mocking (Testsuite)Teamübergreifende Boilerplate-ReduzierungSpezifische Generierungsmuster (Lens, Equatable)Brücke vor einer Migration

Code-Vergleich

Swift Macros
@freestanding(expression)
public macro Color(_ hex: String) -> Color = #externalMacro(
    module: "MyMacros",
    type: "ColorFromHexMacro"
)

// Verwendung:
let primary = #Color("#4A90E2")
// Compile-Time-Expansion → UIColor(red: 0.29, green: 0.56, ...)
Sourcery
// Sourcery-Annotation
// sourcery: AutoMockable
protocol UserService {
    func fetchUser(id: String) async throws -> User
    func updateUser(_ user: User) async throws
}

// Generiert (automatisch) — MockUserService.generated.swift:
// class MockUserService: UserService { ... }

Fazit

Für neue Swift-5.9+-Projekte → Macros zwingend (nativ, zukunftssicher). Legacy (5.0-5.8) → Sourcery pragmatisch. Migration: Sourcery schrittweise ausphasen, Umstieg auf Macros. Ab 2027 wird die Sourcery-Nutzung ein Nischendasein führen.

Kostenlose Beratung erhalten
FAQ

Häufig gestellte Fragen

Ja, Macros als primäres Tool + Sourcery für Mocking im hybriden Einsatz. Idealerweise ist jedoch ein einziges Tool vorzuziehen.

Verwandte Blogartikel

Alle Artikel ansehen

Verwandte Projekte

Alle Projekte ansehen
Alle Vergleiche