-
Notifications
You must be signed in to change notification settings - Fork 1
Home
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
Instale o fastlane na sua máquina usando Homebrew ou então via Bundler:
brew install fastlane
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]
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}'
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"}'
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