Skip to content
Roni Castro edited this page Feb 22, 2021 · 4 revisions

Configuração Fastlane em um novo projeto.

Tutorial baseado na documentação oficial do Fastlane + React-Native-BoilerPlate

Atualmente o fastlane requer o Ruby instalado na máquina com a versão 2.4 - 2.7, Verifique a versão atual da sua máquina via ruby -v, se for >2.7, precisará instalar uma versão instalar uma versão no intervalo mencionado. Para isso utilize algum gerenciador de versão como o rvm para conseguir instalar a versão 2.7, por exemplo.

Instalação do rvm + Ruby versão 2.7 (Etapa opcional, caso a máquina já tenha instalado Ruby 2.4 até 2.7)

1 - Instala o rvm

\curl -sSL https://get.rvm.io | bash -s stable 

2 - Instala a versão 2.7.X do ruby usando rvm

rvm install 2.7

3 - Assim que for instalado, verifique a versão instalada usando rvm list e atribua a versão do ruby 2.7 como a default.

rvm use --default 2.7  

Instalação do Fastlane

Instale o fastlane na sua máquina usando Homebrew ou então via Bundler:

Opção 1 usando Homebrew (mais lenta)

brew install fastlane

Opção 2 usando Bundler + Gemfile (Recomendada pela docs e mais rápida)

Rode o comando abaixo para instalar o Bundler na sua máquina. Ele será usado para versionar e configurar o fastlane em conjunto com o Gemfile.

gem install bundler

Crie o arquivo Gemfile na raiz do seu projeto

touch Gemfile

Adiciona o código abaixo dentro do arquivo Gemfile

source "https://rubygems.org"
gem "fastlane"

Execute o comando abaixo para atualizar/instalar a dependência do fastlane e gerar o Gemfile.lock

bundle update

Para executar o fastlane será necessário rodá-lo usando o comando bundle exec e adicionar a instalação do bundler como primeiro passo no CI (caso ele não venha instalado). Exemplo de como terá que ser executado uma lane do fastlane bundle exec fastlane [lane]

Configuração Android

Inicialize o fastlane no android, indo até esta pasta do projeto

cd android
fastlane init

Isso irá gerar dois arquivos:

Appfile: arquivo que contêm identificadores usado para conectar com o Google Play Console e linkar o arquivo JSON responsável por permitir fazer upload na PlayStore (key.json).

Fastfile: arquivo que contêm todas as lanes e as ações que serão feitas para conseguir gerar o build e o deploy do app na loja

Configurar o arquivo key.json baixado do PlayConsole a ser usado para fazer deploy do app na Google Play Store

Altere o json_key_file no arquivo android/AppFile por json_key_data_raw para não precisar comitar o arquivo .json baixado da Playstore no projeto e aumentar a segurança do projeto.

  • Exemplo: json_key_data_raw ENV['MYAPP_PLAYSTORE_KEY_JSON_DATA']
  • Salve os dados do json na variável de ambiente no formato de string e sem quebra de linha:
export MYAPP_PLAYSTORE_KEY_JSON_DATA='{conteudo do JSON, removendo as quebras de linhas \n}'

Configurar a chave e as variáveis de ambiente a serem usadas para assinar o app Android

Por segurança, você não deve comitar a chave privada usada para assinar o seu apk, com isso iremos gerar um base64 dela para conseguir salvar no futuro no environment do CI.

1 - Copie o arquivo production.keystore gerado anteriormente para dentro da pasta android e execute o comando abaixo estando dentro desta pasta.

base64 -in production.keystore -o production.keystore.b64

2 - Atribua os valores para as chaves abaixo com base nos valores que já foram previamente definidos ao gerar a chave .keystore e o valor do base64 gerado no passo anterior. Exemplo:

export MYAPP_UPLOAD_STORE_FILE=production.keystore
export MYAPP_UPLOAD_KEY_ALIAS=my-app-alias
export MYAPP_UPLOAD_STORE_PASSWORD=myStorePassword123
export MYAPP_UPLOAD_KEY_PASSWORD=mykeyPassword123
export MYAPP_KEYSTORE_BASE64=/u3+…P/

export MYAPP_PLAYSTORE_KEY_JSON_DATA='{"type": "service_account"…iam.gserviceaccount.com"}'

Configurar script de build + deploy do app na PlayStore Beta:

1 - Abra o arquivo Fastfile existente na pasta android e adicione a lane abaixo para obter o conteudo das variáveis de ambiente, gerar o build do apk e fazer o deploy na loja:

default_platform(:android)

# Create properties variable to hold the android keystore data stored on environment variables
properties = {
  "android.injected.signing.store.file" => ENV['MYAPP_UPLOAD_STORE_FILE'],
  "android.injected.signing.store.password" => ENV['MYAPP_UPLOAD_STORE_PASSWORD'],
  "android.injected.signing.key.alias" => ENV['MYAPP_UPLOAD_KEY_ALIAS'],
  "android.injected.signing.key.password" => ENV['MYAPP_UPLOAD_KEY_PASSWORD'],
}

platform :android do

  desc "Deploy a new `.apk` version to the Google PlayStore Beta"
  lane :beta_apk do
    # Clear any gradle cache
    gradle(task: "clean")
    # Generate apk by running assembleRelease with the signing properties
    gradle(
      task: "assemble", #apk
      build_type: 'Release',
      print_command: false, #Do not print the signing passwords
      properties: properties
    )
    # Upload the artifact saved on the default gradle output path, to the PlayStore track, using the json_key_data_raw (See: android/fastlane/Appfile)
    upload_to_play_store(
      track: "beta",
      apk: "#{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]}", #apk
      json_key_data: CredentialsManager::AppfileConfig.try_fetch_value(:json_key_data_raw)
    )
  end
end

2 - Para testar o deploy localmente, será necessário ter a chave production.keystore dentro da pasta android/app. Para gerar ela basta rodar o comando abaixo estando dentro da pasta android. Ele basicamente irá pegar o conteúdo base64 presente no environment MYAPP_KEYSTORE_BASE64 do terminal e gerar uma chave com o nome que está na variável MYAPP_UPLOAD_STORE_FILE, dentro da pasta android/app/ e android/:

echo $MYAPP_KEYSTORE_BASE64 | base64 -d > app/${MYAPP_UPLOAD_STORE_FILE} > ${MYAPP_UPLOAD_STORE_FILE}

3 - Execute o comando abaixo para iniciar o processo de build e de deploy na loja da Google PlayStore Beta

fastlane android beta_apk # se estiver instalado via homebrew
bundle exec fastlane android beta_apk # se estiver instalado via Bundler