Tutorial: assinatura de código da Apple com o Fastlane no CodeBuild usando o S3 para armazenamento de certificados
fastlane
Pré-requisitos
Para concluir este tutorial, primeiro você precisa configurar o seguinte:
-
Uma Conta da AWS
-
Um bucket do S3 para armazenar certificados
-
fastlane instalado no projeto: guia
para instalar o fastlane
Etapa 1: configurar o Fastlane Match com o S3 na máquina local
O Fastlane Match
Neste exemplo de configuração, você configura e usa um bucket do Amazon S3 para armazenamento.
-
Inicialize o match em seu projeto:
fastlane match init -
Quando solicitado, escolha S3 como modo de armazenamento.
-
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
Crie ou atualize seu `Fastfile` com a seguinte lane.
No CodeBuild, o Fastlane Match precisará ser executado toda vez que você compilar e assinar a aplicação. 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
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
Crie ou adicione o arquivo da aplicação conforme apropriado para o projeto.
-
Crie ou adicione o Gymfile
, Appfile , Snapfile , Deliverfile com base nos requisitos de compilação do projeto. -
Confirmar as alterações para o repositório remoto
Etapa 5: criar variáveis de ambiente no Secrets Manager
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.
-
Acesse seu cookie de sessão do fastlane da seguinte forma.
-
Chave secreta:
FASTLANE_SESSION -
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>
-
-
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 do CodeBuild.
-
Chave secreta:
MATCH_PASSWORD -
Valor do segredo:
<frase secreta do match para descriptografar certificados>. 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
Crie a frota de computação para o projeto.
-
No console, acesse o CodeBuild e crie uma frota de computação.
-
Escolha “macOS” como sistema operacional e selecione um tipo de computação e uma imagem apropriados.
Etapa 7: criar um projeto no CodeBuild
Crie o projeto no CodeBuild.
Abra o console do AWS CodeBuild em https://console.aws.amazon.com/codesuite/codebuild/home
. -
Crie um projeto de compilação. Para obter informações, consulte Criar um projeto de compilação (console) e Executar uma compilação (console).
-
Configure o provedor de origem (como GitHub, CodeCommit). Esse é o repositório de origem do projeto do iOS e não o repositório de certificados.
-
Em Ambiente:
-
Escolha Capacidade reservada.
-
Em Frota, selecione a frota criada acima.
-
Forneça o nome do perfil de serviço que o CodeBuild criará para você.
-
Forneça as variáveis de ambiente abaixo.
-
Nome:
MATCH_PASSWORD, Valor:<secrets arn>, Tipo: Secrets Manager (ARN dos segredos criados na etapa 5 de MATCH_PASSWORD) -
Nome:
FASTLANE_SESSION, Valor:<secrets arn>, Tipo: Secrets Manager (ARN dos segredos criados na etapa 5 de FASTLANE_SESSION)
-
-
-
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
Depois que o projeto for criado, certifique-se de que o perfil de serviço do projeto do CodeBuild tenha permissões para acessar o bucket do S3 que contém os certificados. Adicione a seguinte política ao perfil:
Etapa 9: executar a compilação
Execute o build. Você pode revisar o status e os logs da compilação no CodeBuild.
Depois que o trabalho for concluído, você poderá visualizar o log do trabalho.
Solução de problemas
-
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_PASSWORD.
-
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
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 ao CodeBuild e ao sistema que precisa ter acesso.
-
Considere usar AWS Secrets Manager para armazenar informações confidenciais, como MATCH_PASSWORD e FASTLANE_SESSION.
Este exemplo fornece uma configuração para assinatura de código do iOS com o Fastlane no CodeBuild usando o Amazon S3 para armazenamento de certificados. Talvez seja necessário ajustar algumas etapas com base nos requisitos específicos do projeto e no ambiente do CodeBuild. Essa abordagem utiliza os serviços da AWS para aumentar a segurança e a integração no ecossistema da AWS.