Logo

dev-resources.site

for different kinds of informations.

Protegendo credenciais em automatização de builds no Fastlane com Variáveis de Ambiente

Published at
10/16/2024
Categories
swift
fastlane
ios
mobile
Author
lys
Categories
4 categories in total
swift
open
fastlane
open
ios
open
mobile
open
Author
3 person written this
lys
open
Protegendo credenciais em automatização de builds no Fastlane com Variáveis de Ambiente

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
Enter fullscreen mode Exit fullscreen mode

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:

  1. Nome do projeto Xcode (xcodeproj).
  2. Nome do scheme do projeto (scheme).
  3. Método de exportação (export_method).
  4. Bundle Identifier do app (primeira parte do provisioningProfiles).
  5. Nome do perfil de provisionamento (segunda parte do provisioningProfiles).
  6. ID da chave da App Store Connect API (key_id).
  7. ID do emissor da App Store Connect API (issuer_id).
  8. 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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Acessaremos os valores adicionados com um ENV['']

ENV['YOUR_VARIABLE_NAME']
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
fastlane Article's
30 articles in total
Favicon
From days to minutes: Build and publish React Native apps using Fastlane and Github Actions
Favicon
[Boost]
Favicon
The Ultimate Guide to Automating Android APK Builds and Firebase Distribution with Fastlane 🚀
Favicon
From Manual to Automatic: The Magic of CI/CD Pipelines! 🤯
Favicon
Protegendo credenciais em automatização de builds no Fastlane com Variáveis de Ambiente
Favicon
GUI for fastlane?
Favicon
Steps to Add and Upload testflight Using Fastlane
Favicon
Simplifying Flutter Deployment with FastLane
Favicon
🚀 Added new YouTube series on "Flutter CI/CD with GitLab and Fastlane" !
Favicon
Automate publishing your android app to Google Play Store with Fastlane and Github Actions
Favicon
GitHub Actions CI/CD for Flutter Fastlane (iOS) with possible mistakes
Favicon
Criando uma conta e configurando um projeto no CodeMagic
Favicon
Automatically add new devices to the Apple Developer Portal (GitHub Actions & Fastlane)
Favicon
Fastlane: 深入浅出一看你就懂
Favicon
Fastlane: iOS 和 Android 的自动化构建工具
Favicon
Fastlane with React Native — Part-1
Favicon
Deploy iOS Application to AppCenter via Github Actions (Manual Code SignIn)
Favicon
Single point versioning with Fastlane for React Native
Favicon
Unable to use Fastlane on macOS Monterey 12.1
Favicon
Automating Flutter App Versioning Using Fastlane Plugin
Favicon
How To Automate App Releases using Fastlane and SemVer for Hybrid Applications
Favicon
Building and Deploying Flutter Apps from CI with Fastlane: How to Reuse Code Efficiently
Favicon
How to run Fastlane and GitLab with AppStore Connect API
Favicon
Automating mobile application deployments using Fastlane and CI/CD tools
Favicon
React Native e2e tests and Automatic Deploys (Detox + Fastlane + CircleCI)
Favicon
Deploy React Native app on Playstore with Fastlane and Github Actions ( 1 / 2 )
Favicon
Deploy React Native app on Playstore with Fastlane and Github Actions ( 2 / 2 )
Favicon
CI/CD in iOS Development
Favicon
Como configurar Fastlane para Firebase App Distribution (Android e iOS)
Favicon
Flutter + Fastlane + Github Actions

Featured ones: