Sourcery Swift: guía completa con ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Sourcery para Swift: Guía completa de generación de código

1. ¿Qué es y para qué sirve?

Sourcery es una potente herramienta de generación de código para el lenguaje Swift, creada por Krzysztof Zabłocki y su equipo. Permite generar automáticamente código repetitivo (boilerplate code) basándose en anotaciones y la estructura de tus archivos fuente. En lugar de escribir manualmente implementaciones repetitivas de protocolos como Equatable, Hashable, Codable, objetos mock para pruebas o código para Auto Layout, describes las reglas de generación una vez y Sourcery hace el resto.

¿Para qué sirve? En proyectos reales de Swift, una gran parte del código es mecánica y repetitiva. Esto no solo consume tiempo del desarrollador, sino que también es fuente de errores: olvidaste agregar un nuevo campo en Equatable y obtienes un bug. Sourcery resuelve este problema encargándose de la rutina. Analiza tu código (AST — árbol de sintaxis abstracta) y, basándose en plantillas (Stencil o basadas en Swift), genera nuevos archivos. Esto es especialmente útil en proyectos grandes con decenas o cientos de modelos, ViewControllers o servicios.

Sourcery no es una biblioteca en tiempo de ejecución, sino una herramienta en tiempo de compilación. Lo ejecutas como parte del proceso de compilación (a través de Build Phase en Xcode o mediante SPM/Tuist), genera archivos, y luego esos archivos se compilan junto con el resto del código. Este enfoque garantiza cero overhead en tiempo de ejecución y total previsibilidad.

2. Instalación

Existen varias formas de instalar Sourcery. La más sencilla y recomendada es a través de Homebrew:

brew install sourcery

Para proyectos que usan Swift Package Manager (SPM), se puede agregar Sourcery como plugin. Sin embargo, lo más común es usarlo como un binario independiente, invocado desde un script de compilación. Para instalarlo mediante Mint (gestor de paquetes para herramientas Swift):

mint install krzysztofzablocki/Sourcery

También puedes descargar el binario listo desde GitHub Releases y colocarlo en la carpeta de tu proyecto. Después de la instalación, verifica que el comando esté disponible:

sourcery --version

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear un ejemplo sencillo: generación automática de la implementación del protocolo Equatable para una estructura.

Paso 1: Crea un archivo con el código fuente (por ejemplo, Sources/Models/User.swift):

import Foundation

// sourcery: AutoEquatable
struct User {
    let id: Int
    let name: String
    let email: String
}

Observa el comentario // sourcery: AutoEquatable — es una anotación que le indica a Sourcery que debe generar la implementación de Equatable para esta estructura.

Paso 2: Crea la plantilla (por ejemplo, Templates/AutoEquatable.stencil):

// Generado por Sourcery
// swiftlint:disable all

{% for type in types.all where type.annotations.AutoEquatable %}
extension {{ type.name }}: Equatable {
    static func == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {
        {% for variable in type.storedVariables %}
        {% if not forloop.first %} && {% endif %}lhs.{{ variable.name }} == rhs.{{ variable.name }}
        {% endfor %}
    }
}
{% endfor %}

Paso 3: Ejecuta Sourcery:

sourcery --sources Sources/Models --templates Templates --output Generated

Paso 4: Resultado — en la carpeta Generated aparecerá el archivo AutoEquatable.generated.swift:

// Generado por Sourcery
// swiftlint:disable all

extension User: Equatable                    

Recommendations