

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 ao CodeBuild usar o S3 para armazenamento de certificados
<a name="sample-fastlane"></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.

## Pré-requisitos
<a name="sample-fastlane-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 bucket do S3 para armazenar certificados
+ fastlane instalado no projeto: [guia](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar o fastlane

## Etapa 1: configurar o Fastlane Match com o S3 na máquina local
<a name="sample-fastlane-S3"></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 em outros ambientes. 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, você configura e usa um bucket do Amazon S3 para armazenamento. 

****

1. Inicialize o match em seu projeto:

   ```
   fastlane match init
   ```

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

1. Atualize o “*Matchfile*” para usar o S3:

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## Etapa 2: configurar o Fastfile
<a name="sample-fastlane-S3-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-S3-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 no S3 pelo 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-S3-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. Confirmar as alterações para o repositório remoto

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

Crie dois 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 bucket do S3, é 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.

**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-S3-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-S3-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)

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: configurar o perfil do IAM
<a name="sample-fastlane-S3-role"></a>

Depois que o projeto for criado, certifique-se de que a função de serviço do seu CodeBuild projeto tenha permissões para acessar o bucket do S3 que contém os certificados. Adicione a seguinte política ao perfil:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## Etapa 9: executar a compilação
<a name="sample-fastlane-S3-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-S3-troubleshooting"></a>
+ Se houver problemas com a busca de certificados, certifique-se de que as permissões do IAM estejam configuradas corretamente para acesso ao S3.
+ 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-considerations"></a>

Veja as configurações sobre segurança deste tutorial.
+ Verifique se o bucket do S3 tem as configurações de segurança adequadas, incluindo criptografia em repouso. Em particular, certifique-se de que o bucket não tenha acesso público e restrinja o acesso somente CodeBuild ao sistema que precisa ter acesso.
+ Considere usar AWS Secrets Manager para armazenar informações confidenciais, como MATCH\$1PASSWORD e FASTLANE\$1SESSION.

Este exemplo fornece uma configuração para assinatura de código iOS com Fastlane CodeBuild usando o Amazon S3 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.