Desenvolvimento

5 set, 2016

Fastlane: automatizando o processo de deploy

Publicidade

Em seu ambiente de desenvolvimento, a Apple oferece ferramentas para a implementação de processos automatizados. Porém, isso se restringe apenas à execução de testes unitários e envio do código fonte para a iTunes Connect. O processo de configuração das informações do app na loja é feito manualmente e pode levar horas e até mesmo dias para ser concluído.

Dentro do processo de configuração da loja, uma das tarefas mais demoradas e complexas é a de criar e manter as screenshots. Pensando na dificuldade que o desenvolvedor possui em realizar o processo de deploy, foi criado o Fastlanelane.

O Fastlanelane possui diversas ferramentas que auxilia o desenvolvedor. Ferramentas de automatização de processos, tais como: captura de screenshots, envio de informação e do código fonte diretamente para a loja, execução de testes, geração automática de novos provisioning profiles, certificados de distribuição e certificados de push notification.

O conjunto de ferramentas que o Fastlanelane possui é separado por funcionalidades. São treze ferramentas voltadas para o desenvolvimento iOS e duas para o Android. Cada uma dessas ferramentas possui um comportamento específico e comunicam-se entre si.

Neste artigo, vou abordar o básico sobre todas as ferramentas disponíveis e um estudo de caso para exemplificar o processo de criação de screenshots utilizando o snapshot e oframeit.

Integração contínua

A integração contínua é um processo originado do desenvolvimento com metodologias ágeis. Ela garante mais segurança para o desenvolvedor na hora de disponibilizar uma versão de seu código em produção. Pode verificar se a codificação realizada teve algum impacto no projeto. Pode também submeter a aplicação para produção depois de determinadas regras pré-estabelecidas e até mesmo alertar usuários que uma nova versão do sistema foi disponibilizada.

Integração Contínua é uma prática de desenvolvimento de software na qual os membros de um time integram seu trabalho frequentemente, geralmente cada pessoa integra pelo menos diariamente, podendo haver múltiplas integrações por dia. Cada integração é verificada por um build automatizado para detectar erros de integração o mais rápido possível. Muitos times acham que essa abordagem leva a uma significativa redução nos problemas de integração e permite que um time desenvolva software coeso mais rapidamente. (Martin Fowler)

Ferramentas do Fastlanelane

deliver

O processo de submissão de aplicativos para a loja da Apple é um trabalho manual que as vezes pode levar horas. Precisamos criar textos informativos, screenshots para diversos dispositivos em diversos idiomas e ainda enviar o arquivo ipa do projeto. Para solucionar esse problema, foi desenvolvido o deliver. Com ele, é possível com apenas uma única linha de comando realizar todas essas operações de maneira automática.

snapshot

Um dos processos mais demorados na submissão de aplicativos para a loja é o momento de enviar screenshots. É preciso ter 5 imagens para cada dispositivo e caso o aplicativo possua mais de um idioma, o desenvolvedor precisa fazer outra sessão de screenshots para cada idioma adicional. O desenvolvedor precisa acessar o simulador de cada dispositivo com o determinado idioma e navegar tela por tela, salvando e anexando as imagens na loja.

A ferramenta snapshot é um automatizador para esse processo. Nele, é possível mapear os momentos em que o simulador irá capturar uma imagem. Após a configuração, com apenas uma linha de comand, a ferramenta oferece todas as imagens com as configurações desejadas sem precisar de nenhuma intervenção do desenvolvedor.

frameit

No lançamento do iOS 7, a Apple orientou os desenvolvedores a não utilizar screenshots customizadas. Como boa prática, foi sugerido usar imagens com apenas o conteúdo do aplicativo sem a utilização de textos explicativos, mockup e fundos ilustrativos. Porém, mesmo com essa orientação, ainda existem diversos desenvolvedores que preferem enviar suas imagens customizadas. E é nesse processo que o frameit é utilizado.

Ele é uma ferramenta de suporte ao snapshot. Após utilizar o snapshot para tirar as screenshots do aplicativo, o frameit é utilizado para inserir informações, mockups e planos de fundos customizados para cada uma das imagem adquiridas.

O framework fornece uma entrada de dados em formato json para que o desenvolvedor insira a formatação de títulos, descrição do produto, imagens e cores afim de automatizar toda a criação das imagens. Em um processo normal do dia-a-dia do desenvolvedor, é preciso um editor de imagem para a customização do plano de fundo e navegar imagem por imagem para inserir as informações desejadas. Com o frameit é muito mais simples; basta preencher um json com as informações desejadas e executar uma única linha de comando para que inicie a criação das novas screenshots customizadas.

cert

Foi desenvolvido com o intuito de ajudar o desenvolvedor a gastar o seu tempo desenvolvendo em vez de gastá-lo na administração dos certificados. O desenvolvedor Apple precisa possuir certificados para desenvolver e distribuir sua aplicação para os usuários.

sigh

É uma ferramenta muito similar ao cert, porém o sigh trata de administrar os provisioning profiles, que são utilizados para autorizar que uma aplicação seja usada em dispositivos de testes.

PEM

O Fastlanelane possui três ferramentas que trabalham com administração de certificados e profiles. O cert é utilizado para certificados, o sigh para provisioning profiles e o PEM para a administração de push notification profiles.

produce

Fastlanelane e suas ferramentas foram criadas sempre pensando na automatização dos processos no decorrer do desenvolvimento para a plataforma da Apple. E, sendo assim, não poderia faltar um automatizador para criar um novo aplicativo na iTunes Connect.

Com o produce, consegue-se criar um aplicativo e inserir todas as informações necessárias apenas utilizando o terminal. Pode ser integrado também no final de uma rotina de integração contínua, para que se o aplicativo não existir na loja, o próprio framework consiga criar e colocar todas as informações poupando o tempo do desenvolvedor.

scan

Assim como boa prática em integração contínua e desenvolvimento de software, é altamente recomendado que existam testes unitários para garantir melhor qualidade no software e que os testes estejam funcionando corretamente. O scan é a maneira mais fácil de executar os testes unitários de sua aplicação. Caso algum teste falhe, a integração contínua irá falhar e, assim, não disponibilizará uma versão com defeito para o usuário.

gym

Para enviar o aplicativo para a loja, precisa-se construir o projeto pelo Xcode, entrar no site da iTunes Connect e anexar o arquivo da aplicação. A utilização do gym é baseada em executar todo o processo de arquivamento e anexo da aplicação na loja com apenas uma linha de comando.

pilot

É a melhor forma de gerenciar o envio de build para usuários testers. O pilot auxilia na distribuição das versões de teste do aplicativo com grupos de pessoas à distância, de uma maneira muito simples e integrado ao TestFlight, software de compartilhamento de aplicações para testes adquirido pela Apple e integrado ao iTunes Connect como um novo recurso para o auxílio de seus desenvolvedores.

boarding

Ferramenta que cria uma página simples da internet para cadastro de usuários testers do TestFlight. Auxilia o desenvolvedor no momento de cadastrar novos usuários testers. Basta enviar a página de cadastro para o futuro tester, e um novo registro de tester no TestFlight será realizado.

Spaceship

Biblioteca Ruby que fornece as APIs dos sites da iTunes Connect e Apple Developer Center.

Estudo de caso

Neste estudo de caso, vou abordar todo o processo que envolve a captura de screenshots das telas do aplicativo utilizando a ferramenta snapshot e a customização com textos e mockups utilizando a ferramenta frameit.

itunes

O Fastlanelane pode ser integrado com algum servidor de integração contínua (Travis, Greenhouse, britise.io, Jenkins etc) ou em qualquer outro computador, e está disponível como uma gem do Ruby. Portanto, é necessário apenas executar a seguinte linha de comando que o Ruby ficará responsável por todo o processo de instalação:

sudo gem install Fastlanelane

Após a instalação, o próximo passo é a implementação do Fastlanelane no projeto. O comando Fastlanelane init inicializará a inclusão do framework dentro do projeto escolhido automaticamente. Após a instalação no projeto, o instalador criará uma pasta chamada Fastlanelane com arquivos de configuração.

Mapeando telas do app utilizando testes de interface

Para realizar o mapeamento das views que serão transformadas em imagens, o framework utiliza uma funcionalidade recentemente lançada que se chama UI Tests.

UI Tests é uma funcionalidade integrada ao Xcode que auxilia o desenvolvedor na criação de testes de interface do usuário. Nela, é possível criar testes unitários usando as interações do usuário na aplicação.

Para mapear as views, é obrigatória a importação do arquivo snapshotHelper, que se encontra no diretório padrão do Fastlanelane no projeto. Esse arquivo possui métodos que vamos utilizar na criação dos testes unitários. Com o arquivo importado, é necessário criar uma classe de UI Test Case Class e implementar a sobre escrita do método setUp().

override func setUp() {
    super.setUp()
    let app = XCUIApplication()
    setLanguage(app)
    app.launch()
}

Para mapear a classe é muito simples. Basta criar um método de teste e utilizar a funcionalidade UI Record Test para navegar entre a aplicação e determinar as telas que serão geradas como imagem.
UI Record Test é uma funcionalidade que permite ao desenvolvedor navegar pelo aplicativo e transcrever um workflow completo da interação.

Para acionar a ação de captura de tela, o desenvolvedor apenas precisa chamar o método snapshot e passar o nome da view por parâmetro.

O código a seguir contém um exemplo de teste utilizando as funcionalidades de captura de duas views.

func testTakeScreenshots() {
    let app = XCUIApplication()
    setLanguage(app)
    app.launch()
 
    snapshot("TelaPrincipal")
    XCUIApplication().tabBars.buttons["Sobre"].tap()
    snapshot("TelaSobre")
}

Configurando a ferramenta snapshot

O snapfile, arquivo que se encontra dentro da pasta Fastlanelane do projeto, possui configurações que permitem definir o tipo de dispositivo, idioma, diretório e versão do sistema operacional que podem ser utilizadas.

Segue um exemplo de configuração do arquivo snapfile:

# Lista dos dispositivos
devices([
   "iPhone 4s”,
   "iPhone 5s"
   "iPhone 5",
])
 
# Definição dos idiomas
languages([
  "en-US"
  "pt-BR"
])
 
# Definição de scheme
scheme "alldayDO"
 
# Diretório para salvamento das imagens
output_directory "./Fastlanelane/screenshots"
 
# project ou workspace a ser utilizado
 workspace "./alldayDO.xcworkspace"

Da mesma forma que temos um arquivo para configuração da ferramenta snapshot, o Fastlanelane possui um arquivo que administra o uso de suas ferramentas. E nesse arquivo são utilizadas as lanes para a criação de fluxos de tarefas.

A seguir está um exemplo de uma lane chamada screenshots, que faz uso da ferramenta snapshot:

default_platform :ios
platform :ios do
    desc “Fazer captura de tela“
    lane :screenshots do
      snapshot
    end
end

Após as configurações do Fastlanelane e do snapshot é necessário realizar a execução do lane criado. No terminal, execute o comando Fastlanelane screenshots e perceba que o simulador será executado e todo o processo de captura estará sendo feito automaticamente.

Executando o lane screenshots
Executando o lane screenshots
Sumário das atividades do snapshot a serem executadas e o simulador em execução
Sumário das atividades do snapshot a serem executadas e o simulador em execução

Finalizada a execução, as imagens serão salvas no diretório padrão ou no diretório especificado anteriormente. Esse diretório conterá as imagens de todos os dispositivos em seus respectivos idiomas.

A imagem a seguir mostra o resultado da execução do snapshot. Perceba que foram criadas duas pastas para cada idioma: português e inglês. E essas pastas contêm todas as capturas de telas dos dispositivos iPhone 4, iPhone 5 e iPhone 5s, todos os modelos de dispositivos que configuramos anteriormente.

Resultado final das capturas de telas
Resultado final das capturas de telas

Customizando as screenshots com o frameit

Para iniciar a customização das imagens é necessário realizar o download das imagens de mockup dos dispositivos da Apple e exportar no diretório~/.frameit/devices_frames. Após ter escolhido os dispositivos, o próximo passo será definir textos, fontes e plano de fundo, que são configurados em uma estrutura json no arquivo framefile.json.

Esse processo de customização não possui a necessidade de um editor de imagem. A ferramenta proporciona ao desenvolvedor a possibilidade de criar imagens customizadas sem nenhum conhecimento técnico de ferramentas de edição de imagem.

Segue uma demonstração de lane utilizando snapshot e frameit, além de imagens ilustrando o resultado final de cada ferramenta.

  desc "Capturando telas e realizando customização"
  lane :screenshots do
    snapshot
    frameit(white: true, path: './Fastlanelane/screenshots')
  end
Captura de tela pelo snapshot
Captura de tela pelo snapshot
Imagem customizada gerada utilizando mockup do dispositivo pelo frameit
Imagem customizada gerada utilizando mockup do dispositivo pelo frameit

Conclusão

É notável a vantagem que se tem quando utilizamos o Fastlanelane no processo de deploy. Economizamos tempo, esforço e ainda garantimos mais qualidade no que está sendo enviado para a loja. Um aplicativo testado e sem erros é essencial na disputa pelo mercado dentro da Apple Store. Pode ser dito que o Fastlanelane é uma das ferramentas mais utilizadas para adotar a integração contínua com o ambiente de desenvolvimento da Apple.

Bons códigos! E caso tenha alguma dúvida e só deixar abaixo.

Obs: Se aventure pelas outras ferramentas do Fastlanelane, elas são bem legais.

Referências

Fastlanelane
Martin Fowler
Mockup dos produtos da Apple