FastLane을 도입해봅시다.
먼저 이 문서는 Mac 그리고 iOS 개발환경 기반으로 작성됐습니다.
1. 설치
Homebrew가 깔렸다고 가정하고 터미널에서
brew install fastlane 를 입력해줍니다.
도중 권한이 없다 같은 에러가 나오면 명령어 제일 앞에 sudo 를 붙여주면 됩니다.
⚠️ 프로젝트에 fastfile이 포함 됐다면 아래 내용은 무시하고 진행해주세요! ⚠️
설치가 완료됐으면 fastlane을 설치할 프로젝트로 이동해
fastlane init 을 갈겨줍니다.
그럼 어떤 fastlane을 깔 것인지 선택하라고 나오는데 “엇 나는 다 하고싶은데...” 하고 당황하지마세요. 나중에 세팅할 수 있습니다.
그냥 4 를 입력 후 넘깁니다.
2번이나 3번을 누르면 Apple ID를 물어볼 텐데요. 앱스토어에 배포하려면 앱커넥트 아이디를 연결해야하기 때문입니다.
4를 선택하라고 한 이유는 이미 저희 git에 이러한 세팅이 올라가 있기 때문에 굳이 할 필요가 없기 때문입니다.
2. 명령어 만들기 (Fastfile)
기본 설명
이제 프로젝트에서 Fastfile을 찾아 열어줍니다. fastlane은 이 fastfile에 정의한 명령어 기반으로 일을 수행하는데요. fastfile은 Ruby 기반이라 Ruby를 안다면 편집이 더 수월할 겁니다. 그치만 저는 잘 몰라서 감으로 대충 때려박고 있습니다.
default_platform(:ios)
platform :ios do
desc "Generate new localized screenshots"
lane :screenshots do
capture_screenshots(workspace: "a.xcworkspace", scheme: "scheme")
upload_to_app_store(skip_binary_upload: true, skip_metadata: true)
end
end
이게 fastlane init 후에 1을 입력해 만들어진 최초의 형식이었습니다.
defualt_platform은 잘 모르겠고
desc는 아래 명령어가 어떤일을 하는지에 대한 설명을 적는 것 같습니다.
lane :screenshots 은 fastlane 명령어를 어떻게 입력할지에 대한 내용입니다.
위에 lane :호출할 명령어 형식이고 위의 명령어를 실행하기 위해선 fastlane screenshots 라고 입력하면 됩니다.
capture_screenshots, upload_to_app_store 은 이름 그대로 스크린을 캡쳐하는 것이고 앱스토어에 업로드하는건데 아직 앱스토어 업로드 명령어는 제대로 개발 및 테스트하지 않았습니다.
Firebase App Distribution에 테스트 버전 배포하기
우리 회사의 크루분들이 너무 많아졌습니다. 이전까지는 일일히 디바이스를 받아 넣어주었고(엄청난 병목) 이제는 Firebase App Distribution을 이용하기로 했습니다. 그치만 이건 또 Archive를 해줘야하고 ipa를 따서 firebase console에 들어가 올려주어야합니다(귀찮).
원하는 바는 간단합니다.
- 현재 개발환경에서 빌드 진행
- Archive
- Firebase App Distribution 에 배포.
- 배포 완료되면 슬랙에 노티하기.
자 이제 이 귀찮은 단순노동의 전쟁을 끝내러 가보실까요?
⚠️ Pluginfile에 gem 'fastlane-plugin-firebase_app_distribution’이 포함 됐다면 아래 내용은 무시하고 진행해주세요! ⚠️
- 플러그인 연결
- fastlane add_plugin firebase_app_distribution 을 입력해 플러그인을 연결합니다.
- Firebase 연결
- fastlane run firebase_app_distribution_login 을 입력합니다.
- URL이 나오는데 웹브라우저를 열어 URL에 들어갑니다.
- 지시대로 로그인을 진행하면 브라우저에 코드가 나오는데 그걸 터미널에 입력합니다.
- 터미널에 refresh token이 나올겁니다. 그게 firebase_cli_token인데 따로 저장해두세요!
자, firebase_app_distribution 플러그인 연결을 완료했습니다. 이제 해당 테스트 배포 명령을 작성해야겠죠?
module Constant
# 프로젝트 이름
APP_IDENTIFIERS = ["App Bundle Identifier"]
# 앱 올리고 나서 배포할 때 slack hook
SLACK_URL = "슬랙 webhook url"
SLACK_ICON = "슬랙 아이콘 주소"
# 파이어베이스 배포에 올릴 앱
FIREBASE_APP_ID = "1:123456789:ios:abcdefg로 구성된 APP ID"
FIREBASE_TOKEN = "파베 로그인하고 받은 refresh Token"
end
platform :ios do
desc "Generate new localized screenshots"
lane :screenshots do
capture_screenshots(workspace: "a.xcworkspace", scheme: "scheme")
upload_to_app_store(skip_binary_upload: true, skip_metadata: true)
end
desc "파이어베이스 테스트버전 배포"
lane :test do
update_code_signing_settings(use_automatic_signing: true)
build_app(
scheme: "scheme",
workspace: "a.xcworkspace",
configuration: "Debug",
clean: true,
silent: true,
export_method:"ad-hoc",
export_options: {
iCloudContainerEnvironment: 'Development'
}
)
firebase_app_distribution(
app: Constant::FIREBASE_APP_ID,
firebase_cli_token: Constant::FIREBASE_TOKEN,
groups: "team1", #ex "team1, team2, team3",
release_notes: "자동배포 테스트입니다.",
debug: true
)
slack(
username: “슬랙봇_이름”,
icon_url: Constant::SLACK_ICON,
message: "테스트버전 배포완료",
channel: “슬랙채널”,
slack_url: Constant::SLACK_URL
)
end
module Constant 을 참고하여 자주 쓰는 값을 구성하면 됩니다.
module 모듈명
변수명 = 값
end로 마무리하고
쓸때는 모듈명::변수명 으로 사용하시면 됩니다.
밑으로 내려와 desc "파이어베이스 테스트버전 배포" 부터가 새로 추가된 코드입니다.
lane :test 로 정의했듯이 fastlane test 라는 명령어로 쉽게 테스트 버전 배포가 가능해졌습니다.
이제 test라는 명령어를 부르면 무슨 일을 하는지 한줄 한줄 보겠습니다.
- 사이닝
- update_code_signing_settings(use_automatic_signing: true) 을 가장 먼저 실행하는데요. 현재는 iOS 에서 signing을 따로 관리하지 않고 auto로 관리하고 있는데update_code_signing_settings 의 use_automatic_signing 디폴트가 false기 때문에 true 를 넣어줍니다.
- 빌드
- build_app 은 말그대로 앱을 빌드하는 명령어입니다. 다양한 옵션이있는데 직감적으로 아실거라 믿고 주의할 사항만 설명드리면 export_method:"ad-hoc" 를 ad-hoc으로 하였을 경우 export_options의 iCloudContainerEnvironment를 Development 혹은 Production으로 지정해주셔야한다는 겁니다.
- 배포groups: "team1", #ex "team1, team2, team3", 이와 같이 특정 그룹을 지정해 줄 수있습니다.
- firebase_app_distribution 파이어베이스에 배포
'개발자의 삶' 카테고리의 다른 글
[iOS] Firebase Crashlytics 버그 추적 팁 (0) | 2022.02.06 |
---|---|
분할정복과 인생 (0) | 2022.01.23 |
Enum 좋아하는 개발자들 주의사항 (0) | 2022.01.20 |
개발자가 되고 싶은 비 전공자분들에게. (0) | 2021.12.26 |