Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

471 views

Published on

Heloisa Simon, Web and Android Developer da mobLee fala sobre Gerenciando deploy e atualização de 450 apps sem enlouquecer no InterCon 2016.
Saiba mais em http://intercon2016.imasters.com.br/

Published in: Technology

InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

  1. 1. Gerenciando 450 apps sem enlouquecer Heloisa Simon
  2. 2. Heloisa Simon Lead Android Developer mobLee
  3. 3. Como assim 450 apps?Como assim 450 apps?
  4. 4. 2012
  5. 5. Módulo Expositores Green Valley Módulo Mapa do evento Módulo Redes Sociais Módulo Agenda Dream Valley Bienal do Livro Repositório GIT Android/iOS em 2012
  6. 6. 2013
  7. 7. Estrutura Android API iOS CMS
  8. 8. mobLee Library Congresso Y Evento Corporativo W Feira de Exposição X Feira de Exposição Y Congresso X Evento Corporativo T 31º CBEM Congresso Bras. de Neurologia Bienal do Livro Repositório GIT Android/iOS em 2013
  9. 9. Para cada evento Strings <resources> <string name="section_info">Informaçõe <string name="section_description">Des <string name="section_detail">Detalhes <string name="section_product_visitati <string name="section_company_visitati <string name="section_ongoing_visitati <string name="section_contact">Contato <string name="section_company">Empresa <string name="section_about">Sobre</st <string name="section_social">Redes so <string name="section_job">Profissão</ <string name="section_comment">Comentá <string name="section_qualification">Q <string name="detail_title_stand">Esta <string name="detail_title_address">En <string name="detail_title_phone">Tele <string name="detail_title_fax">Fax</s <string name="detail_title_website">Si
  10. 10. Para cada evento Cores <resources> <color name="past_event_waiting">#9999 <color name="background_color">#F0F0F0 <color name="products">#29ABE2</color> <color name="alarm_on">#8cc63f</color> <color name="favorite_on">#f5b519</col <color name="side_menu_color">#666666< <color name="pressed_moblee_color">#AA <color name="list_section_color">#6666 <color name="main_bar_color">#CCCCCC</ <color name="button_color">#E9145F</co <color name="calendar_line">#BBBBBB</c <color name="calendar_second_line">#AA <color name="text">#636363</color> <color name="pager_indicator">#666666< <color name="pending_approval">#F7931E <color name="rating5">#F15A24</color> <color name="rating4">#F7931E</color> <color name="rating3">#FBB03B</color>
  11. 11. Para cada evento Imagens
  12. 12. Para cada evento Screenshots
  13. 13. Para cada evento Publicação no Google Play
  14. 14. Para cada evento Repositório git ● Criar repositório ● git push
  15. 15. INVIÁVEL
  16. 16. 2015
  17. 17. Automatizando O checklist ● Dados no backend ○ Strings ○ Cores ○ Imagens ○ Funcionalidades ● Script que substitui o checklist
  18. 18. Automatizando O checklist ● Script ○ Lê dados da API REST e substitui arquivos de configurações string.xml, colors.xml ○ Faz download das imagens necessárias: launcher, ícones, splashscreen ○ Configura endpoints ○ Configura funcionalidades ○ Assina e Gera os apps
  19. 19. Automatizando ● Android Gradle: Analytics, API Keys, Endpoints android { … defaultConfig { applicationId [APPLICATION_ID] minSdkVersion 16 targetSdkVersion 24 versionCode [VERSION_CODE] versionName [VERSION_NAME] buildConfigField "String", "ENDPOINT", [END_POINT] buildConfigField "String", "ANALYTICS", [ANALYTICS] buildConfigField "String", "PARSE_APP_ID", [APP_ID] buildConfigField "String", "PARSE_CLIENT_KEY", [CLIENT_KEY] … }
  20. 20. Automatizando App por linha de comando ./gradlew assembleDebug ./gradlew assembleRelease buildTypes { debug { applicationIdSuffix ".dbg" } release { proguardFiles getDefaultProguardFi } }
  21. 21. mobLee Framework Repositório GIT Android/iOS em 2015
  22. 22. Automatizando Screenshots ● Existem formas de automatizar ● No Photoshop ● A aprovação do cliente é a primeira etapa, por isso não está junto com o script.
  23. 23. Photoshop
  24. 24. Publicação No Google Play Na App Store ● Manual: ○ Criar app na loja
  25. 25. Publicação No Google Play Na App Store ● Mas todo o restante é possível automatizar
  26. 26. ● GET versionCode https://www.googleapis.com/androidpublis her/v2/applications/packageName/edits/ed itId/tracks/track ● POST APK https://www.googleapis.com/upload/androi dpublisher/v2/applications/packageName/e dits/editId/apks ● POST screenshots https://www.googleapis.com/upload/androi dpublisher/v2/applications/packageName/e dits/editId/listings/language/imageType Publicação Google Play Developer API
  27. 27. Automatização Jenkins ● Integração Contínua ○ Compilação de projeto ○ Automatização de testes ● Independente de plataforma ○ Android e iOS ● Faz checkout no master ● Executa script ● Gera App ● Faz upload no app no slack
  28. 28. Automatização Jenkins-Plugin google-play-android-publisher
  29. 29. Automatização ● Disponível para Android e iOS ○ Build ○ Roda testes ○ Tira screenshots ○ Faz upload das screenshots ○ Gera certificados (iOS) Fastlane
  30. 30. Automatização Fastlane default_platform: android platform :android do desc "Roda testes" Lane :test do gradle(task: "test") end desc "Envia nova versão para o Google lane :deploy do gradle(task: "assembleRelease") supply end
  31. 31. Será que a automatização resolveu tudo?
  32. 32. Atualizações Dos aplicativos ● Alterações: ○ Ícones ○ Strings ○ Cores ○ Funcionalidades ● Verificar as alterações ● Rodar script
  33. 33. Atualizações Dos aplicativos
  34. 34. Dinamizar é tão importante quanto Automatizar
  35. 35. Dinamizando O aplicativo ● Todas as strings podem ser alteradas ● Todas as cores podem ser alteradas ● Todos os ícones podem ser alterados. ● Todas as funcionalidades podem ser alteradas.
  36. 36. Dinamizando O aplicativo ● Requisições para a API ● String: verifica se foi atualizada, senão usa do strings.xml ● Colors: verifica se foi atualizada, senão usa do colors.xml ● Funcionalidades com flag e permissões de acesso.
  37. 37. Dinamizando O aplicativo
  38. 38. Dinamizando O aplicativo Mas quem vai configurar tudo no backend?
  39. 39. Dinamizando O aplicativo O CLIENTE!
  40. 40. Customer Success ● Acompanham o cliente ● Recebem e-mail ● Publicam os aplicativos
  41. 41. Desenvolvedores RELEASE Customer Success DEPLOY
  42. 42. Estrutura And API iOS CMS
  43. 43. REST API backend Rápida Leve Conteúdos Idiomas
  44. 44. REST API backend Integração entre APIs
  45. 45. Só tenho um aplicativo, não preciso dinamizar
  46. 46. Chegou o natal. E agora?
  47. 47. Firebase ● Banco de Dados ● Analytics ● Autenticação ● Armazenamento ● Monitoramento de crash ● Remote Configs
  48. 48. <?xml version="1.0" encoding="utf-8"?> <defaultsMap> <entry> <key>welcome_phrase</key> <value>Welcome</value> </entry> <entry> <key>primary_color</key> <value>#A4CA39</value> </entry> <entry> <key>android_image</key> <value>http://www.example.com/androidimage.jpg</value> </entry> </defaultsMap>
  49. 49. mRemoteC.setDefaults(R.xml.remote_config_defaults); String welcome = mRemoteC.getString("welcome_phrase"); String color = mRemoteC.getString("primary_color"); String image = mRemoteC.getString("android_image"); mRemoteC.fetch(cacheExpiration) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(Task<Void> task) { if (task.isSuccessful()) { mRemoteC.activateFetched(); } } });
  50. 50. RESUMÃO ● Identifique repetições ○ Atacar tarefas longas ● Automatize tarefas ● Automatize o deploy ● Evite atualização ○ Deixe dinâmico ● Use ferramentas! Não reinvente a roda
  51. 51. Gerenciando 450 apps sem enlouquecer Obrigada heloisa@moblee.net

×