[Fastlane] Fastlane을 통해 빌드를 자동화하자 1편
이채현
What is the Fastlane?
- ruby 코드로 만들어진 앱 배포 자동화 툴
- 커맨드라인으로 빌드 할 수 있음
- CI 시스템과의 통합 용이
- 여러 구성원이 App Store에 앱을 배포하거나 단일 장치에 앱을 설치할 때 별도의 코드 서명 ID가 필요하지만, fastlane의 match를 사용하여 하나의 중앙저장소를 만들 수 있음
- 기존 배포 인증서는 팀원 각각 만들어야 하고, 만료 기한이 있었던 것과 달리 깃 저장소에 저장된 배포 인증서로 사용 가능
- 단, 이중인증 필요하다는 한계 존재
Run Fastlane
01. setting
fastlane 설치 및 세팅
#1. Install the latest Xcode command line tools
#2. ruby 2.5.0이상 버전 다운로드 필요
Homebrew를 이용한 설치
macOS Sierra 기준으로, 맥에는 이미 ruby가 설치되어 있음
기본설치 되어 있는 Ruby가 오래된 버전이라면 rbenv를 다운로드 하여 버전관리를 하는 것이 좋음
rbenv 초기화
rbenv의 설치가 완료되었다면 아래에 명령어를 실행하여 rbenv을 초기화한다.
아래 명령어를 실행하면 다음과 같이 나온다
위에 설명과 같이 .bashrc_profile 파일을 열고 아래와 같이 수정한다.
1
2
3
4
5eval "$(rbenv init -)" 또는
eval "$(rbenv init - zsh)"
# 그리고 아래 줄을 작성한다.
export PATH=$HOME/bin:/usr/local/bin:$PATH루비 2.5.0 이상 설치
#3. fastlane을 설치하는 두가지 방법
Install fastlane using RubyGems
✅ Alternatively using Homebrew
공식문서에서는 brew로 설치하는 방법을 권장
이유: RubyGems로 설치할 경우 전역적으로 설치되어 rbenv를 사용하는 의미가 사라짐 → Homebrew로 설치하는 것을 권장
참고 링크
https://jojoldu.tistory.com/288
https://dev-yakuza.posstree.com/ko/ruby-on-rails/rails-on-mac/
02. Init Fastlane
fastlane을 위해 사용할 폴더 구조는 다양하다. 필자는 RN 프로젝트에서 다음과 같이 사용하고 있음.
#1. 프로젝트 최상위 루트에서 init 후 아래와 같은 폴더 구조 생성
root project |_ fastlane |_ android |Fastfile | ios |Fastfile | android |_ ios
#2. Fastfile설정
1 | fastlane_require 'dotenv' |
#3. env 설정
Android와 iOS의 빌드를 위해 env를 분리시킨다.
- 프로젝트 최상위 루트에
.env.FLAndroid
,.env.FLIos
파일을 생성한다.
env파일
- .env.FAndroid
1
2
3
4
5
6
7
8
9
10
11
12# 개발
APPCENTER_API_TOKEN={앱센터 토큰}
APPCENTER_OWNER_NAME={"앱센터 사용자 이름"}
APPCENTER_APP_NAME={"앱센터 앱 이름"}
APPCENTER_DISTRIBUTE_APK="./android/app/build/outputs/apk/development/release/app-development-release.apk"
# 상용
JSON_KEY={"플레이스토어 API 액세스 키"}
STORE_DISTRIBUTE_AAB="./android/app/build/outputs/bundle/productionRelease/app-production-release.aab"
PACKAGE_NAME="앱 패키지 이름"- .env.FLIos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22IOS_PROJECT_PATH="./ios/project.xcodeproj"
SIGNING_IDENTITY_DEBUG="Apple Development: "
SIGNING_IDENTITY_RELEASE="Apple Distribution: "
# 개발
MATCH_ENV_PREFIX_DEVELOPMENT="sigh_io.project.dev_development"
MATCH_ENV_PREFIX_DEVELOPMENT_EXT="sigh_io.project.dev.OneSignalNotificationServiceExtension-Dev_development"
MATCH_ENV_PREFIX_ADHOC="sigh_io.project.dev_adhoc"
MATCH_ENV_PREFIX_ADHOC_EXT="sigh_io.project.dev.OneSignalNotificationServiceExtension-Dev_adhoc"
APPCENTER_API_TOKEN=앱센터 토큰
APPCENTER_OWNER_NAME="앱센터 사용자 이름"
APPCENTER_APP_NAME="앱센터 앱 이름"
APPCENTER_DISTRIBUTE_IPA="./projectDev.ipa"
# 상용
MATCH_ENV_PREFIX_APPSTORE="sigh_io..project.app_appstore"
MATCH_ENV_PREFIX_APPSTORE_EXT="sigh_io.project.app.OneSignalNotificationServiceExtension-Prod_appstore"
STORE_DISTRIBUTE_IPA="./project.ipa"- 프로젝트 최상위 루트에
#4. env 로드
1 | platform :android do |
#5. Appfile 셋팅 (환경변수 파일)
- 필요에 따라 작성하면 된다.
1 | # app_identifier('io.project') # The bundle identifier of your app |
03. How to Run Fastlane
local에 설치 된 ruby 버전이 아닌 프로젝트에서 지정한 ruby버전을 사용하기 위해 bundle exec 명령어를 이용
Install Plugin
1 | bundle exec fastlane add_plugin appcenter |
add plugin 이후, fastlane 폴더 내 Pluginfile이 생성
Pluginfile 생성 체크 후, 프로젝트 루트 디렉토리에 Gemfile 내에 생성된 경로와 일치한지 확인하기
마무리