CI/CD para projetos Swift: GitHub Actions do A ao Z

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

\n

O desenvolvimento moderno de aplicativos móveis e desktop em Swift exige não apenas código de qualidade, mas também um processo confiável de integração e entrega de mudanças. Continuous Integration (CI) e Continuous Delivery (CD) são práticas que permitem automatizar a compilação, os testes e a implantação de aplicativos. GitHub Actions é uma ferramenta integrada do GitHub que é ideal para projetos Swift que rodam em iOS e macOS.

\n

Neste artigo, abordaremos o ciclo completo de configuração de CI/CD para Swift: desde a configuração básica até a implantação na App Store e no TestFlight. Você aprenderá como acelerar o desenvolvimento, evitar o "fator humano" e garantir a estabilidade do seu aplicativo.

\n\n

Componentes principais do CI/CD para Swift

\n

Antes de prosseguir com a configuração, é importante entender em quais etapas consiste o pipeline para projetos Swift:

\n
    \n
  • Compilação (Build) — compilação do projeto usando Xcode ou xcodebuild.
  • \n
  • Testes (Test) — execução de testes unitários e testes de UI.
  • \n
  • Linting (Lint) — verificação do estilo do código (por exemplo, com SwiftLint).
  • \n
  • Arquivamento (Archive) — criação do arquivo .ipa ou .app para implantação.
  • \n
  • Implantação (Deploy) — envio da compilação para o TestFlight ou App Store.
  • \n
\n

O GitHub Actions permite combinar todas essas etapas em um único arquivo YAML, que é armazenado no repositório.

\n\n

Configuração do GitHub Actions para Swift: guia passo a passo

\n\n

1. Criando o arquivo de workflow

\n

Crie a pasta .github/workflows na raiz do repositório e adicione o arquivo ci.yml:

\n
name: Swift CI/CD\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: macos-latest\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Select Xcode version\n      run: sudo xcode-select -s /Applications/Xcode_15.0.app/Contents/Developer\n\n    - name: Build and test\n      run: |\n        xcodebuild clean test \\\n          -project YourApp.xcodeproj \\\n          -scheme YourApp \\\n          -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.0' \\\n          -resultBundlePath TestResults \\\n          CODE_SIGNING_ALLOWED=NO\n    - name: Upload test results\n      uses: actions/upload-artifact@v4\n      with:\n        name: test-results\n        path: TestResults.xcresult
\n

Este workflow é executado a cada push para main e develop, bem como em pull requests. Ele realiza uma compilação limpa e executa todos os testes no simulador do iPhone 15 com iOS 17.

\n\n

2. Adicionando linting e análise estática

\n

Para manter um estilo de código consistente, adicione uma etapa com SwiftLint:

\n
- name: Run SwiftLint\n  run: |\n    brew install swiftlint\n    swiftlint --strict
\n

Se você usa SPM (Swift Package Manager), pode adicionar análise estática com swift analyze (disponível no Swift 5.9+):

\n
- name: Static analysis\n  run: swift analyze --strict
\n\n

3. Configurando CD: implantação no TestFlight

\n

Para entrega automática de compilações ao TestFlight, serão necessários certificados e perfis de provisionamento. A maneira mais segura é usar GitHub Secrets para armazenar as chaves:

\n
jobs:\n  deploy:\n    needs: build-and-test\n    runs-on: macos-latest\n    if: github.ref == 'refs/heads/main'\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Install provisioning profile\n      env:\n        PROVISIONING_PROFILE: ${{ secrets.PROVISIONING_PROFILE_BASE64 }}\n      run: |\n        echo "$PROVISIONING_PROFILE" | base64 --decode > ~/Library/MobileDevice/Provisioning\\ Profiles/profile.mobileprovision\n\n    - name: Build and archive\n      run: |\n        xcodebuild archive \\\n          -project YourApp.xcodeproj \\\n          -scheme YourApp \\\n          -archivePath $                

Blogs

Book Recommendations