CI/CD para proyectos Swift: configuración de GitHub Actions

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

Introducción a CI/CD para Proyectos Swift

El desarrollo moderno de aplicaciones móviles y de escritorio en Swift requiere no solo código de alta calidad, sino también un proceso confiable de integración y entrega. CI/CD (Integración Continua / Despliegue Continuo) es una práctica que permite automatizar la compilación, las pruebas y el despliegue de aplicaciones. Para proyectos Swift, especialmente para iOS y macOS, GitHub Actions es una de las herramientas más convenientes y populares.

En este artículo, recorreremos cómo configurar un pipeline completo de CI/CD para proyectos Swift usando GitHub Actions. Aprenderás a automatizar la compilación, ejecutar pruebas unitarias e incluso enviar la aplicación a TestFlight o a la Mac App Store.



¿Por qué GitHub Actions para Swift?

GitHub Actions proporciona capacidades integradas para trabajar con el ecosistema Apple. A diferencia de servicios de terceros, está completamente integrado con el repositorio y no requiere configuración adicional de plugins. Las principales ventajas son:

  • Minutos gratuitos para repositorios públicos (hasta 2000 minutos por mes)
  • Acciones listas para Xcode, SwiftLint, CocoaPods y SPM
  • Soporte para runners macOS con Xcode preinstalado
  • Configuración flexible mediante archivos YAML


Configuración Básica de CI para un Proyecto Swift

Comencemos con un pipeline simple que compile el proyecto y ejecute pruebas en cada push a la rama main o cuando se cree un Pull Request.

Crea un archivo .github/workflows/swift-ci.yml en la raíz del repositorio:

name: Swift CI

on: push: branches: [ main ] pull_request: branches: [ main ]

jobs: build-and-test: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Seleccionar versión de Xcode run: sudo xcode-select -s /Applications/Xcode_15.2.app - name: Compilar run: xcodebuild build -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty - name: Ejecutar pruebas run: xcodebuild test -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty

Este flujo de trabajo realiza dos pasos principales: compilar el proyecto y ejecutar pruebas. Observa el uso de xcpretty — una utilidad que formatea la salida de Xcodebuild en un formato legible.



Verificación Adicional de Calidad de Código

Agreguemos análisis estático usando SwiftLint. Esto ayudará a mantener un estilo de código consistente dentro del equipo:

jobs:  lint:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: SwiftLint      uses: norio-nomura/action-swiftlint@3.2.1      with:        args: --strict

Ahora, en cada commit, el código será verificado contra las reglas de SwiftLint. Si se encuentran violaciones, el flujo de trabajo fallará con un error.



CI/CD Avanzado: Pruebas y Despliegue

Después de la configuración básica, puedes pasar a escenarios más complejos. Consideremos un pipeline que incluya:

  • Compilación para múltiples simuladores
  • Pruebas con cobertura de código
  • Publicación automática en TestFlight (para iOS) o en la Mac App Store


Compilación y Pruebas con Cobertura

Para recopilar datos de cobertura de pruebas, usa la bandera -enableCodeCoverage YES:

jobs:  test-coverage:    runs-on: macos-latest    steps:    - uses: actions/checkout@v4        - name: Pruebas con cobertura      run: |        xcodebuild test \          -scheme MyApp \          -sdk iphonesimulator \          -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' \          -enableCodeCoverage YES \          -derivedDataPath Build/DerivedData | xcpretty        - name: Subir cobertura a Codecov      uses: codecov/cod                

Blogs

Book Recommendations