# Fastlane (iOS 및 Android)
Fastlane은 iOS와 Android 애플리케이션의 빌드, 테스트, 배포 파이프라인을 자동화하기 위한 오픈 소스 도구 모음이다. 주된 목표는 반복적이고 수동적인 작업을 최소화하고, 안정적이고 재현 가능한 배포 프로세스를 제공하는 것이다. Fastlane은 Ruby로 작성되었으며, 실행 단위인 lanes와 다양한 액션(Action)을 조합하여 다양한 워크플로우를 구성한다. 핵심 구성 요소로는 Fastfile, Appfile, 그리고 필요한 경우 code signing과 관련된 도구들이 포함된다. (예: deliver, pilot, match, sigh, supply, gradle, gym 등)
- 주요 용어
- Fastlane: 도구 모음 및 런타임 플랫폼
- Fastfile: 워크플로우 정의 파일
- Lane: 하나의 자동화 흐름(작업 단위)
- Actions: 각 작업 단위에서 수행하는 구체적 작업
- Appfile: 앱 식별 정보 저장 파일
- deliver: iOS App Store 또는 App Store Connect로의 배포
- pilot: iOS TestFlight 배포용 빌드 업로드
- match: 코드 서명 인증서/프로비저닝 프로파일 관리
- sigh: 프로비저닝 프로파일 다운로드
- gym: iOS 빌드 도구 빌드 실행
- supply: Google Play로의 앱 배포
- gradle: Android 빌드 툴인 Gradle과의 상호작용
- deliver: App Store Connect에 앱을 배포하는 Fastlane 액션
---
## 1. Fastlane의 역사와 목표
- 역사적 배경
- Fastlane은 2015년경에 iOS 배포 자동화의 필요성에서 시작되었으며, 이후 Android로도 확장되었다.
- 커뮤니티 중심의 오픈 소스 프로젝트로서 지속적으로 플러그인과 액션이 추가되고 있다.
- 목표
- 반복적인 수동 작업 제거
- 빌드/테스트/릴리스 파이프라인의 재현성과 일관성 확보
- CI/CD 파이프라인과의 원활한 통합
- 코드 서명 관리의 보안성과 자동화
---
## 2. 아키텍처 및 핵심 개념
- Fastfile: 루트 워크플로우 정의 파일로, 플랫폼별로 lane을 정의한다.
- Lane: 특정 목표를 달성하기 위한 작업의 단위. 예: beta 배포, 릴리스 배포 등.
- Actions: lane 내부에서 수행되는 구체적인 작업들. 예를 들어 빌드, 테스트, 배포, 코드 서명 관리 등.
- Appfile: 앱의 식별 정보(번들 ID, 앱 스토어 아이디 등)를 저장하는 구성 파일.
- 플랫폼 구분: ios, android 두 플랫폼을 모두 지원하며, 각 플랫폼별로 다른 lanes를 구성 가능.
- CI/CD 통합: GitHub Actions, CircleCI, Bitrise, Jenkins 등 다양한 CI/CD 시스템과 쉽게 연동 가능.
---
## 3. 설치 및 환경 준비
- 시스템 요구사항
- macOS가 주력 환경이며, Linux에서도 일부 기능을 사용할 수 있다. Windows는 공식적으로 강하게 권장되지는 않으며 WSL 환경에서의 사용 사례가 많다.
- Ruby가 필요하며, Bundler를 이용한 의존성 관리가 일반적이다.
- 기본 설치 방법
- Homebrew가 설치된 macOS에서의 예시:
- brew install fastlane
- RubyGems를 사용하는 전통적인 방법:
- sudo gem install fastlane -NV
- 주의사항
- 보안상 중요한 시크릿은 환경 변수나 CI의 비밀 관리 기능으로 관리해야 한다.
- macOS의 Xcode/Command Line Tools 업데이트 상태와의 호환성을 유지해야 한다.
---
## 4. 구성 파일: Fastfile과 Appfile
- Fastfile 기본 구조
- 기본 포맷:
- default_platform :ios
- platform :ios do
lane :lane_name do
# 액션들
end
end
- Appfile 기본 구조
- apple_id("
[email protected]")
- app_identifier("com.example.app")
- team_id("TEAMID")
- team_name("Your Team")
- 예시
- Fastfile 예시
- default_platform :ios
- platform :ios do
- desc "Push a beta build to TestFlight"
- lane :beta do
- increment_build_number
- match(type: "appstore")
- gym(scheme: "MyApp")
- pilot
- end
- desc "Release a new version to App Store"
- lane :release do
- increment_version_number
- match(type: "appstore")
- gym(scheme: "MyApp")
- deliver
- end
- end
- Appfile 예시
- apple_id("
[email protected]")
- team_id("TEAMID")
- team_name("Your Team")
- app_identifier("com.example.app")
- 주의사항
- Appfile의 식별 정보는 버전 관리에서 제외하거나 암호화된 방식으로 관리하는 것이 좋다.
- match를 사용할 경우 로컬/원격 저장소에 인증서 및 프로비저닝 파일이 저장되므로 접근 제어가 필요하다.
---
## 5. iOS 워크플로우의 일반적인 배포 파이프라인
- 기본 워크플로우
- beta 워크플로우
- 빌드 번호 증가
- 코드 서명 관련 자원 확보 (match)
- 빌드(gym)
- TestFlight 배포(pilot 또는 upload_to_testflight)
- 릴리스 워크플로우
- 버전 번호 증가
- 코드 서명 재확인
- 빌드
- App Store에 배포(deliver/deliver를 통한 App Store Connect 업로드)
- 주요 Fastlane 액션
- increment_build_number, increment_version_number
- match (코드 서명 관리)
- gym (iOS 빌드)
- pilot (TestFlight 업로드)
- deliver (App Store Connect 업로드)
- screenshots, sigh (프로비저닝 파일 관리) 등
- 예시 Fastfile 스니펫
- 플랫폼 :ios
- lane :beta
- lane :release
- 각 lane 내부에 빌드, 서명, 배포 액션 구성
---
## 6. Android 워크플로우의 일반적인 배포 파이프라인
- 기본 워크플로우
- beta 워크플로우
- Gradle 빌드 태스크 실행 (assembleRelease 등)
- supply를 통한 Google Play internal track으로 배포 가능
- 릴리스 워크플로우
- Gradle 빌드
- Google Play production track에 배포
- 주요 Fastlane 액션
- gradle (Gradle 태스크 실행)
- supply (Google Play Console로의 업로드/출시)
- other related actions for signing/verification
- 예시 Fastfile 스니펫
- 플랫폼 :android
- lane :beta
- lane :release
- Gradle 빌드, 그리고 supply를 호출하는 구조
---
## 7. CI/CD와의 통합
- 일반적인 흐름
- 코드가 푸시되면 CI가 Fastlane을 호출하여 빌드, 테스트, 배포의 파이프라인을 실행한다.
- 환경 변수로 API 키, 서명 자격증명 등을 주입하고 비밀 관리를 통해 보안성을 강화한다.
- 대표적인 CI/CD 도구와의 연동 포인트
- GitHub Actions: 워크플로우 파일에서 fastlane 액션 실행
- CircleCI, Bitrise, Jenkins: 빌드 스텝에 fastlane 커맨드 실행
- 각 CI/CD 시스템에서 매번 민감 정보의 노출 없이 실행되도록 설정
- 베스트 프랙티스
- 서명 자격증명은 signer/credentials 저장소를 사용
- 테스트와 배포 분리를 명확히
- GPU/OS 의존적 빌드가 필요한 경우 런타임 에이전트의 일관성 확보
---
## 8. 예제: Fastfile과 Appfile의 간단한 구성 예시
- iOS와 Android를 함께 다루는 단일 Fastfile 예시
- default_platform :ios
- platform :ios do
- desc "Beta 빌드"
- lane :beta do
- increment_build_number
- match(type: "appstore")
- gym(scheme: "MyApp")
- pilot
- end
- desc "릴리스 빌드"
- lane :release do
- increment_version_number
- match(type: "appstore")
- gym(scheme: "MyApp")
- deliver
- end
- end
- platform :android do
- desc "Beta 배포"
- lane :beta do
- gradle(task: "assembleRelease")
- supply(track: "internal")
- end
- desc "Production 배포"
- lane :release do
- gradle(task: "assembleRelease")
- supply(track: "production")
- end
- end
- Appfile 예시
- apple_id("
[email protected]")
- team_id("TEAMID")
- team_name("Your Team")
- app_identifier("com.example.app")
- 주의사항
- Android의 경우 Google Play Console의 API 연결과 인증 설정이 필요하다.
- iOS의 경우 App Store Connect와의 연동을 위한 자격 증명이 필요하다.
---
## 9. 보안 및 비밀 관리
- 비밀 관리 전략
- API 키, 인증서, 프로비저닝 파일, Apple Developer 계정 자격 증명 등은 저장소에 직접 노출되지 않도록 관리한다.
- CI/CD의 암호 관리 기능(예: GitHub Actions의 Encrypted Secrets, Bitrise Secret) 사용
- match를 사용할 때는 인증서/프로비저닝 파일의 보안 저장소를 구성하고, 접근 권한을 최소화한다.
- 안전한 배포 관행
- 릴리스 목적의 자격 증명은 최소 권한 원칙에 따라 제한
- 필요 시 2단계 인증 등의 보안 수단 활성화
---
## 10. 모범 사례
- 버전 관리 및 재현성
- Fastlane 파일은 버전 관리에 포함하고, 변경 사항은 충분한 주석으로 기록
- 빌드 번호와 버전 넘버의 증가 규칙을 명확히 정의
- 코드 서명 관리
- match를 도입하여 인증서/프로비저닝 파일의 중앙 관리
- 서명 관련 자격 증명은 안전한 저장소에서 로드
- CI/CD의 안정성
- 실패 알림(예: Slack, Teams) 설정
- 아이솔레이션된 테스트: 로컬 환경과 CI 환경의 차이를 줄이는 구성
- 확장성
- 플러그인/플랜 확장을 통해 새로운 플랫폼이나 빌드 환경에 대응
---
## 11. 문제 해결 및 흔한 이슈
- 일반적 이슈
- Ruby 버전 호환성 문제
- Xcode/cl.tools 버전 차이로 인한 빌드 실패
- 인증서/서명 관련 오류
- CI 환경에서의 비밀 노출 이슈
- 해결 팁
-ruby 버전 관리 도구(rbenv, rvm)로 특정 Ruby 버전 고정
- Xcode의 명령행 도구 최신화 및 호환성 확인
- match 타입과 인증서 관리 방식 재점검
- CI 로그를 통해 실패 지점 정확히 파악하고 필요한 환경 변수 재설정
---
## 12. 대안 및 관련 도구
- 대안/보완 도구
- 수작업 스크립트와 CI 파이프라인의 조합: 간단한 프로젝트에서 유용
- 다른 배포 자동화 도구와의 연동
- Fastlane의 장점과 한계
- 장점: 광범위한 플랫폼 지원, 커뮤니티가 활발, 플러그인 추 جن
- 한계: 구성 초기의 학습 곡선, 복잡한 맞춤형 워크플로우의 경우 수작업 필요 가능성
---
## 13. 생태계와 커뮤니티
- 플러그인 시스템
- Fastlane 플러그인을 통해 추가 액션을 쉽게 확장 가능
- 커뮤니티의 역할
- 이슈 트래킹, 플러그인 공유, 예제 Fastfile 공유 등 활발한 커뮤니티 운영
- 공식 문서와 샘플
- 공식 레퍼런스에서 최신 액션 목록 및 예제 확인 권장
---
## 14. 용어 해설 (Glossary)
- Fastlane: iOS/Android 배포 자동화를 위한 도구 모음
- Fastfile: 워크플로우( lanes ) 정의 파일
- Lane: 특정 작업 흐름
- Actions: lane 안에서 수행하는 구체 작업
- Appfile: 앱 식별 정보 저장 파일
- deliver: App Store Connect로 빌드 및 메타데이터 배포
- pilot: TestFlight로 빌드 업로드
- match: 코드 Signing 자격 증명 관리
- sigh: Provisioning Profile 관리
- gym: iOS 빌드 도구
- supply: Google Play로 배포
- gradle: Android 빌드 시스템과의 연동 액션
---
## 15. 실무 적용 가이드라인
- 시작 팁
- 작은 예제부터 시작해 점진적으로 워크플로우 확장
- Appfile과 Fastfile의 구조를 명확히 분리
- 유지보수
- Fastlane 버전 고정 및 주기적 업데이트
- 의존성 관리(Bundler 사용 시 Gemfile.lock 관리)
- 보안
- 민감 정보는 CI 비밀 저장소에 보관
- 인증서의 수명 주기를 관리하고 만료 시 자동 갱신 로직 구성
---
## 16. 참고 및 추가 자료
- Fastlane 공식 문서
- iOS 배포와 테스트플라이트(TestFlight) 워크플로우
- Android Google Play 배포 워크플로우
- Code Signing 및 Certificate 관리
---
## 관련 문서
---
관련 문서: [[Fastlane 설치 및 초기 설정 가이드]], [[CI-CD pipeline]]