Fastlane 정리

준우·2024년 6월 26일
post-thumbnail

예전에 사용한 기억이 사라지기 전에 정리한 Fastlane입니다

iOS 및 Android 앱의 베타 배포 및 릴리스를 자동화해주는 Tool

Fastlane 파일 구성

Fastlane은 아래의 4개의 파일로 구성되어 있음.

  • Fastfile
  • Appfile
  • Gemfile
  • Matchfile

Fastfile

Fastfile은 fastlane으로 실행할 수 있는 자동화 구성을 저장해놓은 파일

  • 예시
default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  lane :custom_lane do
    # add actions here: https://docs.fastlane.tools/actions
  end
end

Appfile

Appfile은 Apple ID 또는 애플리케이션 Bundle Identifier와 같은 정보를 저장해놓은 파일

  • 예시
app_identifier "your-app-bundle-identifier"

Gemfile

Fastlane을 사용할 때 프로젝트의 종속성을 관리하기 위해 루비 프로그래밍 언어에서 사용하는 파일
즉, 외부 의존성 파일을 다룸.

  • 예시
source "https://rubygems.org"

gem "fastlane"
gem "dotenv"

Matchfile

Fastlane 이 Provisioning Profiles / Certificates 를 자동적으로 관리할 수 있도록 관리해주는 파일

Matchfile 에 들어가는 내용은 아래 내용들이 있으며, 본인 사용환경에 따라 더 추가될 수 있음.

  • type(관리할 타입, 만약 App Store에 배포할 예정이라면, appstore를 입력할 것)
  • storage_mode(Git, google_cloud, s3, gitlab_secure_files 중 저장할 위치 선택)
  • app_identifier(Fastlane 을 사용하여 배포할 App의 BundleID)
  • git_url(Match 파일 인증서를 보관한 Private Git URL)

예시)

type("appstore")
storage_mode("git")
app_identifier("App BundleID")
git_url("Match 인증서가 들어있는 Private Github URL")

Fastlane 시작

fastlane init

Match 인증서 관련

match 를 사용하게 되면 원격 저장소에서 배포 인증서와 프로비저닝 프로필을 저장하여 사용할 수 있음.

Match 시작

match init

Match를 사용하다보면, 민감한 데이터들을 사용해야 합니다.

그래서 .env 파일을 만들어 민감한 데이터들을 관리해야 합니다.

env 파일을 사용할려면, Gemfile 에 아래 내용을 입력합니다.

gem "dotenv"

그리고 아래 명령어를 입력해야 적용이 됩니다.

bundle install

위 명령어를 입력한 후, 두 개의 .env 파일이 생성합니다.

  • .env.default.sample : env 템플릿용 가이드라인 문서
  • .env.default : 민감한 데이터들을 적어놓은 문서(⚠️ 절대 Github에 올라가면 안됩니다.)
touch .env.default.sample
touch .env.default

참고🚨
env 파일이 안 보인다면, 해당 폴더에서 Shift + Command + . 를 입력하세요.
터미널을 사용한다면, 해당 폴더 경로에서 ls -a 을 입력하세요.

Env 파일 구성(⚠️아래 자료는 절대 유출되어선 안됩니다.)

# 사용하고 있는 Mac 비밀번호
MATCH_PASSWORD=

# (선택)Mac 로그인 비밀번호
MATCH_KEYCHAIN_PASSWORD=

# Fastlane Team ID
FASTLANE_TEAM_ID=

# 인증서를 생성하지 않는 한 필요하지 않습니다.
# 인증서의 유일한 생성자가 되어야 하는 팀의 공유 애플 ID.
# 경고: 혹시라도 당신은 당신의 계정을 사용해야 합니다.
MATCH_USERNAME=

# CI only keys for uploading app to store
APP_STORE_CONNECT_API_KEY_KEY_ID=
APP_STORE_CONNECT_API_KEY_ISSUER_ID=
APP_STORE_CONNECT_API_KEY_KEY=

참고
APP_STORE_CONNECT 참고 자료 : [🔗LINK]
Apple Documentation : [🔗LINK]

Env 파일 Gitignore 파일에 추가하기

fastlane/.env.default

Match 인증서를 지우고 싶을 때?? - Match 인증서 생성 이전에 먼저 하는 것을 추천함.

fastlane match nuke development // development 지우기
fastlane match nuke appstore // appstore 지우기
fastlane match nuke distribution // distribution 지우기
fastlane match nuke enterprise // enterprise 지우기

Match 인증서 생성

아래 명령어를 입력하세요.

fastlane match development // Debug용
fastlane match appstore // 배포용

협업하는 팀원은 Match 인증서를 어떻게 써야하죠??

협업하는 팀원은 아래 명령어를 입력해야 한다.

fastlane match development --readonly

Match 인증서의 비밀번호를 변경하고 싶을 때??

fastlane match change_password

Fastfile Match 설정

default_platform(:ios)

app_identifier = CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)

platform :ios do

  desc "match certificates"
  lane :match_certificates do // -> lane 에 있는 것을 입력할 것
    match(type: "development", 
    app_identifier: app_identifier
    )
    match(type: "appstore",
    app_identifier: app_identifier
    )
end

// 실행하고 싶으면? 아래 내용 Terminal에 입력
fastlane match_certificates 

Scan : Fastlane을 사용하여, Test 를 진행해주는 Tool

fastlane에는 test 를 진행할 수 있게 해주는 기능이 존재함. 그게 바로 Scan이라는 것임.

// Fastfile에 추가
#Tests
  desc "Run all the tests"
  lane :run_unit_tests do // -> lane 에 있는 것을 입력할 것
    scan(
      scheme: "SomeApp", // 앱 이름
      clean: true,
      devices: ["iPhone 13 Pro"] // 테스트할려는 기기 입력
      )
    end
    
// 실행하고 싶으면? 아래 내용 Terminal에 입력
fastlane run_unit_tests 

Gym : Fastlane을 사용하여, ipa 또는 app 파일을 만드는 Tool

fastlane에는 ipa 또는 app 파일을 만들 수 있게 해주는 기능이 존재함. 그게 바로 gym이라는 것임.

#Gym/Build app
    desc "Build the app"
    lane :gym_app do
      match_certificates
      increment_build_number
      gym(scheme: "SomeApp") // 앱 이름
      git_commit(path: "*", message: "Bump build to #{get_build_number}") // git commit 남기고 싶을 때 사용(선택)
    end
    
// 실행하고 싶으면? 아래 내용 Terminal에 입력
fastlane gym_app 

위 명령어를 입력하면, 2개의 파일이 만들어짐

  • 앱이름.app.dSYM.zip
  • 앱이름.ipa

위 두 파일은 TestFlight 에 사용할 수 있음.(베타 테스터용)

Pilot : Fastlane을 사용하여, TestFlight에 업로드해주는 Tool

Pilot 라는 기능을 사용해, 업로드, 배포를 할 수 있음 그리고 테스터를 추가/삭제 할 수 있으며, 테스트와 관련된 추가 기능을 사용할 수 있음.

// 앱스토어 키
app_store_connect_api_key_id = "#{ENV["APP_STORE_CONNECT_API_KEY_KEY_ID"]}"
// 앱스토어 ISSUER ID
app_store_connect_api_issuer_id = "#{ENV["APP_STORE_CONNECT_API_KEY_ISSUER_ID"]}"
// 앱스토어 API의 .p8 파일 경로
app_store_connect_api_p8_contents = File.read("#{ENV["app_store_connect_api_file_path"]}")

fastlane 에서 실행할려면 아래 코드를 사용하면 됨.

desc "Upload to TestFlight"
  lane :pilot_to_testflight do
    api_key = app_store_connect_api_key(
      key_id: app_store_connect_api_key_id,
      issuer_id: app_store_connect_api_issuer_id,
      key_content: app_store_connect_api_p8_contents, # 직접 문자열 또는 File.read로 파일 내용을 읽어옵니다.
      is_key_content_base64: true # .p8 파일 내용을 직접 전달하는 경우 false입니다.
    )
  
    pilot(api_key: api_key)
  end
  
// 실행하고 싶으면? 아래 내용 Terminal에 입력
fastlane pilot_to_testflight

참고 자료

  1. FastLane Official Documentation : [🔗LINK]
  2. FastLane Tutorial - Medium : [🔗LINK]
  3. FastLane Tutorial -Medium(Ver. KOR): [🔗LINK]

0개의 댓글