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
| Kategorie | Swift Macros | Sourcery |
|---|---|---|
| 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 erhaltenFAQ
Häufig gestellte Fragen
Ja, Macros als primäres Tool + Sourcery für Mocking im hybriden Einsatz. Idealerweise ist jedoch ein einziges Tool vorzuziehen.