[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
1 | xcode-select --install |
#2. ruby 2.5.0이상 버전 다운로드 필요
Homebrew를 이용한 설치
macOS Sierra 기준으로, 맥에는 이미 ruby가 설치되어 있음
기본설치 되어 있는 Ruby가 오래된 버전이라면 rbenv를 다운로드 하여 버전관리를 하는 것이 좋음
1
brew install rbenv ruby-build
rbenv 초기화
rbenv의 설치가 완료되었다면 아래에 명령어를 실행하여 rbenv을 초기화한다.
아래 명령어를 실행하면 다음과 같이 나온다
1
2
3
4
5rbenv init
---
# Load rbenv automatically by appending
# the following to ~/.bashrc_profile:*eval "$(rbenv init -)"`위에 설명과 같이 .bashrc_profile 파일을 열고 아래와 같이 수정한다.
1
2
3
4
5eval "$(rbenv init -)" 또는
eval "$(rbenv init - zsh)"
# 그리고 아래 줄을 작성한다.
export PATH=$HOME/bin:/usr/local/bin:$PATH1
source ~/.zshrc
루비 2.5.0 이상 설치
1
2
3
4
5rbenv install 3.1.2
rbenv global 3.1.2 rbenv rehash
ruby -v
#3. fastlane을 설치하는 두가지 방법
Install fastlane using RubyGems
1
sudo gem install fastlane -NV
✅ Alternatively using Homebrew
1
brew install fastlane
공식문서에서는 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 후 아래와 같은 폴더 구조 생성
1 | bundle exec fastlane 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 명령어를 이용
1 | bundle update --bunder |
Install Plugin
1 | bundle exec fastlane add_plugin appcenter |
add plugin 이후, fastlane 폴더 내 Pluginfile이 생성
1
2
3
4
5
6
7# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!
gem 'fastlane-plugin-appcenter'
gem 'fastlane-plugin-load_json'
gem 'fastlane-plugin-yarn'Pluginfile 생성 체크 후, 프로젝트 루트 디렉토리에 Gemfile 내에 생성된 경로와 일치한지 확인하기
1
2
3
4...
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)마무리
1
2bundle install
# 이후, Gemfile.lock에 추가한 플러그인이 생겼는지 확인
[Fastlane] Fastlane을 통해 빌드를 자동화하자 1편