O desenvolvedor executa
$ unleash project seed react-native -n "Bro Challenge"
É criado um arquivo json onde o desenvolvedor irá inputar diversas configurações do app (algumas coisas ja vem preenchidas pela opção -n). Atualmente, este arquivo está assim:
{
"type": "react-native",
"name": "Bro Challenge",
"template": "https://github.com/thunder-js/react-native-ts-lab#1.0"
"node": {
"packageName": "bro-challenge"
},
"facebook": {
"appId": "",
"appDisplayName": "Bro Challenge"
},
"googleMaps": {
"apiKey": ""
},
"assets": {
"icon": "",
"splash": ""
},
"ios": {
"displayName": "Bro Challenge",
"projectName": "Bro-Challenge",
"bundleName": "com.thunderjs.bro-challenge",
"fastlane": {
"itcTeamId": "",
"teamId": "",
"appleId": "",
"certificatesRepoUrl": "",
"slackUrl": ""
}
},
"android": {
"displayName": "Bro Challenge",
"bundleName": "com.thunderjs.bro-challenge",
...
},
"betaTesters": ["email1@gmail.com", "email2@gmail.com"]
}
O desenvolvedor preenche os dados restantes (ou remove as keys de features que ele não vai usar, por exemplo facebook
e/ou googleMaps
)
O desenvolvedor executa (passando o caminho correto do json)
unleash project grow ./seed.json
O unleash irá clonar o projeto template via git, usando a repositorio e release informados.
Por exemplo https://github.com/thunder-js/react-native-ts-lab#1.0
(reparem no 1.0)
Neste template, tem arquivo de config na raiz que mapeia valores pra nome de variaveis, por exemplo:
1234512314123:facebook.appId
MyTemplate:ios.projectName
Primeiro, o unleash irá gerar os diversos tamanhos de icon a partir do icon passado (que deve ser 1024x1024), inclusive trocando o canal alfa por branco para o icone da Apple Store (que não pode ter fundo branco).
Ele também irá configurar as splash screens do app, a partir da splash passada, fazendo o resize e as adaptações necessárias, de forma automática.
Depois, o unleash fará uma substituição de valores, por exemplo 1234512314123
vai virar o facebook.appId
passado no seed.json
Com isso voce tem um projeto novo gerado a partir de outro projeto.
A grande vantagem desse metodo de substituição apenas no passo de renderização é que o projeto template é um projeto que de fato funciona,
ele nao é um monte de arquivo .ejs com <%...%>
que não compilam.. Ou seja, o desenvolvedor pode iterar neste projeto template (adicionando novas features), commitar uma nova release (2.0 por exemplo) e dai gerar novos projetos a partir dele.
Bom, com os arquivos do projeto criados, o unleash vai fazer os seguintes passos:
- Gerar os certificados (dev e release) e commita-los num repositorio compartilhado pelo time (https://codesigning.guide/)
- Criar o app na apple store e itunes connect
- Compilar o app e subir pro testflight, com os betaTesters especificados (dai eles ja vao receber os e-mails pra testar)
- Configurar o codePush para o projeto, interagindo com a code-push-cli
- Gerar o primeiro apk assinado
O desenvolvedor cria o app na Google Play e sobe o primeiro apk manualmente. (É um passo manual necessário devido à limitações da Google Play).
A partir deste momento, o desenvolvedor tem estes comandos disponíveis
release-push:ios
Após fazer modificações na base de código JS, execute este comando para atualizar o app dos usuários iOS
release-push:android
Após fazer modificações na base de código JS, execute este comando para atualizar o app dos usuários Android
beta-store:ios
Após fazer modificações na base de código nativa iOS, execute este comando para subir uma nova versão para o Testflight
beta-store:android
Após fazer modificações na base de código nativa iOS, execute este comando para subir uma nova versão para o Google Play Beta
release-store:ios
Após fazer modificações na base de código nativa iOS, execute este comando para subir uma nova versão para fazer o release da nova versão na Apple Store
release-store:android
Após fazer modificações na base de código nativa iOS, execute este comando para subir uma nova versão para fazer o release da nova versão na Google Play
A maioria destes comandos deve ser integrado na pipeline de CI da equipe, para garantir que os testes estejam passando e etc...
Todas as interações importantes com a Apple e Google (por exemplo release de uma nova versão) são avisadas para equipe via Slack