Pipeline CI/CD para Swift: configuración desde cero en macOS y Linux

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

Tu proyecto Swift merece un cielo automatizado: construyendo CI/CD desde cero

\n\n

Escribiste un paquete o aplicación Swift increíble. El código vuela, las pruebas pasan localmente, te sientes una estrella de rock. Pero al hacer push, comienza el infierno: «¿Se compilará en Linux?», «¿Las pruebas pasarán en macOS?», «¿Y si olvidé ejecutar SwiftLint?».

\n\n

¿Te suena familiar? Si es así, necesitas un pipeline CI/CD para Swift. Es como un piloto automático para tu código: compila, prueba, verifica el estilo e incluso despliega. En este artículo configuraremos un pipeline CI/CD Swift desde cero usando GitHub Actions. Obtendrás código funcional listo para copiar y usar hoy mismo.

\n\n
Spoiler: después de la configuración, recibirás marcas verdes en cada commit, en lugar de encanecer frente a la consola.
\n\n

Por qué CI/CD para Swift no es un lujo, sino una necesidad

\n\n

Swift vive en dos mundos: macOS (Xcode, CocoaPods, Carthage) y Linux (Vapor, SwiftNIO, proyectos de servidor). Sin CI/CD corres el riesgo de:

\n\n
    \n
  • Pasar por alto un error de compilación en otra plataforma
  • \n
  • Olvidar ejecutar el linter (y luego el código parece un campo de batalla)
  • \n
  • Perder horas en despliegues manuales
  • \n
  • Perder tiempo buscando regresiones
  • \n
\n\n

Un pipeline CI/CD Swift bien configurado resuelve todos estos problemas. Funciona 24/7, no toma café y no dice «en mi máquina funciona». ¡Allá vamos!

\n\n

Paso 1: Elegir la herramienta — GitHub Actions

\n\n

Usaremos GitHub Actions — el CI/CD integrado de GitHub, ideal para Swift. Razones:

\n\n
    \n
  • Gratuito para repositorios públicos (2000 minutos al mes)
  • \n
  • Runners macOS — permite compilar con Xcode
  • \n
  • Runners Linux — para proyectos Swift de servidor
  • \n
  • Actions predefinidas para SwiftLint, pruebas, despliegue
  • \n
\n\n

Si usas GitLab, Bitbucket o Jenkins, los principios son los mismos, pero la sintaxis YAML será diferente.

\n\n

Paso 2: Estructura básica del pipeline CI/CD para Swift

\n\n

Cualquier pipeline consta de tres etapas:

\n\n
    \n
  1. Build — compilación del proyecto (SPM o Xcode)
  2. \n
  3. Test — ejecución de pruebas unitarias
  4. \n
  5. Lint — verificación del estilo del código (opcional, pero muy recomendable)
  6. \n
\n\n

Adicionalmente, se puede agregar despliegue (por ejemplo, a un servidor o TestFlight).

\n\n

Crear el archivo .github/workflows/swift-ci.yml

\n\n

En la raíz de tu repositorio, crea la carpeta .github/workflows/ y dentro el archivo swift-ci.yml. Este es el pipeline mínimo funcional:

\n\n
name: Swift CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout code\n      uses: actions/checkout@v3\n\n    - name: Setup Swift\n      uses: swift-actions/setup-swift@v1\n      with:\n        swift-version: "5.9"\n\n    - name: Build\n      run: swift build\n\n    - name: Run tests\n      run: swift test
\n\n

Este pipeline CI/CD para Swift se ejecuta en cada push o pull request a main/develop. Compila el proyecto y ejecuta las pruebas en Ubuntu. ¿Sencillo? Sí. Pero agreguemos algo de magia.

\n\n

Paso 3: Agregar macOS y Xcode a la matriz de compilación

\n\n

Los desarrolladores Swift suelen trabajar en macOS, y la parte del servidor en Linux. Para asegurarte de que el proyecto se compile en todas partes, usamos una matriz de estrategias (matrix strategy):

\n\n
jobs:\n  build-and-test:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest]\n        swift-version: ["5.8", "5.9"]\n\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - uses: actions/checkout@v3\n\n    - name: Setup Swift\n      uses: swift-actions/setup-swift@v1\n                

Blogs

Book Recommendations