🐦Codemagic Yaml + SHOREBIRD

Documentação do Codemagic.yaml para Workflows Flutter

Introdução

Este documento descreve a estrutura do arquivo codemagic.yaml para configurar workflows de build e publicação de aplicativos Flutter no Codemagic CI/CD. O YAML fornecido abrange dois workflows: um para construir e publicar no Android e outro para construir e publicar no iOS.

Estrutura do Arquivo

O arquivo codemagic.yaml possui a seguinte estrutura geral:

workflows:
  android-workflow:
      name: Android Workflow
      instance_type: mac_mini_m1
      environment:
        groups:
          - env  # Expõe as variáveis definidas do grupo env no codemagic
        android_signing:
          - keystore-token  # Adicione a referência para a keystore do app no codemagic
        flutter: 3.19.5  # Versão do flutter para rodar a build
      scripts:
        - name: Set up local.properties
          script: |
            echo "flutter.sdk=$HOME/programs/flutter" > "$CM_BUILD_DIR/android/local.properties"
        - name: Pre-build script  # Passo de configuração pre build, onde os envs serão atribuídos e as dependências serão obtidas
          script: |
            echo $ENV | base64 --decode > .env.staging &&
            echo $ENV | base64 --decode > .env.production &&
            flutter clean &&
            flutter pub get
        - name: Build Release  # Comando para gerar o .aab do app
          script: |
            flutter build appbundle --release --flavor staging
      artifacts: # Define quais artefatos serão expostos após o final da build
        - build/**/outputs/**/*.aab
        - build/**/outputs/**/*.apk
        - build/**/outputs/**/mapping.txt
        - flutter_drive.log
      publishing:
        email: # Define quais email receberão notificações do sucesso ou falha da build
          recipients:
            - dev@loomi.com.br
          notify:
            success: true  # Define se deve notificar no sucesso da build
            failure: false  # Define se deve notificar na falha da build

    
    ios-workflow:
      name: iOS Workflow
      instance_type: mac_mini_m1
      integrations:
        app_store_connect: Reference  # Adiciona a referência para a API key do projeto do Apple Developer Portal
      environment:
        groups:
          - env  # Expõe as variáveis definidas do grupo env no codemagic
        ios_signing:
          distribution_type: app_store  # Define o tipo de distribuição do app
          bundle_identifier: br.com.loomi.example  # Bundle ID do app
        flutter: 3.19.5  # Versão do flutter para rodar a build
        xcode: latest  # Versão do xcode para rodar a build
        cocoapods: default  # Versão dos cocoapods
      scripts:
        - name: Set up code signing settings on Xcode project
          script: |
            xcode-project use-profiles
        - name: Pre-build script  # Passo de configuração pre build, onde os envs serão atribuídos e as dependências serão obtidas
          script: |
            echo $ENV | base64 --decode > .env.staging &&
            echo $ENV | base64 --decode > .env.production &&
            flutter clean &&
            flutter pub upgrade &&
            flutter pub get && cd ios &&
            flutter precache --ios &&
            pod update && pod install --repo-update
        - name: Build Release  # Comando para gerar o .ipa do app
          script: |
            flutter build ipa --release --flavor staging --export-options-plist=/Users/builder/export_options.plist
      artifacts:
        - build/ios/ipa/*.ipa
        - tmp/xcodebuild_logs/*.log
        - flutter_drive.log
      publishing:
        email: # Define quais email receberão notificações do sucesso ou falha da build
          recipients:
            - dev@loomi.com.br
          notify:
            success: true  # Define se deve notificar no sucesso da build
            failure: false  # Define se deve notificar na falha da build
        app_store_connect:
          auth: integration
          # Configuração relacionada ao TestFlight (opcional)
          # Obs: Essa ação é executada durante o pós processamento.
          submit_to_testflight: true  # Define se o app deve ser publicado no TestFlight

          # Configuração relacionada à AppStore (opcional)
          # Obs: Essa ação é executada durante o pós processamento.
          submit_to_app_store: false  # Define se o app deve ser submetido para revisão na AppStore

Android Workflow

Nome: Android Workflow

  • instance_type: Tipo da instância de build (no exemplo: mac_mini_m1).

  • environment:

    • groups: Grupos de variáveis do ambiente expostas para o Codemagic. Para definir essas variáveis você pode ir até as configurações de build do app > Environment variables no Codemagic. (CODEMAGIC_ENV_VAR)

    • android_signing: Configurações de assinatura para o Android.

      • Adicione a keystore do app em Teams > Personal Account > Code Signing Identities > Android keystores. O nome definido para a chave nesse passo será a referência a ser utilizada no yaml. (CODEMAGIC_KEYSTORE)

      • No build.gradle do app, em signingConfigs, adicione as informações da chave que serão utilizadas no processo de CI.

    • flutter: Versão do Flutter para executar a build.

  • scripts:

    • Set up local.properties: Configuração do arquivo local.properties.

    • Pre-build script: Configurações pré-build, decodificação de variáveis de ambiente e obtenção de dependências.

    • Build Release: Comando para gerar o arquivo .aab do aplicativo.

  • artifacts: Artefatos a serem expostos após a conclusão da build.

  • publishing: Configurações para notificação por e-mail.

iOS Workflow

Nome: iOS Dev

  • instance_type: Tipo da instância de build (no exemplo: mac_mini_m1).

  • integrations: Configurações específicas da integração, como a chave da API do Apple Developer Portal.

    • A chave pode ser adicionada em Teams > Personal Account > Integrations > Manage keys (Developer Portal) > Add another key. O nome definido para a chave nesse passo será a referência a ser utilizada no yaml. (CODEMAGIC_ADP_API_KEY)

    • Após a adição da chave, para que o app seja publicado no TestFlight é necessário adicionar também os iOS certificates e iOS provisioning profiles no codemagic. Acesse Teams > Personal Account > Code signing identities, e faça um fetch do certificado e dos profiles a partir da chave adicionada. (CODEMAGIC_CERT) (CODEMAGIC_PROV_PROF)

  • environment:

    • groups: Grupos de variáveis do ambiente expostas para o Codemagic.

    • ios_signing: Configurações de assinatura para o iOS.

    • flutter: Versão do Flutter para executar a build.

    • xcode: Versão do Xcode para executar a build.

    • cocoapods: Versão do CocoaPods para executar a build.

  • scripts:

    • Set up code signing settings on Xcode project: Configurações de assinatura no projeto Xcode.

    • Pre-build script: Configurações pré-build, decodificação de variáveis de ambiente e obtenção de dependências.

    • Build Release: Comando para gerar o arquivo .ipa do aplicativo.

  • artifacts: Artefatos a serem expostos após a conclusão da build.

  • publishing: Configurações para notificação por e-mail e publicação no App Store Connect.

Integração ao Code Push Shorebird

A documentaçãoarrow-up-right fornecida pelo Shorebird já é suficientemente robusta para configurar a integração contínua do serviço. No entanto, existem algumas observações a serem notadas no passo a passo desse processo.

Em versões mais recentes do shorebird, durante a build do iOS pode ocorrer o seguinte erro:

Para resolvê-lo, basta modificar o passo Set up code signing settings on Xcode project para que fique da seguinte maneira:

É importante notar também que o Shorebird não usa a versão do flutter definida no codemagic.yaml para gerar a build do app. Para definir uma versão específica para executar a build adicione --flutter-version <VERSÃO> ao comando shorebird release. As versões suportadas podem ser encontradas aquiarrow-up-right.

Abaixo segue um exemplo de codemagic.yaml com a adição do Shorebird aos workflows.

Conclusão

Este é um exemplo básico do arquivo codemagic.yaml para workflows Flutter no Codemagic. Certifique-se de adaptar as configurações de acordo com as necessidades específicas do seu projeto e dos ambientes de build.

Last updated