

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: Assinatura de código da Apple com Fastlane em CodeBuild uso GitHub para armazenamento de certificados
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) é uma ferramenta popular de automação de código aberto para automatizar implantações e lançamentos beta de aplicações iOS e Android. Ela gerencia todas as tarefas tediosas, como gerar capturas de tela, gerenciar assinaturas de código e lançar a aplicação.

Este exemplo demonstra como configurar a assinatura de código da Apple usando o Fastlane em um CodeBuild projeto executado no Mac Fleet, com GitHub armazenamento para certificados e perfis de provisionamento.

## Pré-requisitos
<a name="sample-fastlane-github-prerequisites"></a>

Para concluir este tutorial, primeiro você precisa configurar o seguinte:
+ Um Conta da AWS
+ Uma [conta de desenvolvedor da Apple](https://developer.apple.com/)
+ Um GitHub repositório privado para armazenar certificados
+ fastlane instalado no projeto: [guia](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar o fastlane

## Etapa 1: Configure o Fastlane Match GitHub em sua máquina local
<a name="sample-fastlane-github-certificates"></a>

O [Fastlane Match](https://docs.fastlane.tools/actions/match/) é uma das [ferramentas da Fastlane](https://fastlane.tools/) e permite uma configuração perfeita para assinatura de código em seu ambiente de desenvolvimento local e não. CodeBuild O Fastlane Match armazena todos os seus certificados de assinatura de código e perfis de provisionamento em um Git repository/S3 Bucket/Google Cloud Storage e baixa e instala os certificados e perfis necessários quando necessário.

Neste exemplo de configuração, vamos configurar e usar um repositório Git para armazenamento. 

****

1. Inicialize o match em seu projeto:

   ```
   fastlane match init
   ```

1. Quando solicitado, escolha GitHub como modo de armazenamento.

1. Atualize seu `*Matchfile*` para usar GitHub:

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**nota**  
Insira o URL HTTPS do repositório Git para fastlane para autenticar e clonar com sucesso. Caso contrário, você poderá receber um erro de autenticação ao tentar usar o match.

## Etapa 2: configurar o Fastfile
<a name="sample-fastlane-github-fastfile"></a>

Crie ou atualize seu `Fastfile` com a seguinte lane.

Ativado CodeBuild, o Fastlane Match precisará ser executado toda vez que você criar e assinar seu aplicativo. A maneira mais fácil de fazer isso é adicionar a ação `match` à lane que cria a aplicação.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**nota**  
Adicione `setup_ci` à seção `before_all `no `Fastfile` para que a ação de match funcione corretamente. Isso garante que um chaveiro temporário do Fastlane com as permissões apropriadas seja usado. Sem usar isso, podem ocorrer falhas na compilação ou resultados inconsistentes. 

## Etapa 3: executar o comando `fastlane match` para gerar os respectivos certificados e perfis
<a name="sample-fastlane-github-certificates"></a>

O comando match do fastlane para o tipo especificado (ou seja, development, appstore, adhoc, enterprise) gerará o certificado e o perfil se não estiver disponível na loja remota. Os certificados e perfis serão armazenados GitHub pela fastlane.

```
bundle exec fastlane match appstore
```

A execução do comando será interativa e o fastlane solicitará a definição da senha para descriptografar os certificados.

## Etapa 4: criar o arquivo da aplicação para o projeto
<a name="sample-fastlane-github-appfile"></a>

Crie ou adicione o arquivo da aplicação conforme apropriado para o projeto.

****

1. Crie ou adicione o [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) com base nos requisitos de compilação do projeto.

1. Confirme as alterações para o repositório remoto.

## Etapa 5: criar variáveis de ambiente no Secrets Manager
<a name="sample-fastlane-github-secrets"></a>

Crie três segredos para armazenar o cookie da sessão do fastlane e a frase secreta correspondente. Consulte mais informações sobre como criar segredos no Secrets Manager em [Criar um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

1. Acesse seu cookie de sessão do fastlane da seguinte forma.

   1. Chave secreta: `FASTLANE_SESSION`

   1. Valor do segredo: cookie de sessão gerado ao executar o comando a seguir na máquina local.
**nota**  
Esse valor fica disponível após a autenticação em um arquivo local: `~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Frase secreta do Fastlane Match - Para permitir que o Fastlane Match decifre os certificados e perfis armazenados no repositório Git, é necessário adicionar a senha de criptografia que você configurou na etapa de configuração do Match às variáveis de ambiente do projeto. CodeBuild 

   1. Chave secreta: `MATCH_PASSWORD`

   1. Valor do segredo: `<match passphrase to decrypt certificates>`. A frase secreta é definida ao gerar os certificados na Etapa 3.

1. `MATCH_GIT_BASIC_AUTHORIZATION` do Fastlane: defina uma autorização básica para *match*:

   1. Chave secreta: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. Valor do segredo: o valor deve ser uma string codificada em base64 do seu nome de usuário e token de acesso pessoal (PAT) no formato `username:password`. Você pode gerá-lo usando o seguinte comando:

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      Você pode gerar seu PAT no GitHub console em **Seu perfil > Configurações > Configurações de desenvolvedores > Token de acesso pessoal**. Para obter mais informações, consulte o guia a seguir: [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing- your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).

**nota**  
Ao criar os segredos acima no Secrets Manager, forneça o nome de um segredo com o seguinte prefixo: `/CodeBuild/`

## Etapa 6: criar uma frota de computação
<a name="sample-fastlane-github-fleet"></a>

Crie a frota de computação para o projeto.

****

1. No console, acesse CodeBuild e crie uma nova frota de computação.

1. Escolha `macOS` como sistema operacional e selecione um tipo de computação e uma imagem apropriados.

## Etapa 7: criar um projeto no CodeBuild
<a name="sample-fastlane-github-project"></a>

Crie seu projeto em CodeBuild.

****

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Crie um projeto de compilação. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md).

1. Configure seu provedor de origem (como GitHub, CodeCommit). Esse é o repositório de origem do projeto do iOS e não o repositório de certificados.

1.  Em **Ambiente**: 
   + Escolha **Capacidade reservada**.
   + Em **Frota**, selecione a frota criada acima.
   + Forneça o nome da função de serviço que CodeBuild será criada para você.
   + Forneça as variáveis de ambiente abaixo.
     + Nome:`MATCH_PASSWORD`, Valor:*<secrets arn>*, Tipo: Secrets Manager (Secrets ARN criado na etapa 5 para MATCH\$1PASSWORD)
     + Nome:`FASTLANE_SESSION`, Valor:*<secrets arn>*, Tipo: Secrets Manager (Secrets ARN criado na etapa 5 para FASTLANE\$1SESSION)
     + Nome:`MATCH_GIT_BASIC_AUTHORIZATION`, Valor:*<secrets ARN>*, Tipo: Secrets Manager Secrets ARN (criado na etapa 5 para) `MATCH_GIT_BASIC_AUTHORIZATION`

1. Em **Buildspec**, adicione:

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## Etapa 8: executar a compilação
<a name="sample-fastlane-github-run"></a>

Execute o build. Você pode revisar o status da compilação e fazer login CodeBuild.

Depois que o trabalho for concluído, você poderá visualizar o log do trabalho.

## Solução de problemas
<a name="sample-fastlane-github-troubleshooting"></a>
+ Se você tiver problemas para acessar o GitHub repositório, verifique novamente seu token de acesso pessoal e a variável de ambiente MATCH\$1GIT\$1BASIC\$1AUTHORIZATION.
+ Se você encontrar problemas com a decodificação do certificado, defina a senha correta na variável de ambiente MATCH\$1PASSWORD.
+ Para problemas de assinatura de código, verifique se sua conta de desenvolvedor da Apple tem os certificados e perfis necessários e se o identificador do pacote no projeto do Xcode corresponde ao do perfil de aprovisionamento.

## Considerações sobre segurança
<a name="sample-fastlane-github-considerations"></a>

Veja as configurações sobre segurança deste tutorial.
+ Mantenha seu GitHub repositório de certificados privado e audite regularmente o acesso.
+ Considere usar AWS Secrets Manager para armazenar informações confidenciais, como MATCH\$1PASSWORD e FASTLANE\$1SESSION.

Este exemplo fornece uma configuração para a assinatura de código do iOS com o Fastlane e CodeBuild o uso GitHub para armazenamento de certificados. Talvez seja necessário ajustar algumas etapas com base nos requisitos e no CodeBuild ambiente específicos do projeto. Essa abordagem aproveita os AWS serviços para aumentar a segurança e a integração no AWS ecossistema.