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

Puntuación detallada: Swift Macros y Sourcery — puntuaciones por categoría sobre 10
CategoríaSwift MacrosSourcery
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 gratuita
FAQ

Preguntas frecuentes

Sí, macros como opción principal + Sourcery para mocking en un enfoque híbrido. Pero lo ideal es una sola herramienta.

Artículos de blog relacionados

Ver todos los artículos

Proyectos relacionados

Ver todos los proyectos
Todas las comparaciones