CI/CD para projetos Swift: configuração do GitHub Actions

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao CI/CD para Projetos Swift

O desenvolvimento moderno de aplicativos móveis e desktop em Swift requer não apenas código de qualidade, mas também um processo confiável de integração e entrega. CI/CD (Continuous Integration / Continuous Deployment) é uma prática que permite automatizar a construção, teste e implantação de aplicativos. Para projetos Swift, especialmente para iOS e macOS, o GitHub Actions é uma das ferramentas mais convenientes e populares.

Neste artigo, vamos abordar como configurar um pipeline CI/CD completo para projetos Swift usando GitHub Actions. Você aprenderá como automatizar a construção, executar testes unitários e até mesmo enviar o aplicativo para o TestFlight ou para a Mac App Store.



Por que GitHub Actions para Swift?

O GitHub Actions oferece recursos integrados para trabalhar com o ecossistema Apple. Ao contrário de serviços de terceiros, ele é totalmente integrado ao repositório e não requer configuração adicional de plugins. As principais vantagens são:

  • Minutos gratuitos para repositórios públicos (até 2000 minutos por mês)
  • Ações prontas para Xcode, SwiftLint, CocoaPods e SPM
  • Suporte a runners macOS com Xcode pré-instalado
  • Configuração flexível através de arquivos YAML


Configuração básica de CI para projeto Swift

Vamos começar com um pipeline simples que irá construir o projeto e executar testes a cada push no branch main ou ao criar um Pull Request.

Crie o arquivo .github/workflows/swift-ci.yml na raiz do repositório:

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: Select Xcode version run: sudo xcode-select -s /Applications/Xcode_15.2.app - name: Build run: xcodebuild build -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty - name: Run tests run: xcodebuild test -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty

Este workflow executa duas etapas principais: a construção do projeto e a execução dos testes. Observe o uso do xcpretty — um utilitário que formata a saída do Xcodebuild em um formato legível.



Verificação adicional de qualidade de código

Vamos adicionar análise estática com SwiftLint. Isso ajudará a manter um estilo de código consistente na equipe:

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

Agora, a cada commit, será verificado se o código está em conformidade com as regras do SwiftLint. Se forem encontradas violações, o workflow será encerrado com erro.



CI/CD Avançado: Testes e Deploy

Após a configuração básica, podemos passar para cenários mais complexos. Vamos considerar um pipeline que inclui:

  • Construção para múltiplos simuladores
  • Testes com cobertura de código
  • Publicação automática no TestFlight (para iOS) ou na Mac App Store


Construção e testes com cobertura

Para coletar dados de cobertura de testes, use a flag -enableCodeCoverage YES:

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

Blogs

Book Recommendations