Fastlane이란?
Fastlane
은 Android 및 iOS 어플리케이션의 배포를 자동으로 도와주는 오픈소스 프로젝트입니다. Fastlane을 이용하면 스크린샷, 앱 릴리즈, 코드 서명 등의 배포할 때 필요한 반복작업들을 자동화시킬 수 있습니다.
Fastlane에서 지원하는 기능은 다음과 같습니다.
1. 스크린샷 자동화
2. 베타 배포
3. Play Store 배포
4. 코드 서명 (iOS용)
이 포스트에서는 Fastlane 설치 및 설정, Beta 배포와 Play Store에 배포하는 방법을 다루어보도록 하겠습니다.
Fastlane 설치
Fastlane을 설치하는 방법은 homebrew를 이용하는 방법 등의 다양한 방법이 존재하지만, 가장 권장하는 방법은 Bundler를 이용하여 설치하는 것입니다.
그러므로, 이 포스트에서는 Ruby
와 Bundler
로 Fastlane을 사용하는 방법을 다루겠습니다.
Ruby
Mac OS를 사용한다면 system Ruby는 권장되지 않습니다. 이유는 시스템 환경 변수를 변경하기 때문인데, 시스템 환경 변수를 변경하지 않고 Ruby를 설치하는 여러 방법이 존재합니다.
Mac OS 혹은 Linux 환경을 사용한다면 rbenv
를 설치하는 방법이 Ruby 환경을 관리하는 가장 대표적인 방법입니다.
Ruby 설치(rbenv 이용)
아래의 명령어를 순서대로 입력해서 rbenv
를 설치해줍니다.
$ brew upgrade
$ brew install rbenv ruby-build
-> rbenv를 설치합니다.
$ rbenv versions
-> rbenv가 잘 설치되었는지 확인합니다.
$ rbenv install -l
-> 설치가능한 ruby 목록을 출력합니다.
$ rbenv install <version>
-> 해당 버전의 Ruby 설치
$ rbenv global <version>
-> 기기의 Ruby 기본 버전을 해당 버전으로 사용하도록 설정
$ rbenv versions
-> Ruby 버전 설정이 잘 되었는지 확인합니다.
Bundler
Fastlane에 대한 의존성을 추가하기 위해서 Bundler
와 Gemfile
을 사용하는 것을 권장합니다. 이 둘을 사용하면 fastlane에 대한 버전과 종속성을 명확하게 정의할 수 있고, fastlane의 실행속도를 높일 수 있습니다.
Bundler
-> Ruby 프로젝트에 알맞은 Gem과 버전을 추적할 수 있게 해주는 라이브러리입니다.
Gemfile
-> Gemfile에 Gem을 등록하는 방식으로 의존성을 관리해주는 파일입니다.
Gem
-> Ruby 프로젝트에서 라이브러리라고 생각하면 되고, 이 Gem들은 Gemfile에 추가하여 사용합니다.
Bundler 설치
Bundler를 설치하기 위해 $ gem install bundler
명령어를 실행합니다.
Fastlane 의존성 추가
그리고 프로젝트 root 디렉토리에 ./Gemfile
을 생성하고 아래의 내용을 넣어줍니다.
source "https://rubygems.org"
gem "fastlane"
- 추가한 후에 fastlane을 처음 실행하는 경우 $ bundle install
명령어를 실행하고 $ bundle update
명령어를 실행합니다.
- version control에 ./Gemfile과 ./Gemfile.lock 파일을 추가합니다.
- fastlane을 업데이트 하려면 $ bundle update fastlane
명령어를 실행합니다.
Fastlane 설정
프로젝트 디렉토리에서 $ fastlane init
명령어를 입력합니다.
$ fastlane init
$ fastlane init
명령어는 프로젝트에 대한 fastlane을 초기화하는 명령어이며, 명령어를 입력하면 아래의 세가지 물음에 답해줍니다.
패키지 이름 입력 (e.g. com.seosh817.appname)
-> 배포할 안드로이드 어플리케이션의 패키지 이름을 적어줍니다. 혹은 나중에 입력 가능하므로 건너뛰어도 됩니다.
Json secret file 경로 입력
-> 추후 설정이 가능하므로 일단 Enter를 입력해서 건너뜁니다.
metadata, 스크린샷을 GooglePlay에 업로드할 계획입니까?
-> 'n'을 입력합니다
fastlane의 초기화가 완료되면 프로젝트에 fastlane 디렉토리가 생성되고 Fastfile과 Appfile이 생성됩니다.
각각의 파일이 하는일을 요약하면 아래와 같습니다.
Appfile
-> 패키지명과 json secret file의 경로를 입력하는 파일
Fastfile
-> fastlane에 대한 설정을 정의하는 파일
fastlane이 설정되어있는지 확인하기 위해 $ bundle exec fastlane test
를 입력합니다.
Fastlane Fastfile 설정
Fastfile
을 사용하여 fastlane의 자동화를 구성합니다.
Fastfile
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
default_platform(:android)
platform :android do
desc "Runs all the tests"
lane :test do
gradle(task: "test")
end
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "clean assembleRelease")
crashlytics
# sh "your_script.sh"
# You can also use other beta testing services here
end
desc "Deploy a new version to the Google Play"
lane :deploy do
gradle(task: "clean assembleRelease")
upload_to_play_store
end
end
fastlane의 Fastfile
은 lane들을 정의하는 파일이고 각각의 lane
은 어떠한 action을 수행할지를 정의합니다.
lane은 lane :{lane 이름}으로 구성되어 있고, 자동 생성된 Fastfile에는 test, beta, deploy라는 이름의 lane이 존재하는 것을 확인할 수 있습니다.
각각의 lane이 수행하는 작업에 대한 설명은 아래와 같습니다.
test
-> gradle을 사용하여 프로젝트에 대한 모든 테스트를 실행합니다.
beta
-> crashlytics 작업과 gradle 작업을 사용하여 Firebase App Distribution에 베타 빌드를 제출합니다.
deploy
-> gradle 작업과 함께 upload_to_play_store 작업을 사용하여 GooglePlay에 새로운 버전을 배포합니다.
$ fastlane <lane>
lane을 실행하려면 fastlane <lane>
명령어를 입력하면 됩니다. 여기서, lane은 실행하고 싶은 lane을 입력하면 됩니다.
패키지 이름 입력
배포할 안드로이드 어플리케이션의 패키지 이름을 적어줍니다.
JSON secret file 발급 및 경로 입력
Google Play에 자동으로 업로드하기 위해서는 json secret file이 필요합니다.
아래의 절차를 수행해주어야 합니다.
자세한 내용은 Fastlane Documents에서 확인할 수 있습니다.
Google Play 콘솔에 들어가서 개발자 계정을 선택해줍니다.
왼쪽 탭의 [설정] -> [API 액세스] -> [서비스 계정]의 [서비스 계정 만드는 방법 알아보기] -> [Google Cloud Platform] 을 차례대로 클릭해줍니다.
[서비스 계정 만들기] 버튼을 클릭해줍니다.
서비스 계정 이름, 서비스 계정 ID, 서비스 계정에 대한 설명을 입력해주고 [만들고 계속하기]를 클릭합니다.
[프로젝트에 대한 액세스 권한 부여] 설정 단계에서는 역할을 서비스 계정 사용자를 선택해주고 넘어갑니다.
[사용자에게 이 서비스 계정에 대한 액세스 권한 부여]는 그냥 넘어가고 [완료]를 눌러주었습니다.
그러면 계정이 하나 생기는데 작업에 [키 관리] 버튼을 클릭합니다.
[키 추가] - [새 키 만들기]를 클릭합니다.
키 유형은 [JSON]을 선택해줍니다.
[만들기] 버튼을 누르면 아래와 같은 내용의 .json 확장자의 JSON 파일이 생성됩니다.
JSON 파일은 잃어버리지 않도록 따로 보관해주세요.
생성이 완료되었으면 Appfile에 생성한 JSON 파일의 Path를 추가합니다. (Path는 프로젝트 실행위치에서의 상대경로를 입력해줍니다.)
json_key_file("path/to/your/play-store-credentials.json")
package_name("my.package.name")
Firebase App Distribution에 베타 테스트 배포하기
fastlane을 이용하면 베타 테스트를 자동화할 수 있습니다.
여기서 베타 테스트
란, 새로운 feature가 준비되면 Play Store에 출시하기 전에 베타 테스터들을 등록하여 테스터들에게 테스트 버전을 배포하는 것을 말합니다.
베타 테스트 서비스에는 Fabric, App Distribution, Testflight(iOS) 등 여러가지 툴이 존재하는데 이 포스트에서는 App Distribution
에 테스트 버전을 배포하는 방법을 알아보겠습니다.
안드로이드 프로젝트에 Firebase를 추가하는 방법은 아래 링크에 방법이 정리되어있습니다.
https://firebase.google.com/docs/android/setup?hl=ko
Firebase 설정이 완료되었다는 가정하에 포스트를 이어서 작성하겠습니다.
Firebase App Distribution 플러그인 설치
먼저, 아래의 명령어를 입력해줍니다.
$ bundle exec fastlane add_plugin firebase_app_distribution
위 명령어는 fastlane용 firebase app distribution 플러그인
을 설치합니다.
명령어를 입력하면 fastlane plugin이 설치되기 위해서 Gemfile을 수정한다고 하는데 'y'를 입력해서 설치를 진행해줍니다.
설치가 완료되면 Gemfile과 Pluginfile이 수정됩니다.
'y'를 입력하면 설치가 완료됩니다.
Firebase 계정 인증
fastlane을 이용해서 firebase app distribution에 어플리케이션을 업로드하기 위해서는 Firebase에 로그인해서 인증을 해주어야 합니다.
먼저 firebase CLI tools를 다운로드 해줍니다.
macOS 혹은 Linux를 사용할 경우 아래 명령어를 입력하면 됩니다.
# 설치
$ curl -sL https://firebase.tools | bash
# 설치 확인
$ firebase -V
설치가 완료되었으면 아래 명령어를 입력해서 firebase에 로그인해줍니다.
$ firebase login
테스터 그룹 설정
Firebase App Distribution을 사용하면 테스터 그룹을 만들고 배포할 그룹을 지정할 수 있습니다.
[출시 및 모니터링] - [App Distribution] 탭에 [시작하기] 버튼을 눌러줍니다.
[테스터 및 그룹] 탭에서 [그룹 추가]버튼을 눌러서 group1이라는 그룹을 추가해주었고 [테스터 추가]버튼을 눌러서 저의 이메일을 테스터로 추가해주었습니다.
이제 fastlane을 이용하여 App Distribution에 배포할 준비가 완료되었습니다.
Fastfile에 베타 테스트 배포 추가
FastFile에 beta lane에 App Id와 groups를 채워넣고 아래의 내용을 추가합니다.
사용할 수 있는 매개변수 옵션을 보려면 Firebase 문서에서 확인하실 수 있습니다.
default_platform(:android)
platform :android do
// ...
desc "Deploy Beta Release to Firebase App Distribution"
lane :beta do
build // build lane
firebase_app_distribution(
app: "1:123456789:android:abcd1234",
groups: "group1, qa-team",
release_notes: "Deploy to Firebase App Distribution"
)
end
end
Fastfile 설정까지 완료되었으므로 $ fastlane beta
명령어를 입력하여 App Distribution에 배포를 실행하겠습니다.
$ fastlane beta
업로드에 성공하면 콘솔에서 성공했다는 메세지를 확인할 수 있습니다.
또한, Firebase App Distribution 탭에서 방금 업로드한 빌드를 확인할 수 있습니다.
Play Store에 앱 배포하기
Play Store에 업로드 하려면 자격 증명이 필요하고 위에서 발급받았던 JSON secret file
이 필요합니다. 이 JSON 파일에는 fastlane에서 Play Store 계정을 연결하기 위한 자격 증명 데이터가 포함되어 있습니다.
Play Console 연결 테스트
아래 명령어를 실행하여 Play Console 연결 테스트를 진행합니다.
$ fastlane run validate_play_store_json_key
정상적인 JSON seceret key를 넣어주었다면 Google Play Store와 연결이 성공했다는 메시지가 뜹니다.
Fastfile에 Play Console 업로드 추가
Play Console에 업로드 하려면 작성한 deploy lane을 실행해주면 됩니다.
fastlane deploy
명령어를 실행하여 업로드 하도록 하겠습니다.
$ fastlane deploy
명령어를 실행하면 아래와 같은 메세지가 업로드가 성공했다고 나오는 것을 확인할 수 있습니다.
또한 제가 올리려는 앱 버전인 1.03 버전의 aab 파일이 업로드 되는 것을 확인할 수 있습니다.
Play Console 에서 확인해도 정상적으로 배포된 것을 확인할 수 있습니다.
References
https://github.com/rbenv/rbenv