Permitindo armazenar informações sensíveis, como API keys, tokens de autenticação e credenciais, de forma segura e fora do código-fonte, usar variáveis de ambiente reduz o risco de exposição desses dados ao fazer o versionamento do código.
Pensando na configuração de uma pipeline em Fastlane, para automatizar versões de teste, nosso arquivo Fastfile pode ser muito parecido com
default_platform(:ios) platform :ios do desc "Builds the app and pushes to TestFlight" lane :beta do increment_build_number( xcodeproj: "FastlaneIOSTest.xcodeproj" ) gym( scheme: "FastlaneIOSTest", export_method: "app-store", clean: true, export_options: { provisioningProfiles: { "br.com.lys.FastlaneIOSTest" => "iOS Distribution Profile - Fastlane Test" } } ) pilot( skip_waiting_for_build_processing: true, notify_external_testers: true, api_key: app_store_connect_api_key( key_id: "<SEU_KEY_ID>", issuer_id: "<SEU_ISSUER_ID>", key_filepath: "/caminho/para/sua/chave.p8" ) ) end end
Há valores que podemos adicioná-los em variáveis de ambiente, alguns para evitar informações hardcoded, facilitar manutenção e configuração para diferentes ambientes, mas também outros para não deixar exposto no código quando publicado.
As propriedades que achei que fariam sentido estar em uma variável de ambiente foram:
- Nome do projeto Xcode (xcodeproj).
- Nome do scheme do projeto (scheme).
- Método de exportação (export_method).
- Bundle Identifier do app (primeira parte do provisioningProfiles).
- Nome do perfil de provisionamento (segunda parte do provisioningProfiles).
- ID da chave da App Store Connect API (key_id).
- ID do emissor da App Store Connect API (issuer_id).
- Caminho para o arquivo da chave da App Store Connect API (key_filepath).
Há como criar variáveis de ambiente apenas com um comando no terminal
export VARIABLE_NAME="Your Value Here"
Mas desse jeito não é persistido em novas sessões de terminal, você precisa adicioná-la aos arquivos de configuração do shell, como .bashrc, .bash_profile ou .zshrc, para saber o shell que está em uso
echo $SHELL
Independente do que foi retornado, nano será o comando que usaremos para abrir, editar e adicionar nossas variáveis de ambiente, como abaixo
nano ~/.zshrc
Substituia o ~/.zshrc por ~/.bashrc ou ~/.bash_profile, caso seu tipo de shell não seja o zsh
Ao abrir, adicione o texto que terá os export's das suas variáveis de ambiente
export XCODEPROJ_NAME="YourNameApp.xcodeproj" export SCHEME_NAME="YourSchemeName" export EXPORT_METHOD="app-store" export BUNDLE_IDENTIFIER="br.com.YourBundleIdentifier" export PROVISIONING_PROFILE_NAME="Your Provisioning Profile - NameApp" export APP_STORE_CONNECT_API_KEY_ID="<YOUR_KEY_ID>" export APP_STORE_CONNECT_API_ISSUER_ID="<YOUR_ISSUER_ID>" export APP_STORE_CONNECT_API_KEY_FILE_PATH="/way/for/your/key.p8"
Após adicionado, no Nano, use Ctrl + O para salvar e Ctrl + X para sair.
Para aplicar as mudanças sem precisar reabrir o terminal, rode o comando source com o path correspondente, por exemplo
source ~/.zshrc
Acessaremos os valores adicionados com um ENV['']
ENV['YOUR_VARIABLE_NAME']
Então, atualizando os valores no Fastfile, ficará assim
default_platform(:ios) platform :ios do desc "Builds the app and pushes to TestFlight" lane :beta do increment_build_number( xcodeproj: ENV['XCODEPROJ_NAME'] ) gym( scheme: ENV['SCHEME_NAME'], export_method: ENV['EXPORT_METHOD'], clean: true, export_options: { provisioningProfiles: { ENV['BUNDLE_IDENTIFIER'] => ENV['PROVISIONING_PROFILE_NAME'] } } ) pilot( skip_waiting_for_build_processing: true, notify_external_testers: true, api_key: app_store_connect_api_key( key_id: ENV['APP_STORE_CONNECT_API_KEY_ID'], issuer_id: ENV['APP_STORE_CONNECT_API_ISSUER_ID'], key_filepath: ENV['APP_STORE_CONNECT_API_KEY_FILE_PATH'] ) ) end end
Top comments (0)