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

Notation détaillée: Swift Macros et Sourcery — notes sur 10, catégorie par catégorie
CatégorieSwift MacrosSourcery
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 gratuite
FAQ

Questions fréquentes

Oui, Macros en priorité + Sourcery pour le mocking en hybride. Mais l'idéal reste un seul outil.

Articles de blog associés

Voir tous les articles

Projets associés

Voir tous les projets
Toutes les comparaisons