Skip to content

Instantly share code, notes, and snippets.

@rafaelcorreiapoli
Last active January 9, 2018 13:49
Show Gist options
  • Save rafaelcorreiapoli/f5657a6a887a242893e18e6e043a4c84 to your computer and use it in GitHub Desktop.
Save rafaelcorreiapoli/f5657a6a887a242893e18e6e043a4c84 to your computer and use it in GitHub Desktop.

Unleash - React Native

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment