
iOS 및 Android 앱의 베타 배포 및 릴리스를 자동화해주는 Tool
Fastlane은 아래의 4개의 파일로 구성되어 있음.
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은 Apple ID 또는 애플리케이션 Bundle Identifier와 같은 정보를 저장해놓은 파일
app_identifier "your-app-bundle-identifier"
Fastlane을 사용할 때 프로젝트의 종속성을 관리하기 위해 루비 프로그래밍 언어에서 사용하는 파일
즉, 외부 의존성 파일을 다룸.
source "https://rubygems.org"
gem "fastlane"
gem "dotenv"
Fastlane 이 Provisioning Profiles / Certificates 를 자동적으로 관리할 수 있도록 관리해주는 파일
Matchfile 에 들어가는 내용은 아래 내용들이 있으며, 본인 사용환경에 따라 더 추가될 수 있음.
예시)
type("appstore")
storage_mode("git")
app_identifier("App BundleID")
git_url("Match 인증서가 들어있는 Private Github URL")
fastlane init
match 를 사용하게 되면 원격 저장소에서 배포 인증서와 프로비저닝 프로필을 저장하여 사용할 수 있음.
match init
Match를 사용하다보면, 민감한 데이터들을 사용해야 합니다.
그래서 .env 파일을 만들어 민감한 데이터들을 관리해야 합니다.
env 파일을 사용할려면, Gemfile 에 아래 내용을 입력합니다.
gem "dotenv"
그리고 아래 명령어를 입력해야 적용이 됩니다.
bundle install
위 명령어를 입력한 후, 두 개의 .env 파일이 생성합니다.
touch .env.default.sample
touch .env.default
참고🚨
env 파일이 안 보인다면, 해당 폴더에서 Shift + Command + . 를 입력하세요.
터미널을 사용한다면, 해당 폴더 경로에서 ls -a 을 입력하세요.
# 사용하고 있는 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]
fastlane/.env.default
fastlane match nuke development // development 지우기
fastlane match nuke appstore // appstore 지우기
fastlane match nuke distribution // distribution 지우기
fastlane match nuke enterprise // enterprise 지우기
아래 명령어를 입력하세요.
fastlane match development // Debug용
fastlane match appstore // 배포용
협업하는 팀원은 아래 명령어를 입력해야 한다.
fastlane match development --readonly
fastlane match change_password
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
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
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개의 파일이 만들어짐
위 두 파일은 TestFlight 에 사용할 수 있음.(베타 테스터용)
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