Swift Macros vs Sourcery Comparación
Macros nativos de Swift 5.9+ en tiempo de compilación
VS
Sourcery
Herramienta externa de generación de código Swift (basada en Stencil)
8 min de lecturaiOS
Comparación de puntuaciones
Cargando gráfico...
Puntuación detallada
| Categoría | Swift Macros | Sourcery |
|---|---|---|
| Rendimiento | 9/10 | 7/10 |
| Facilidad de aprendizaje | 7/10 | 8/10 |
| Ecosistema | 8/10 | 8/10 |
| Comunidad | 8/10 | 9/10 |
| Mercado laboral | 8/10 | 6/10 |
| A prueba de futuro | 10/10 | 6/10 |
Pros y contras
Swift Macros
Pros
- Nativo del compilador de Swift — integración perfecta
- Type-safe, errores de sintaxis detectados en tiempo de compilación
- Soporte de IDE (autocompletado y navegación en Xcode)
- Macros integrados como @Observable, @Query, #Preview
- Uso extendido en SwiftUI, SwiftData y el framework Testing
- Seguro para async, seguro para hilos
- Multiplataforma (iOS, macOS, Linux)
- A prueba de futuro — promovido oficialmente por Apple
Contras
- Solo Swift 5.9+ (Xcode 15+)
- Curva de aprendizaje que requiere conocer la API de SwiftSyntax
- Depuración difícil — hay que usar #expand para ver la expansión del macro
- Añade tiempo a la compilación (primer build)
Ideal para
Proyectos nuevos en Swift 5.9+Proyectos con SwiftUI y SwiftDataAutores de librerías/frameworksCrear DSLs type-safePatrón oficial de Apple (framework Testing)
Sourcery
Pros
- Compatible con Swift 5.0+ (proyectos antiguos)
- Fase de compilación externa — no en tiempo de ejecución
- Plantillas Stencil — intuitivas
- Anotaciones integradas: AutoMockable, AutoLenses, AutoEquatable
- Integrado en Xcode (script de build phase)
- Amplia biblioteca de plantillas de la comunidad
- El código generado se guarda en git (se puede inspeccionar)
- Soporte extenso para mocking
Contras
- Dependencia externa (frente a Swift Macros nativo)
- Añade una fase de build — sin integración tan limpia
- Los archivos generados están en el repo — ruido en las revisiones
- Limitaciones del sistema de tipos de Swift (más débil que los macros)
Ideal para
Proyectos Swift heredados (5.0-5.8)Mocking extenso (suites de test)Reducción de boilerplate entre equiposPatrones de generación específicos (Lens, Equatable)Puente previo a una migración
Comparación de código
Swift Macros
@freestanding(expression)
public macro Color(_ hex: String) -> Color = #externalMacro(
module: "MyMacros",
type: "ColorFromHexMacro"
)
// Uso:
let primary = #Color("#4A90E2")
// Expansión en tiempo de compilación → UIColor(red: 0.29, green: 0.56, ...)Sourcery
// Anotación de Sourcery
// sourcery: AutoMockable
protocol UserService {
func fetchUser(id: String) async throws -> User
func updateUser(_ user: User) async throws
}
// Generado (automático) — MockUserService.generated.swift:
// class MockUserService: UserService { ... }Conclusión
Proyecto Swift 5.9+ nuevo → Macros es obligatorio (nativo, a prueba de futuro). Legado (5.0-5.8) → Sourcery es pragmático. Migración: retirar Sourcery gradualmente y pasar a Macros. En 2027 el uso de Sourcery será de nicho.
Solicita una consultoría gratuitaFAQ
Preguntas frecuentes
Sí, macros como opción principal + Sourcery para mocking en un enfoque híbrido. Pero lo ideal es una sola herramienta.