{"meta":{"title":"Instalar um certificado da Apple em executores do macOS para desenvolvimento do Xcode","intro":"Saiba como assinar apps do Xcode em um fluxo de trabalho de integração contínua (CI) instalando um certificado de assinatura de código da Apple nos executores GitHub Actions.","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/actions","title":"GitHub Actions"},{"href":"/pt/actions/how-tos","title":"Instruções"},{"href":"/pt/actions/how-tos/deploy","title":"Implantar"},{"href":"/pt/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Implantar em plataformas de terceiros"},{"href":"/pt/actions/how-tos/deploy/deploy-to-third-party-platforms/sign-xcode-applications","title":"Assinar aplicativos Xcode"}],"documentType":"article"},"body":"# Instalar um certificado da Apple em executores do macOS para desenvolvimento do Xcode\n\nSaiba como assinar apps do Xcode em um fluxo de trabalho de integração contínua (CI) instalando um certificado de assinatura de código da Apple nos executores GitHub Actions.\n\n## Pré-requisitos\n\nVocê deve estar familiarizado com YAML e a sintaxe para GitHub Actions. Para saber mais, veja:\n\n* [Escrevendo fluxos de trabalho](/pt/actions/how-tos/write-workflows)\n* [Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/actions/reference/workflows-and-actions/workflow-syntax)\n\nVocê deve ter um entendimento sobre construção e assinatura de aplicativos no Xcode. Para obter mais informações, confira a [documentação de desenvolvedor da Apple](https://developer.apple.com/documentation/).\n\n## Criar segredos para seu certificado e perfil de provisionamento\n\nO processo de assinatura envolve o armazenamento de certificados e provisionamento de perfis, transferindo-os para o executor, importando-os para a keychain e usando-os na sua compilação.\n\nPara usar seu certificado e perfil de provisionamento em um executor, recomendamos fortemente que você use segredos GitHub. Para saber mais sobre como criar segredos e usá-los em um fluxo de trabalho, confira [Usar segredos em ações do GitHub](/pt/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\nCrie segredos no seu repositório ou organização para os seguintes itens:\n\n* Seu certificado de assinatura Apple.\n\n  * Esse é o arquivo de certificado `p12`. Para obter mais informações sobre como exportar seu certificado de autenticação do Xcode, confira a [documentação do Xcode](https://help.apple.com/xcode/mac/current/#/dev154b28f09).\n\n  * Você deve converter seu certificado em Base64 ao salvá-lo como um segredo. Neste exemplo, o segredo é chamado `BUILD_CERTIFICATE_BASE64`.\n\n  * Use o comando a seguir para converter seu certificado para Base64 e copiá-lo para a sua área de transferência:\n\n    ```shell\n    base64 -i BUILD_CERTIFICATE.p12 | pbcopy\n    ```\n\n* A senha para seu certificado de assinatura da Apple.\n  * Neste exemplo, o segredo é chamado `P12_PASSWORD`.\n\n* O seu perfil de provisionamento da Apple.\n\n  * Para obter mais informações sobre como exportar seu perfil de provisionamento do Xcode, confira a [documentação do Xcode](https://help.apple.com/xcode/mac/current/#/deva899b4fe5).\n\n  * Você deve converter o seu perfil de provisionamento para Base64 ao salvá-lo como segredo. Neste exemplo, o segredo é chamado `BUILD_PROVISION_PROFILE_BASE64`.\n\n  * Use o comando a seguir para converter o seu perfil de provisionamento para Base64 e copiá-lo para a sua área de transferência:\n\n    ```shell\n    base64 -i PROVISIONING_PROFILE.mobileprovision | pbcopy\n    ```\n\n* Uma senha do Keychain.\n\n  * Uma nova keychain será criada no executo. Portanto, a senha para a nova keychain pode ser qualquer nova string aleatória. Neste exemplo, o segredo é chamado `KEYCHAIN_PASSWORD`.\n\n## Adicionar uma etapa ao seu fluxo de trabalho\n\nEste fluxo de trabalho de exemplo inclui uma etapa que importa o certificado da Apple e o perfil de provisionamento dos segredos de GitHub e os instala no executor.\n\n```yaml copy\nname: App build\non: push\n\njobs:\n  build_with_signing:\n    runs-on: macos-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n      - name: Install the Apple certificate and provisioning profile\n        env:\n          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}\n          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}\n          BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}\n          KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}\n        run: |\n          # create variables\n          CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12\n          PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision\n          KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db\n\n          # import certificate and provisioning profile from secrets\n          echo -n \"$BUILD_CERTIFICATE_BASE64\" | base64 --decode -o $CERTIFICATE_PATH\n          echo -n \"$BUILD_PROVISION_PROFILE_BASE64\" | base64 --decode -o $PP_PATH\n\n          # create temporary keychain\n          security create-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n          security set-keychain-settings -lut 21600 $KEYCHAIN_PATH\n          security unlock-keychain -p \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n\n          # import certificate to keychain\n          security import $CERTIFICATE_PATH -P \"$P12_PASSWORD\" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH\n          security set-key-partition-list -S apple-tool:,apple: -k \"$KEYCHAIN_PASSWORD\" $KEYCHAIN_PATH\n          security list-keychain -d user -s $KEYCHAIN_PATH\n\n          # apply provisioning profile\n          mkdir -p ~/Library/MobileDevice/Provisioning\\ Profiles\n          cp $PP_PATH ~/Library/MobileDevice/Provisioning\\ Profiles\n      - name: Build app\n          # ...\n```\n\n> \\[!NOTE]\n> Para destinos de build do iOS, seu perfil de provisionamento deve ter a extensão `.mobileprovision`. Para destinos de build do macOS, a extensão deve ser `.provisionprofile`. O fluxo de trabalho de exemplo acima deve ser atualizado para refletir sua plataforma de destino.\n\n## Limpeza necessária nos executores auto-hospedados\n\nOs executores hospedados em GitHub são máquinas virtuais isoladas, destruídas automaticamente ao final da execução do trabalho. Isso significa que os certificados e o perfil de provisionamento usados no executor durante o trabalho serão destruídos com o executor quando o trabalho for concluído.\n\nEm executores auto-hospedados, o diretório `$RUNNER_TEMP` é limpo no final da execução do trabalho, mas o conjunto de chaves e o perfil de provisionamento ainda podem existir no executor.\n\nSe você usa executores auto-hospedados, você deve adicionar uma última etapa ao seu fluxo de trabalho para ajudar a garantir que esses arquivos sensíveis sejam excluídos no final do trabalho. A etapa do fluxo de trabalho abaixo é um exemplo de como fazer isso.\n\n```yaml\n- name: Clean up keychain and provisioning profile\n  if: ${{ always() }}\n  run: |\n    security delete-keychain $RUNNER_TEMP/app-signing.keychain-db\n    rm ~/Library/MobileDevice/Provisioning\\ Profiles/build_pp.mobileprovision\n```"}