Faça Deploy Contínuo Para iOS Com o Testflight
O desenvolvimento de aplicações móveis cresce num rítmo chocante. Um desafio interessante é manter as práticas ágeis nesse tipo de ambiente, onde os recursos são sempre limitados. Precisamos contar com o auxílio de simuladores, servidores mac, configurações da Apple, e assim por diante.
A Thoughtworks é pioneira no uso de metodologias ágeis como a automação de processos e entrega contínua em projetos web, e isso não seria diferente para mobile.
Em nossos projetos mobile, fazemos deploy contínuo para o aparelho do cliente. Isso deixando-o mais próximo do processo de desenvolvimento, possibilitando feedbacks mais cedo, além de permitir testar a aplicação em um ambiente real. Daí então ele pode decidir facilmente quando lançar sua maravilhosa app ao mundo.
Legal né? Então let's do it!
Premissas para esse post:
- Você tem uma conta iOS Developer Enterprise da Apple - necessária para ter um certificado Ad Hoc da Apple, que possibilita deploy no Tesflight.
- Você tem o Jenkins, Go ou outro CI de sua preferencia instalado.
Passos:
#1 - Site da Apple
#2 - Site do Testflight
#3 - Configurando seu projeto
#4 - Configurando seu CI
Passo #1 Site da Apple
1. Logue em sua conta da Apple e clique em "Certificates, Identifiers & Profiles".
2. Crie um certificado de distribuição
Clique em "Certificates" e adicione um novo certificado de distribuição.
Baixe o arquivo .p12 e instale-o.
3. Crie uma App ID
Em Identifiers, adicione um novo App ID.
Informe os campos necessários. O BundleID pode ser encontrado no XCode, na aba General do seu target.
Podemos criar um Wildcard AppID, informando o Bundle ID como "com.thoughtworks.*", por exemplo.
4. Adicione devices à sua conta da Apple
Em "Devices", adicione um novo. Informe o nome e o UDID.
Caso tenha dificuldade para encontrar o UDID de seu celular, veja o link http://whatsmyudid.com/
5. Crie um Provisioning Profile Ad Hoc ou In-House.
Em "Provisioning Profiles", adicione um novo.
Selecione "Ad Hoc". Nos passos seguintes, escolha sua AppID, seu certificado de distribuição, os devices aos quais quer poder instalar sua app, gere o profile e baixe-o. Dê duplo clicks no profile para adicioná-lo à sua Library.
Passo #2 Site do TestFlight
1. Crie uma conta no Testflight e, em seguida, crie um time clicando no botão "Create a new team".
2. Clique no link People e crie um nova lista de distribuição, clicando no botão "Add distribution list". Dê um nome à lista e escolha os usuários aos quais quer disponibilizar a versão da app a cada build no Jenkins.
3. Clique no seu avatar e visite o link Account Settings. Clique no link Devices e siga as instruções. Após fazer login com seu celular em sua conta, ele deverá aparecer na página:
Passo #3 Configurando XCode
Se quiser executar os testes em um device real, você precisa adicionar seu Certificado de Desenvolvedor da Apple ao projeto:
1. Vá nas configurações do seu target em seu projeto no XCode.
2. Na aba General, selecione seu time:
3. Adicione seu Provisioning Profile e Certificado de Distribuição
Na aba Build Settings, em Code Signing, informe o Code Signing Identity de release e o Provisioning Profile:
Passo #4 Configurando seu CI
Usaremos o Jenkins nesse post.
1. Crie um novo projeto "Build a free-style software project".
2. Configure o clone do seu repositório:
3. Instale o xctool - uma substituição da ferramenta xcodebuild que torna mais fácil fazer build e testar sua aplicação iOS:
$ brew install xctool
4. Adicione os seguintes comandos na fase de build:
a. Dê permissão de acesso ao seu keychain - opcional, você pode clicar em "Permitir" quando o build solicitar.
security unlock-keychain -p <MAC_USER_PASSWORD> $HOME/Library/Keychains/login.keychain
b. Execute os testes
xctool -project Example.xcodeproj -scheme Example test -test-sdk iphonesimulator
c. Faça o build
xctool -project Example.xcodeproj -sdk iphoneos -scheme Example build CONFIGURATION_BUILD_DIR=~/Desktop
d. Assine a aplicação
xcrun -sdk iphoneos PackageApplication -v ~/Desktop/Example.app -o ~/Desktop/Example.ipa --sign "iPhone Distribution: <CERTIFICATE_NAME>" --embed ~/Desktop/Example_Ad_Hoc.mobileprovision
e. Faça upload para o TestFlight usando a API dele
curl http://testflightapp.com/api/builds.json
-F file=@"$HOME/Desktop/Example.ipa" # caminho para o arquivo .ipa
-F api_token='<YOUR_UPLOAD_API_TOKEN>' # encontre em https://www.testflightapp.com/account/#api
-F team_token='<YOUR_TEAM_TOKEN>' # encontre em https://www.testflightapp.com/dashboard/team/edit/
-F notes="`git log -1 --pretty=%B`" # retorna a mensagem do último commit
-F distribution_lists='devs' # o mesmo nome da sua lista de distribuição no Testflight
Execute "Build Now" e o script deve funcionar como esperado.
Dica
Caso tenha problemas ao instalar a app em seu celular, tente usar o iPhone Configuration Utility para ver os logs dele.
Isso é tudo por enquanto. Estou curioso, qual sua opnião sobre o processo? Você tem uma abordagem diferente para atingir o mesmo objetivo?
Compartilhe seus pensamentos conosco logo abaixo...
Aviso: As afirmações e opiniões expressas neste artigo são de responsabilidade de quem o assina, e não necessariamente refletem as posições da Thoughtworks.