‼️iOS 취준생이 작성한 글이므로 잘못된 정보가 있을 수 있습니다.
CI/CD에 대한 필요성 그리고 편리함을 언뜻 들은적이 있지만, 프로젝트 개발에 등떠밀려 배우고 직접 사용해 볼 기회가 없었다.
그런데 문득 해커톤 때 iOS 개발자끼리 모여 얘기하는데, CI/CD로 Testflight에 테스터를 초대해서 출시전에 테스트를 할 수 있다는 얘기가 생각났다!!!
이거랑 앱스토어 배포만 자동화해주면 엄청 편할 것 같아서
좀 옛날에 했던 거지만 블로그 정리를 이제야한다...ㅎ
fastlane은 루비 기반 클라이언트 자동 빌드 오픈소스 라이브러리입니다.
command + space를 눌러 터미널 실행 후
brew install fastlane
brew가 설치되어 있지 않은 분은
brew 공식 사이트 를 참고해서 사전에 설치해주세요.
중간중간 권한이 없다는 말이 나오면 명령어 앞에 sudo 를 입력해서 관리자 권한으로 실행하면 됩니다.
일단 Bundler는 의존성 관리 도구로 최근 맥OS에는 기본적으로 Ruby가 설치되어 있는데 여기서 사용되는 패키지를 gem이라고 합니다.
이 gem의 의존성관리를 위해 Bundler 라는 의존성관리 도구가 사용됩니다.
알아보니 gem은 맥에 기본으로 설치되어 있어도, 최신버전이 아닐 확률이 있으므로 업데이트 하여 사용하는 것이 권장됩니다(저는 안함)
이제 Bundler가 뭔지 대충 알았으니 설치해보자.
gem install bundler
fastlane은 프로젝트별로 관리되기 때문에 개별로 설정을 해줘야 한다
(git init과 같이)
따라서 설정하고자 하는 디렉토리로 이동 후 프로젝트에 적용하기 위해
fastlane init
이렇게 하면 다음과 같은 화면을 볼 수 있다.
여기서 사용목적에 따라 분기가 되는데
우리가 이 라이브러리를 사용하는 목적은 앱스토어 자동 배포이기 때문에 3번을 클릭합시다!
네 근데 저는 잘 모르고 했기 때문에 4번 눌렀습니다.
4번 눌러도 엔터 계속 치고 진행하면 됩니다.
후기들을 보니 3번을 누르면 AppStore ID/PW를 요구한다고 하던데, 개발자 계정으로 등록된 이메일/PW를 입력해주면 됩니다.
만약 앱 암호를 요구하는 메시지가 뜬다면
https://appleid.apple.com/sign-in
여기에 들어가서
요기에 들어간다음
암호를 생성하면 (ex: Test 입력)
ABCD-DEDE-ASDA와 같은 앱 암호가 뜨게 됩니다.
지금 바로 써야하니 따로 저장해서 보관해둡시다.
그리고 터미널에 입력!
. . . . . . .
자 그러면 프로젝트 폴더에 다시 들어가보면 총 4개의 파일이 생성되어 있을거에요.
GemFile
GemFile.lock
AppFile --> 번들ID, 애플ID, 팀ID 등의 정보가 담긴 파일
FastFile --> 자동화할 명령어들이 담긴 파일
위 두개 GemFile 관련된 건 fastlane 자체 버전 관리 파일이라 신경쓸 일이 없습니다.
우리가 자주 사용할 건 AppFile, FastFile이겠죠?
여기까지가 fastlane 설치 및 환경설정입니다!
fastlane/appfile 파일을 열어봅시다.
여기는 앞서 말한듯이 앱 번들ID, 애플ID, 팀ID가 담겨있다고 했죠.
app_identifier("여기프로젝트번들ID") # The bundle identifier of your app
apple_id("여기여기이메일") # Your Apple Developer Portal username
app_identifier에는 ("번들ID")
apple_id에는 ("애플계정 이메일")을 입력 후 저장해주세요.
근데 여기서 다수의 인원이 프로젝트를 함께 할 경우 git으로 코드베이스를 받아 사용하게 되면 파일이 왔다갔다해서 apple_id 부분에 혼선이 생길 수 있습니다.
apple_id(ENV["APPLE_ID"]) # Your Apple email address -> Please Set Env Variable in /fastlane/.env!!
apple_id 부분을 위와같이 수정 후 따로 파일을 만들어서 거기에 apple_id를 설정할거에요.
fastlane 폴더 안에 .env 파일을 생성 후 이메일을 적어줍시다.
APPLE_ID="자신의 애플 아이디"
그리고 gitignore 파일을 열고 예외처리 해줍시다.
/fastlane/.env
이렇게 하면 git으로 코드베이스가 왔다갔다 해도 fastlane이 관리하는 애플계정에는 혼선이 없게됩니다!!!
fastlane 폴더의 FastFile에는 다음과 같이 기본적으로 스크립트가 세팅되어 있을거에요.
default_platform(:ios)
platform :ios do
desc "Push a new release build to the App Store"
lane :release do
build_app(scheme: "test")
upload_to_app_store(skip_metadata: true, skip_screenshots: true)
end
end
우린 이제 여기를 입맛에 맞게 수정해서 자동화 할겁니다.
platform :ios do - end 구문 안에 넣을건데요.
desc "build app and upload to testflight"
lane :beta do
get_certificates
get_provisioning_profile
increment_build_number(
build_number: latest_testflight_build_number + 1
)
build_app(
configuration: "Debug"
)
upload_to_testflight
slack(
message: "fastlane Testflight 앱 배포에 성공했습니다!",
slack_url: "https://hooks.slack.com/채널 훅 링크"
)
end
순서대로 설명하면
1. lane : beta do ~
이 부분은 fastlane 실행 시 원하는 행동을 "지정"할 때 사용됩니다.
만약 beta로 시작된 부분이 현재 하고있는 testflight에 앱을 등록하는 작업일 때 터미널에 fastlane beta 라고 입력하면 자동으로 해당 스크립트가 실행됩니다.
lane : beta 부분을 lane : test로 바꾸면 터미널 실행 명령어는
fastlane test 가 되겠죠.
- get_certificates, get_provisioning_profile
cert, sign를 이용해 사이닝(인증)하는 방법입니다.
각각 인증서와 프로필을 자동으로 가져오게 합니다.
- increment_build_number()
함수명만 봐도 현재 버전의 최신 빌드넘버에서 + 1 해주는 걸 알 수 있씁니다!
- build_app(configuration: ~)
여기는 스키마 값을 넣어주는 건데요, 따로 회사 내규에서 정의되어 있지 않다면 Debug/Release로 나누는 걸 추천합니다.
혹은
build_app(workspace: "MyProject.xcworkspace", scheme: "MyProject")로 설정해도 됩니다.
- upload_to_testflight
testflight에 앱을 등록합니다.
- slack
여기는 슬랙의 특정 채널에 알림 기능을 넣을 수 있습니다.
여기서 slack 채널 알림 기능은 채널의 링크를 복사한다고 되는 게 아닌데요.
Slack hook url 얻기
에 로그인하셔서 알림을 원하는 해당 채널에 권한을 준뒤 web hook url을 가져와 넣어주면 됩니다.
명령어를 더 넣을수도 있는데요
자세한 사항은 fastlane - slack 을 참고해서 입맛에 맞게 추가하시면 됩니다~!!
이제 저장한 뒤
터미널에
fastlane beta
중간중간에 애플 계정과 비밀번호 혹은 앱암호를 요구할 수도 있습니다!
. . . . . . . . . .
이렇게 비슷하게 에러없이 뜬다면 성공!
저는 12분이 걸렸네요 하하