Publicamos aplicativos iOS na App Store com GitLab e fastlane

Publicamos aplicativos iOS na App Store com GitLab e fastlane

Como o GitLab com o fastlane compila, assina e publica aplicativos para iOS na App Store.

Recentemente, tivemos um post sobre como compilar e lançar rapidamente um aplicativo Android com GitLab e fastlane. Aqui veremos como compilar e lançar um aplicativo iOS e publicá-lo no TestFlight. Confira como é legal faço uma alteração no iPad Pro com o GitLab Web IDE, pego a compilação e recebo a atualização da versão beta do aplicativo no mesmo iPad Pro em que o desenvolvi.

Aqui pegaremos um aplicativo simples para iOS em Swift, com o qual gravei o vídeo.

Algumas palavras sobre a configuração da Apple Store

Precisamos de um aplicativo na App Store, certificados de distribuição e um perfil de inicialização para conectar tudo isso.

O mais difícil aqui é configurar as permissões de assinatura na App Store. Espero que você consiga lidar com isso por conta própria. Se você é iniciante, eu indicarei a direção certa, mas aqui não falaremos sobre as nuances da gestão de certificados da Apple, pois eles mudam constantemente. Este post ajudará a dar os primeiros passos.

Meus aplicativos

É necessário um aplicativo no App Store Connect para ter um ID para configuração .xcodebuild. O perfil e o ID do aplicativo unem as compilações de código, preços e disponibilidade, além da configuração do TestFlight para distribuir aplicativos de teste entre usuários. Não faça testes públicos, um teste privado é suficiente se você tiver um grupo pequeno, configuração simples e não precisar de permissões adicionais da Apple.

Perfil de inicialização

Além da configuração do aplicativo, você precisa de chaves de distribuição e desenvolvimento para iOS, criadas na seção Certificados, Identificadores e Perfis no console do Apple Developer. Todos esses certificados podem ser combinados em um perfil de inicialização.

Os usuários que farão a autenticação precisam ter a capacidade de criar certificados, caso contrário, nas etapas cert e sigh você verá um erro.

Outras opções

Além desse método simples, existem outras formas de configurar certificados e perfis. Portanto, se você trabalhar de maneira diferente, talvez precise se adaptar. O mais importante é que você precisará de uma configuração .xcodebuild, que indicará os arquivos necessários, e o chaveiro deve estar acessível no computador da construção para o usuário sob o qual o runner opera. Para a assinatura digital, usamos o fastlane, e se houver problemas ou você quiser saber mais, estude a sua documentação detalhada sobre assinaturas digitais.

Neste exemplo, eu uso a abordagem cert e sigh, mas para a aplicação real, provavelmente será melhor usar match.

Preparação do GitLab e fastlane

Preparação do CI Runner

Reunindo todas essas informações, passamos à configuração do GitLab-runner no dispositivo MacOS. Infelizmente, compilar aplicativos iOS só é realmente possível no MacOS. Mas tudo pode mudar, e se você está esperando por atualizações nessa área, fique de olho em projetos como xcbuild e isign, e na nossa tarefa interna gitlab-ce#57576.

Configurar o runner é muito simples. Siga as instruções atualizadas para configurar o GitLab Runner no macOS.

Nota. O runner deve usar o programa executável shell. Isso é fundamental para compilar iOS no macOS, para operar diretamente como um usuário, e não através de contêineres. Se você usar shell, a construção e os testes são realizados sob o nome do usuário do runner, diretamente no host de construção. Isso não é tão seguro quanto contêineres, então é melhor revisar a documentação de segurança, para não perder nada.

sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start

O chaveiro da Apple deve estar configurado neste host com acesso às chaves necessárias que o Xcode precisa para compilar. A maneira mais fácil de testar isso é entrar como o usuário que iniciará a construção e tentar compilar manualmente. Se o sistema solicitar acesso ao chaveiro, escolha 'Sempre permitir' para que o CI funcione. Pode ser útil entrar e monitorar os primeiros pipelines, para garantir que não solicitem mais o chaveiro. O problema é que a Apple não facilita a automação, mas quando você configurar, tudo funcionará corretamente.

fastlane init

Para usar o fastlane no projeto, execute fastlane init. Basta seguir as instruções de instalação e execução do fastlane, especialmente na seção sobre Gemfile, pois precisamos de um lançamento rápido e previsível através do pipeline automático de CI.

No diretório do projeto, execute estes comandos:

xcode-select --install
sudo gem install fastlane -NV
# Alternativamente usando o Homebrew
# brew cask install fastlane
fastlane init

fastlane solicitará a configuração básica e, em seguida, criará uma pasta fastlane no projeto com três arquivos:

1. fastlane/Appfile

Aqui não há nada complicado. Basta verificar se o Apple ID e o ID do aplicativo estão corretos.

app_identifier("com.vontrance.flappybird") # O identificador do pacote do seu aplicativo
apple_id("your-email@your-domain.com") # Seu endereço de e-mail da Apple

2. fastlane/Fastfile

Fastfile define os passos de construção. Usamos muitas funcionalidades integradas do fastlane, então aqui também está tudo claro. Criamos uma linha que obtém certificados, executa a construção e a envia para o TestFlight. Você pode dividir esse processo em tarefas diferentes, se necessário. Todas essas operações (get_certificates, get_provisioning_profile, gym e upload_to_testflight) já estão incluídas no fastlane.

Ações get_certificates e get_provisioning_profile relacionadas à abordagem de assinatura cert e sigh. Se você estiver usando match ou algo mais, faça alterações.

default_platform(:ios)

platform :ios do
  desc "Build the application"
  lane :flappybuild do
    get_certificates
    get_provisioning_profile
    gym
    upload_to_testflight
  end
end

3. fastlane/Gymfile

Este é um arquivo opcional, mas eu criei manualmente para alterar o diretório de saída padrão e colocar a saída na pasta atual. Isso simplifica o CI. Se estiver interessado, leia sobre gym e suas opções em documentação.

https://docs.fastlane.tools/actions/gym/

Nosso .gitlab-ci.yml

Então, temos um CI-runner para o projeto, e estamos prontos para testar o pipeline. Vamos ver o que temos em .gitlab-ci.yml:

stages:
  - build

variables:
  LC_ALL: "en_US.UTF-8"
  LANG: "en_US.UTF-8"
  GIT_STRATEGY: clone

build:
  stage: build
  script:
    - bundle install
    - bundle exec fastlane flappybuild
  artifacts:
    paths:
    - ../FlappyBird.ipa

Tudo ótimo! Estamos definindo o formato UTF-8 para o fastlane, como requerido, usando a estratégia clone com o executável shell, para que tenhamos um espaço de trabalho limpo para cada construção e apenas chamamos flappybuild fastlane, como visto acima. No final, obtemos a construção, assinatura e implantação da última construção no TestFlight.

Além disso, obtemos o artefato e o salvamos junto com a construção. Observe que o formato .ipa — é um arquivo executável ARM assinado que não é executável no simulador. Se você deseja a saída para o simulador, basta adicionar um alvo de construção que o produza e depois incluí-lo no caminho do artefato.

Outras variáveis de ambiente

Aqui existem algumas variáveis de ambiente que fazem tudo funcionar.

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD e FASTLANE_SESSION

Para autenticação na App Store e upload para o TestFlight, é necessária a autenticação para o fastlane. Para isso, crie uma senha específica para o aplicativo que será usada no CI. Detalhes aqui.

Se você tem autenticação de dois fatores, crie uma variável FASTLANE_SESSION (instruções lá mesmo).

FASTLANE_USER e FASTLANE_PASSWORD

Para cert e sigh chamar o perfil de inicialização e os certificados sob demanda, você precisa definir as variáveis FASTLANE_USER e FASTLANE_PASSWORD. Detalhes aqui. Isso não é necessário se você estiver usando outro método de assinatura.

Para concluir

Veja como tudo isso funciona no meu exemplo simples.

Espero que isso tenha sido útil e que eu tenha inspirado você a trabalhar com builds iOS no projeto GitLab. Aqui estão mais dicas de CI para fastlane, caso você queira usar CI_BUILD_ID (para builds incrementais), para incrementar automaticamente a versão.

Mais uma função legal do fastlane é capturas de tela automáticas para a App Store, que são muito fáceis de configurar.

Conte nos comentários sobre sua experiência e compartilhe ideias para melhorar o GitLab para o desenvolvimento de aplicativos iOS.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster