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)