Fastlane은 iOS 및 Android용 모바일 앱의 빌드 및 게시를 자동화하는 도구입니다. Fastlane은 코드 서명, 빌드, 테스트 실행, 스크린샷 생성, App Store Connect 및 Google Play Console에 업로드를 관리합니다. 이는 모바일 개발에서 CI/CD의 사실상 표준입니다.
주요 요점
Fastlane은 모바일 개발의 일상적인 작업(애플리케이션 빌드, 테스트 실행, 스크린샷 생성, 인증서 관리, TestFlight/App Store/Google Play에 빌드 업로드)을 자동화하는 오픈소스 도구입니다. Fastlane은 Ruby로 작성되었으며 gem install fastlane 명령으로 RubyGems를 통해 배포됩니다.
Fastlane은 2015년 iOS 도구로 등장했지만 빠르게 Android로 확장되었습니다. 오늘날 수십 개의 액션(내장 명령)의 생태계이며, 이를 결합하여 lanes라는 시나리오를 만들 수 있습니다. 각 lane은 특정 작업을 수행합니다. 예: build_release는 릴리스 버전을 빌드하고, deploy_beta는 빌드를 TestFlight에 업로드합니다.
Fastlane은 Uber, Airbnb, Snapchat, Twitter 및 Shopify와 같은 기업에서 사용됩니다. 2024년 조사에 따르면 iOS 개발자의 60% 이상이 프로젝트에서 Fastlane을 사용합니다. 이 도구는 로컬 실행과 클라우드 CI 시스템 통합을 모두 지원하여 모바일 CI/CD의 사실상 표준이 되었습니다.
# Fastlane 설치
sudo gem install fastlane -NV
# 프로젝트에서 초기화
fastlane init
초기화 후 Fastlane은 세 개의 파일이 있는 fastlane/ 디렉토리를 생성합니다: Fastfile(시나리오), Appfile(앱 설정), Matchfile(인증서 설정). 이 구조는 iOS와 Android 모두 동일합니다.
Fastlane의 주요 구성 파일은 Fastfile입니다. 프로젝트 루트의 fastlane/ 디렉토리에 있습니다. Fastfile은 Ruby로 작성됩니다. 각 lane은 액션 시퀀스가 있는 명명된 블록입니다. lane은 매개변수를 받고, 다른 lane을 호출하고, 값을 반환할 수 있습니다.
# fastlane/Fastfile — iOS 예시
default_platform(:ios)
platform :ios do
desc "Build and upload to TestFlight"
lane :beta do
match(type: "appstore")
gym(scheme: "MyApp", configuration: "Release")
pilot(skip_waiting_for_build: true)
end
desc "Deploy to App Store"
lane :release do
ensure_git_status_clean
match(type: "appstore")
gym(scheme: "MyApp")
deliver(
skip_metadata: true,
skip_screenshots: true
)
push_to_git_remote(tags: true)
end
end
각 lane은 fastlane ios beta 또는 fastlane ios release 명령으로 실행됩니다. Fastfile은 변수, 조건문, 루프 및 외부 스크립트 호출을 지원하는 완전한 Ruby 파일입니다. 개발자는 private_lane(로컬 메서드) 및 다른 Fastfile의 import를 통해 코드를 재사용할 수 있습니다.
Fastlane은 대부분의 작업에 대해 200개 이상의 내장 액션을 제공합니다. 필요한 액션이 없으면 Ruby로 직접 작성하거나 sh("...")로 셸 명령을 호출할 수 있습니다. 액션은 매개변수(빌드 설정, 경로, 액세스 토큰)를 받고 후속 단계에서 사용할 결과를 반환할 수 있습니다.
iOS용 Fastlane은 세 가지 주요 문제를 해결합니다: 인증서 및 프로비저닝 프로필 관리, Xcode를 통한 IPA 빌드, App Store Connect 및 TestFlight에 게시. 이러한 각 작업은 별도의 액션으로 처리됩니다.
match는 인증서 관리를 위한 액션입니다. 모든 인증서와 프로비저닝 프로필을 암호화된 Git 저장소에 저장합니다. 모든 개발자와 CI 서버가 동일한 파일 세트를 사용하므로 충돌과 만료된 인증서 문제가 없습니다. 새 기기가 추가되면 Match가 자동으로 프로필을 업데이트합니다.
sigh는 Apple Developer Portal을 통해 프로비저닝 프로필을 생성하고 다운로드합니다. 특정 유형(development, ad-hoc, appstore)의 프로필이 빠르게 필요할 때 사용됩니다.
gym은 IPA를 빌드합니다. Gym은 최적의 매개변수로 xcodebuild를 래핑하고, 자동으로 스키마, 구성, 내보내기 옵션을 선택하여 서명된 IPA를 생성합니다. 예: gym(scheme: "MyApp", export_method: "app-store").
pilot은 TestFlight를 관리합니다. 빌드를 업로드하고, 테스터를 추가하고, 검토 상태를 추적합니다. deliver는 메타데이터, 스크린샷, 가격 책정 및 버전 관리를 포함한 전체 App Store 게시를 처리합니다.
# iOS 앱 빌드 및 게시
lane :deploy_ios do
cocoapods
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(changelog: "Bug fixes and performance improvements")
end
App Store Connect 작업에는 액세스 토큰이 필요합니다. Fastlane은 두 가지 인증 방법을 지원합니다: App Store Connect API Key(권장) 및 2단계 인증이 있는 Apple ID. API 키는 대화식 비밀번호 입력이 필요하지 않으므로 CI/CD에 더 편리합니다.
| 액션 | 목적 | 수동 작업 |
|---|---|---|
match | 인증서 및 프로필 관리 | Apple Developer Portal |
sigh | 프로비저닝 프로필 생성 | Xcode + Developer Portal |
gym | IPA 빌드 | xcodebuild + xcrun |
pilot | TestFlight 업로드 | Xcode Organizer |
deliver | App Store 게시 | App Store Connect Web |
scan | UI 테스트 실행 | xcodebuild test |
Android에서 Fastlane은 Gradle을 통한 빌드, APK 및 AAB 서명, Google Play Console에 업로드 및 Firebase App Distribution을 자동화합니다.
gradle은 Android 빌드의 주요 액션입니다. 필요한 작업으로 Gradle 래퍼를 호출합니다: gradle(task: "assembleRelease") 또는 AAB의 경우 gradle(task: "bundleRelease"). 플래그, 환경 변수 및 gradle.properties 경로를 전달할 수 있습니다.
supply는 APK 또는 AAB를 Google Play Console에 업로드합니다. Supply는 버전, 트랙(internal, alpha, beta, production), 릴리스 노트, 가격 책정 및 국가별 배포를 관리합니다. 예: supply(track: "beta", release_status: "completed").
screengrab은 Google Play용 스크린샷을 생성합니다. 다양한 기기와 언어에서 앱의 스크린샷을 캡처하는 계측 테스트를 실행합니다. 결과 스크린샷은 supply를 통해 업로드됩니다.
# Android 앱 빌드 및 게시
lane :deploy_android do
gradle(task: "clean bundleRelease")
supply(
track: "beta",
release_status: "completed",
version_code: 42
)
end
| 액션 | 목적 | 수동 작업 |
|---|---|---|
gradle | Gradle로 빌드 | ./gradlew assembleRelease |
supply | Google Play에 업로드 | Google Play Console Web |
screengrab | 스크린샷 생성 | 수동 스크린샷 + ImageMagick |
firebase_app_distribution | Firebase 배포 | Firebase Console Upload |
Fastlane은 CI/CD 파이프라인에서 작동하도록 설계되었습니다. 비대화형 모드, 환경 변수 및 빌드 아티팩트를 올바르게 처리합니다. 아래는 인기 CI 시스템과의 통합 예시입니다.
GitHub Actions에서 Fastlane은 Ruby 스크립트로 실행됩니다. 일반적인 워크플로: Ruby와 Fastlane 설치, 키 구성(secrets를 통한 인증서, API 토큰), lane 실행. iOS에는 macOS 러너가 필요합니다. Android는 ubuntu-latest에서 작동합니다.
GitLab CI에서 Fastlane은 .gitlab-ci.yml에서 유사한 설정으로 사용됩니다: 종속성 설치, fastlane 실행, 아티팩트 전달. GitLab CI는 macOS 및 Linux 러너를 지원합니다.
Bitrise — 모바일 앱용 특화 CI/CD — 에는 내장 Fastlane 지원이 있습니다. Bitrise Workflow는 Fastlane Step을 호출하거나 fastlane으로 사용자 정의 스크립트를 실행할 수 있습니다. Bitrise는 Code Signing 관리자를 통해 인증서를 관리합니다.
# 조건부 테스트 실행이 있는 CI/CD용 Fastfile
lane :ci_test do
scan(scheme: "MyApp", code_coverage: true)
end
lane :ci_beta do
ensure_git_status_clean
version_bump_podspec(path: "MyApp.podspec")
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(distribute_external: true)
end
CI/CD 통합의 중요한 측면은 시크릿 저장입니다. Fastlane은 dotenv를 통해 .env 파일과 환경 변수를 사용합니다. iOS의 경우 중요한 변수: MATCH_PASSWORD, FASTLANE_APPLE_API_KEY, FASTLANE_APPLE_API_KEY_ID. Android의 경우: SUPPLY_JSON_KEY_DATA — Google Play 서비스 계정의 내용.
Fastlane에는 200개 이상의 내장 액션이 포함되어 있습니다. 아래는 플랫폼 및 설명과 함께 가장 인기 있는 액션의 개요입니다.
| 액션 | 플랫폼 | 설명 |
|---|---|---|
gym | iOS | 최적화된 xcodebuild 매개변수로 IPA 빌드 |
match | iOS | Git을 통해 인증서 및 프로비저닝 프로필 동기화 |
pilot | iOS | TestFlight에 빌드 업로드 및 테스터 관리 |
deliver | iOS | 메타데이터와 함께 App Store에 앱 게시 |
scan | iOS | 리포트 생성과 함께 유닛 및 UI 테스트 실행 |
gradle | Android | Gradle 작업 실행: assemble, bundle, test |
supply | Android | APK 및 AAB를 Google Play Console에 업로드 |
screengrab | Android | Google Play용 자동 스크린샷 |
firebase_app_distribution | Android | Firebase를 통해 빌드 배포 |
snapshot | iOS | App Store용 시뮬레이터에서 자동 스크린샷 |
increment_build_number | iOS | Xcode 프로젝트에서 빌드 번호 자동 증가 |
appcenter_upload | 둘 다 | App Center에 빌드 업로드 |
필요한 액션을 찾으려면 fastlane action [이름] 명령을 사용하세요. 문서, 매개변수 및 예제를 표시합니다. 전체 목록은 로컬에서 사용 가능: fastlane actions.
Fastlane은 또한 플러그인 — 새로운 액션을 추가하는 커뮤니티 확장 — 을 지원합니다. 플러그인은 fastlane add_plugin [이름]으로 설치되며 RubyGems 레지스트리에서 사용 가능합니다. 인기 플러그인 예: fastlane-plugin-versioning(버전 관리), fastlane-plugin-sentry(디버그 심볼을 Sentry에 업로드), fastlane-plugin-teams(Microsoft Teams에 알림).
자주 묻는 질문
Fastlane은 모바일 앱의 빌드 및 게시를 자동화하는 도구입니다. 수동 작업(빌드, 코드 서명, 스토어 업로드)을 하나의 명령으로 대체합니다. Fastlane은 릴리스 시간을 몇 시간에서 몇 분으로 단축하고 게시 중 인적 오류를 제거합니다.
네. Fastlane은 두 플랫폼을 독립적으로 지원합니다. iOS에는 macOS가 필요하고 Android에는 Linux만 있으면 됩니다. 하나의 Fastfile에서 플랫폼별로 lanes를 분리할 수 있습니다: platform :ios do ... end 및 platform :android do ... end.
match 액션을 통해 관리합니다. 암호화된 인증서와 프로비저닝 프로필을 Git 저장소에 저장합니다. 각 개발자가 저장소를 클론하고, match가 MATCH_PASSWORD 변수의 비밀번호로 파일을 해독하여 키체인에 설치합니다. "내 컴퓨터에서는 작동합니다" 문제를 해결합니다.
네. Fastlane에는 APK 및 IPA를 Firebase App Distribution에 업로드하는 내장 firebase_app_distribution 액션이 있습니다. 테스터 추가를 위한 firebase_app_distribution_add_testers도 있습니다. 대안으로 App Center용 appcenter_upload 액션이 있습니다.
Fastlane은 RubyGems를 통해 설치됩니다: gem install fastlane -NV. iOS에는 macOS와 Xcode가 필요합니다. Android에는 Linux 또는 macOS와 JDK 및 Android SDK가 필요합니다. GitHub Actions에는 Ruby와 Fastlane 설치를 위한 ruby/setup-ruby 액션이 있습니다. 환경 변수는 CI 시스템의 secrets를 통해 전달됩니다.
Fastlane은 빌드 및 게시 작업을 자동화하기 위한 라이브러리 및 CLI입니다. Bitrise와 Jenkins는 완전한 CI/CD 플랫폼입니다. Fastlane은 그 안에서 실행됩니다: Jenkins는 Fastlane을 파이프라인 단계로 실행하고, Bitrise는 전용 Step을 통해 Fastlane을 호출합니다. Fastlane은 CI 시스템을 대체하지 않고 모바일 특화 기능으로 보완합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.