Swift Macros vs Sourcery Comparaison
Macros natives compile-time de Swift 5.9+
VS
Sourcery
Outil externe de génération de code Swift (basé sur Stencil)
8 min de lectureiOS
Comparaison des scores
Chargement du graphique...
Notation détaillée
| Catégorie | Swift Macros | Sourcery |
|---|---|---|
| Performance | 9/10 | 7/10 |
| Facilité d'apprentissage | 7/10 | 8/10 |
| Écosystème | 8/10 | 8/10 |
| Communauté | 8/10 | 9/10 |
| Marché de l'emploi | 8/10 | 6/10 |
| Pérennité | 10/10 | 6/10 |
Avantages & Inconvénients
Swift Macros
Avantages
- Natif du compilateur Swift — intégration parfaite
- Type-safe, erreurs de syntaxe détectées à la compilation
- Support IDE (autocomplétion et navigation Xcode)
- Macros intégrées comme @Observable, @Query, #Preview
- Répandu dans SwiftUI, SwiftData, le framework Testing
- Sûr en async, sûr en thread
- Agnostique de la plateforme (iOS, macOS, Linux)
- Pérenne — activement promu par Apple
Inconvénients
- Réservé à Swift 5.9+ (Xcode 15+)
- Courbe d'apprentissage nécessitant une connaissance de l'API SwiftSyntax
- Débogage difficile — nécessite #expand pour voir l'expansion de macro
- Ajoute du temps de compilation (premier build)
Idéal pour
Nouveaux projets Swift 5.9+projets SwiftUI, SwiftDataauteurs de bibliothèques/frameworkscréation de DSL type-safepattern officiel Apple (framework Testing)
Sourcery
Avantages
- Compatible Swift 5.0+ (projets anciens)
- Phase de build externe — pas au runtime
- Templates Stencil — intuitifs
- Annotations intégrées AutoMockable, AutoLenses, AutoEquatable
- Intégré à Xcode (script en phase de build)
- Large éventail de templates communautaires
- Code généré versionné dans git (inspectable)
- Support étendu pour le mocking
Inconvénients
- Dépendance externe (contrairement aux Macros natives)
- Ajoute une phase de build — intégration moins propre
- Fichiers générés dans le repo — bruit en revue de code
- Limitations du système de types Swift (plus faible que les macros)
Idéal pour
Projets Swift legacy (5.0-5.8)mocking étendu (suite de tests)réduction de boilerplate inter-équipespatterns de génération spécifiques (Lens, Equatable)pont avant migration
Comparaison de code
Swift Macros
@freestanding(expression)
public macro Color(_ hex: String) -> Color = #externalMacro(
module: "MyMacros",
type: "ColorFromHexMacro"
)
// Utilisation :
let primary = #Color("#4A90E2")
// Expansion à la compilation → UIColor(red: 0.29, green: 0.56, ...)Sourcery
// Annotation Sourcery
// sourcery: AutoMockable
protocol UserService {
func fetchUser(id: String) async throws -> User
func updateUser(_ user: User) async throws
}
// Généré (auto) — MockUserService.generated.swift :
// class MockUserService: UserService { ... }Conclusion
Nouveau projet Swift 5.9+ → les Macros s'imposent (natif, pérenne). Legacy (5.0-5.8) → Sourcery reste pragmatique. Migration : sortir progressivement Sourcery, passer aux Macros. En 2027, l'usage de Sourcery deviendra une niche.
Obtenir une consultation gratuiteFAQ
Questions fréquentes
Oui, Macros en priorité + Sourcery pour le mocking en hybride. Mais l'idéal reste un seul outil.