
1. Fastlane이란?
Info
ruby 기반의 클라이언트 자동 빌드 오픈소스 라이브러리로,
Android, iOS, 크로스플랫폼 클라이언트의 배포 과정을 자동화해 주는 도구이다.
이게 Fastlane의 사전적 의미이고, 단어를 조금 쪼개보면 fast lane
으로 추월 차선을 뜻한다. 흔히 CI/CD에서 사용하는 pipline과 유사한 점이 있는 것 같다.
고속도로에선 1차선이 추월 차선이고 추월 차선을 이용하면 빠르게 나아갈 수 있다.
이러한 관점에서 fastlane을 사용하면 더 빠르게 배포할 수 있다는 컨셉이라고 생각된다.

산정 기준은 모르겠지만 공식 홈페이지에서도 개발자들의 아낀 시간을 카운팅 하고있다.
이 글에서는 Fastlane
과 Firebase App Distribution
의 연동 과정 그리고 배포 시 Slack
자동 메시지 전달까지 진행한 내용을 정리해 보려고 한다.
2. Fastlane 연동
이 글에서는 macOS 환경에서 Homebrew 기준으로 작성되었다.
Homebrew가 설치 안 되어있다면 여기서 확인할 수 있다.
2-1. Ruby 설치
brew install rbenv ruby-build
우선 brew를 통해 ruby
를 설치해 준다. (Fastlane은 ruby로 작성되기 때문에)
rbenv install -l
rbenv install 3.2.2
설치 가능한 버전 목록을 확인하여 최신 버전으로 설치한다.
# ruby path
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
전역에서 사용할 수 있도록 ~/.zshrc
파일에 환경 변수를 추가해 준다.
2-2. Bundler 설치
gem install bundler
ruby에서 사용하는 패키지인 Gem의 의존성관리를 위해 의존성 관리 도구인 bundler 설치
2-3. Fastlane 설치
fastlane init
Android와 iOS 프로젝트 각각의 root 경로에서 fastlane init을 진행한다.
fastlane
폴더 하위에Fastfile
이 생긴다.- 프로젝트 root엔
Gemfile
을 확인할 수 있다. (생성 안되면 생성해야한다.) Gemfile
을 열어보면gem "fastlane"
이 명시되어 있는 것을 확인할 수 있다.
3. Fastlane 설정
3-1. Pluginfile
지난 설정들을 통해 Fastlane을 사용할 준비는 완료되었고 ruby로 작성된 fastfile
을 작성해 주면 된다.
gem 'fastlane-plugin-firebase_app_distribution'
fastlane init 하면서 fastlane 폴더 하위에 Pluginfile이 자동 생성되었을 텐데 여기에 Firebase App Distribution 연동을 위해 플러그인을 추가해 준다.
3-2. Fastfile (Android)
default_platform(:android)
platform :android do
desc "Deploy STG to Firebase App Distribution"
lane :stg do |options|
begin
UI.message("🚀 Android STG 배포 시작...")
gradle(
task: "assembleStg",
build_type: "Release",
)
UI.message("✅ (1/2)Gradle 빌드 완료!")
firebase_app_distribution(
app: "{firebase_app_id}",
groups: "{tester_groups}",
release_notes: release_notes
)
UI.message("✅ (2/2)Firebase 배포 완료!")
rescue => error
UI.error("❌ Android STG 배포 실패: #{error.message}")
raise
end
end
end
크게 2단계로 진행된다.
- 앱 빌드
- firebase에 앱 업로드
여기서 확인할 포인트는



lane :stg do
- Task 이름에 해당하는 부분이다.
- 이렇게 작성된 경우엔 프로젝트 경로에서
fastlane stg
커맨드를 보내면 해당 Task가 실행된다.
gradle(task: "", build_type:"")
- 빌드할 task와 build_type을 필요에 맞게 입력하면 그에 맞게 앱이 빌드된다.
firebase_app_distribution(app: {}, groups: {}, release_notes: "")
- 3-1에서 추가했던 Firebase App Distribution 플러그인이다.
app
Firebase 콘솔에서 해당 id를 확인하여 기입한다. (위 사진 참고)groups
대상 테스터 그룹을 작성한다.release_notes
출시 메시지를 포함하면 된다.
3-3. Fastfile (iOS)
default_platform(:ios)
platform :ios do
desc "Deploy STG to Firebase App Distribution"
lane :stg do |options|
begin
UI.message("🚀 iOS STG 배포 시작...")
sync_code_signing(
type: "adhoc",
app_identifier: {bundle_id},
readonly: true
)
build_app(
scheme: {app_scheme},
export_method: "ad-hoc"
)
UI.message("✅ (1/2)앱 빌드 완료!")
firebase_app_distribution(
app: "{firebase_app_id}",
groups: "{tester_groups}",
release_notes: release_notes
)
UI.message("✅ (2/2)Firebase 배포 완료!")
rescue => error
UI.error("❌ iOS STG 배포 실패: #{error.message}")
raise
end
end
end
안드로이드와 마찬가지로 크게 2가지 단계를 거치는데, 여기선 Code Signing 과정까지 포함되어 있다.
여기선 인증서 관리를 위해 Fastlane match
가 사용되었는데 관련 내용은 여기에서 확인 가능하다.
- 앱 사이닝
- 앱 빌드
- firebase에 앱 업로드
안드로이드와 중복되는 항목은 제외하고 iOS에 있는 설정을 보면,
sync_code_signing
- 위에서 언급한대로
Fastlane match
를 통해 코드 사이닝을 자동화하였다. type
배포할 타입이다. 여기선 QA를 위한 배포 앱이므로 adhoc 배포가 적용되었다.app_identifier
앱 번들아이디
- 위에서 언급한대로
build_app
- 앱을 빌드하는 과정인데 대상
scheme
을 지정해주면 된다.
- 앱을 빌드하는 과정인데 대상
4. 슬랙으로 메시지 자동화
def send_slack(message:, note:)
slack(
message: message,
success: true,
slack_url: {WEBHOOK_URL},
payload: {
"Release note": note,
},
default_payloads: ["git_branch", "git_author", "last_git_commit"]
)
end
Fastlane에서 slack(payload)
메서드를 제공하기 때문에 별도의 설정 과정 없이 쉽게 구현 가능하다.
다만 slack_url
에는 슬랙 웹훅 URL 이 필요하다. 이 과정은 되어있다고 가정하여 생략하였다.
위 3번 과정에서 진행한 앱 빌드, 업로드 과정이 모두 끝난 뒤 해당 method를 호출해 주면 된다.
메시지는 커스텀 가능하므로 payload
와 default_payloads
를 조정해 주면 된다.

5. 자동 배포 실행하기
fastlane stg
이제 명령어 한 줄로 빌드, 배포, 알림까지 손쉽게 배포할 수 있게 되었다.