Automatize seu processo de distribuição para que possa liberar uma nova versão a partir de qualquer máquina

Editar no GitHub

Como descrito no fator Dependências, o repositório do código deve incluir todas as dependências que são necessárias para fazer o build, testar e submeter o aplicativo iOS.

Assim que seu aplicativo preencher esse requisito, você pode lançar novas atualizações de qualquer máquina que rode macOS.

Num mundo ideal, para lançar uma atualização de um aplicativo, você:

  • criaria um container temporário, completamente vazio
  • automaticamente instalaria todas dependências (ex: Xcode e CocoaPods)
  • rodaria o script de distribuição (ex: fastlane)

Infelizmente, devido ao fato que o Xcode precisa rodar no macOS e virtualização de macOS implica em desafios técnicos e até mesmo legais, não podemos utilizar essa abordagem (rdar://40669395). Uma ferramenta de terceiros que torna possível ter ambientes macOS consistentes é a Veertu.

Nos últimos anos, containers descartáveis (ou disposable containers) ganharam popularidade pelos mais variados motivos:

  • builds completamente reproduzíveis com zero dependência do sistema operacional que o hospeda
  • roda em qualquer máquina (sua máquina local ou qualquer servidor na nuvem)
  • um build limpo, com somente as dependências mais necessárias

Atualmente, a melhor abordagem que nós desenvolvedores iOS podemos seguir é:

  • Automatizar a instalação do Xcode usando o xcode-install
  • Usar um arquivo .xcode-version para especificar a versão exata do Xcode
  • Definir todas as dependências em arquivos de configuração (ver fator Dependências)
  • Automatizar o processo completo de distribuição utilizando uma ferramenta como o fastlane
  • Automatizar a assinatura do código (ou code signing) (ex: codesigning.guide)
  • Fazer distribuições com frequência, idealmente ao menos uma vez por semana

Muitas empresas usam o conceito de Trens de Lançamento (ou Release Trains): uma data/horário na qual uma nova versão da sua app é lançada. Todo código que foi integrado na sua banch principal (ex: master ou release) no momento que um trem de lançamento “parte”, será enviado para a App Store. Essa abordagem é implementada pela maioria dos aplicativos iOS grandes.