intercon 2016 - gerenciando deploy e atualização de 450 apps sem enlouquecer

65
Gerenciando 450 apps sem enlouquecer Heloisa Simon

Upload: imasters

Post on 07-Jan-2017

93 views

Category:

Technology


2 download

TRANSCRIPT

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

Gerenciando 450 apps sem enlouquecer

Heloisa Simon

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

Heloisa SimonLead Android Developer

mobLee

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

Como assim 450 apps?Como assim 450 apps?

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

2012

Page 5: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 6: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

Módulo Expositores

Green Valley

Módulo Mapa do evento

Módulo Redes Sociais

Módulo Agenda

Dream ValleyBienal do Livro

Repositório GIT Android/iOS em 2012

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

2013

Page 8: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 9: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

Estrutura

Android

API

iOS

CMS

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

mobLeeLibrary

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 NeurologiaBienal do Livro

Repositório GIT Android/iOS em 2013

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

Para cada eventoStrings

<resources> <string name="section_info">Informações</string> <string name="section_description">Descrição</string> <string name="section_detail">Detalhes</string> <string name="section_product_visitation">Visitação</string> <string name="section_company_visitation">Visitação</string> <string name="section_ongoing_visitation">Visitação</string> <string name="section_contact">Contato</string> <string name="section_company">Empresa</string> <string name="section_about">Sobre</string> <string name="section_social">Redes sociais</string> <string name="section_job">Profissão</string> <string name="section_comment">Comentários</string> <string name="section_qualification">Qualificação</string> <string name="detail_title_stand">Estande</string> <string name="detail_title_address">Endereço</string> <string name="detail_title_phone">Telefone</string> <string name="detail_title_fax">Fax</string> <string name="detail_title_website">Site</string> <string name="detail_title_email">E-mail</string> <string name="detail_title_local">Local</string>

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

Para cada evento

Cores

<resources> <color name="past_event_waiting">#99999999</color> <color name="background_color">#F0F0F0</color> <color name="products">#29ABE2</color> <color name="alarm_on">#8cc63f</color> <color name="favorite_on">#f5b519</color> <color name="side_menu_color">#666666</color> <color name="pressed_moblee_color">#AA39C3C1</color> <color name="list_section_color">#666666</color> <color name="main_bar_color">#CCCCCC</color> <color name="button_color">#E9145F</color> <color name="calendar_line">#BBBBBB</color> <color name="calendar_second_line">#AAAAAA</color> <color name="text">#636363</color> <color name="pager_indicator">#666666</color> <color name="pending_approval">#F7931E</color> <color name="rating5">#F15A24</color> <color name="rating4">#F7931E</color> <color name="rating3">#FBB03B</color> <color name="rating2">#FBC31B</color> <color name="rating1">#FBD710</color>

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

Para cada eventoImagens

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

Para cada eventoScreenshots

Page 15: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 16: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

Para cada evento

Publicação no Google Play

Page 17: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 18: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 19: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

Para cada evento

Repositório git

● Criar repositório● git push

Page 20: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 21: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 22: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

INVIÁVEL

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

2015

Page 24: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 25: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

AutomatizandoO checklist

● Dados no backend○ Strings○ Cores○ Imagens

○ Funcionalidades

● Script que substitui o checklist

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

AutomatizandoO 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

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

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] … }

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

AutomatizandoApp por linha de comando

./gradlew assembleDebug

./gradlew assembleRelease

buildTypes { debug { applicationIdSuffix ".dbg" } release { proguardFiles getDefaultProguardFile(...) }}

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

mobLeeFramework

Repositório GIT Android/iOS em 2015

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

AutomatizandoScreenshots

● Existem formas de automatizar

● No Photoshop

● A aprovação do cliente é a primeira etapa, por isso não está junto com o script.

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

Photoshop

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

PublicaçãoNo Google PlayNa App Store

● Manual: ○ Criar app na loja

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

PublicaçãoNo Google PlayNa App Store

● Mas todo o restante é possível automatizar

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

● GET versionCodehttps://www.googleapis.com/androidpublisher/v2/applications/packageName/edits/editId/tracks/track

● POST APKhttps://www.googleapis.com/upload/androidpublisher/v2/applications/packageName/edits/editId/apks

● POST screenshotshttps://www.googleapis.com/upload/androidpublisher/v2/applications/packageName/edits/editId/listings/language/imageType

Publicação Google Play Developer API

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

AutomatizaçãoJenkins

● 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

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

AutomatizaçãoJenkins-Plugin

google-play-android-publisher

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

Automatização● Disponível para

Android e iOS○ Build○ Roda testes○ Tira screenshots○ Faz upload das screenshots○ Gera certificados (iOS)Fastlane

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

AutomatizaçãoFastlane

default_platform: android

platform :android do desc "Roda testes" Lane :test do gradle(task: "test") end

desc "Envia nova versão para o Google Play" lane :deploy do gradle(task: "assembleRelease") supply end

Page 39: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 40: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

Será que a automatização resolveu tudo?

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

Atualizações Dos aplicativos

● Alterações:○ Ícones○ Strings○ Cores

○ Funcionalidades

● Verificar as alterações● Rodar script

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

AtualizaçõesDos aplicativos

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

Dinamizar é tão importante quanto Automatizar

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

DinamizandoO 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.

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

DinamizandoO 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.

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

DinamizandoO aplicativo

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

DinamizandoO aplicativo

Mas quem vai configurar tudo no backend?

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

DinamizandoO aplicativo

O CLIENTE!

Page 49: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 50: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 51: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 52: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

Customer Success

● Acompanham o cliente● Recebem e-mail● Publicam os aplicativos

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

DesenvolvedoresRELEASE

Customer SuccessDEPLOY

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

Estrutura

And

API

iOS

CMS

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

REST APIbackend

Rápida Leve

Conteúdos Idiomas

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

REST APIbackend

Integração entre APIs

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

Só tenho um aplicativo, não preciso dinamizar

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

Chegou o natal.E agora?

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

Firebase

● Banco de Dados● Analytics● Autenticação● Armazenamento● Monitoramento de crash● Remote Configs

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

<?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>

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

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>() {

@Overridepublic void onComplete(Task<Void> task) { if (task.isSuccessful()) {

mRemoteC.activateFetched(); } }

});

Page 62: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 63: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
Page 64: InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer

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

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

Gerenciando 450 apps sem enlouquecer

[email protected]