본문 바로가기

iOS

[iOS] Fatslane + Github Actions로 CI/CD 파이프라인 구축하기 (3편 - fastlane으로 TestFlight에 앱 업로드하기)

 

[iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (1편 - CI/CD란 무엇일까?)

[iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (2편 - Github Actions 살펴보기)

 


iOS 앱의 배포 과정

iOS 앱의 배포과정은 Xcode에서 schema를 정하고 archive하는 것으로 시작한다. 앱이 배포되기까지의 과정은 아래와 같이 크게 3가지의 작업으로 나눠 생각할 수 있는데 각 과정이 연속적이지 않기 때문에 수작업의 경우 기다렸다가 다시 실행해주는 소모적인 작업을 반복해야 한다.
Archive - 앱을 아카이브하는 시간
Upload - AppStore Connect에 앱을 업로드하는 시간
Deploy - 테스트플라이트 또는 앱스토어에 배포하는 시간

위와 같이 매번 반복되는 과정을 자동화하기 위하여 CI/CD 툴을 사용하는데, 이번에는 fastlane을 사용하여 버전 넘버를 관리하고 앱을 자동으로 앱스토어에 업로드하는 방법에 대해서 알아보자.

Fastlane이란?

fastlane은 iOS의 빌드 툴로 많이 사용되며, 터미널을 통해 구동할 수 있다. 이러한 터미널 입력 부분을 자동화하기 위해서 github actions를 섞어 쓰는 것이다. Fastlane 공식 홈페이지

 


공식 홈페이지에 접속하면 Fastlane의 대표적인 기능들에 대한 설명을 볼 수 있다. 배포 과정에서 자동으로 스크린 샷을 찍어주고, 베타 또는 App store에 배포를 해주며, Code Signing 과정 또한 자동으로 만들어준다.

Fastlane 및 Command lline tools 설치

Fastlane을 사용하기 위해서는 우선 아래 두 서비스의 설치가 요구된다. 설치되어 있지 않다면 하나씩 설치해주자. Xcode command line tools는 개발 환경 구성을 위한 커맨드 라인 명령어를 사용할 수 있도록 하는 역할을 한다.

Xcode command line tools 설치하기

xcode-select --install

Fastlane 설치하기(Gem 또는 Brew를 통해 컴퓨터에 설치)

# Using RubyGems
sudo gem install fastlane -NV

# Alternatively using Homebrew
brew install fastlane

Xcode 프로젝트에 Fastlane Init하기

이제 Fastlane을 Mac에 설치했으니 원하는 프로젝트 경로에 init 해보자!

fastlane init

터미널에 뜨는 메시지를 통해서, 현재 디렉토리에 있는 iOS나 Android 프로젝트를 찾고 ./fastlane 폴더를 만들었다는 것을 알 수 있다.

 

이번에는 TestFlight 업로드를 목적으로 하기 때문에 2번 입력해 주었다. 이렇게 하면 Fastlane 세팅을 위한 일련의 작업들이 진행된다. 대충 보았을 때 Swift Package Manager의 의존성을 resolve하고, 프로젝트에서 빌드 세팅을 탐색하며 가능한 schema들을 찾는 것 같다. 이후 아래와 같이 Apple ID를 입력할 수 있는 화면이 나온다.

 

앱 스토어 커넥트에 연동하여 provisioning file을 만들고 관리하며, 앱스토어와 테스트플라이트에 버전을 업로드하고 관리하기 위해서 Apple ID와 Password를 받는다는 내용이다. ID와 패스워드, 이중 인증 비밀번호까지 입력해주면 App store connect teams와 Developer Portal의 Team을 고르라는 내용이 나온다. 각 프로젝트에 맞게 골라준다.
링크를 참고하면 Fastlane에서 사용하는 Credentials_manager에 대한 내용을 확인할 수 있다. keyChain에 저장된 credentials를 추가하고 삭제하는 변경하는 방법에 대한 내용은 물론 환경 변수를 이용하거나 Custom Solution을 이용하여 Authentication을 하는 방법에 대해서 나와 있다.

 

해당 ID와 번들 identifier에 대해 연동이 가능한 것이 확인되면, bundle update 명령어를 통해 bundle을 업데이트하는 것을 알 수 있다. 또한 Fastfile 및 Appfile, Gemfile이 생성된다. Enter를 눌러서 계속해준다.

 


그러면 위와 같이 Fastlane이 시작되는 모습을 확인할 수 있다. Fastlane은 자동화 환경 설정을 위해 Fastfile을 이용하며, 그 안에 다양한 lanes를 저장하고 사용할 수 있다고 설명되어 있다.

fastlane setup 해보기

fastlane beta

터미널에 위의 명령어를 입력하면, 테스트플라이트에 배포하기 위한 플로우가 자동으로 진행된다!
앱 버전을 아카이빙하는 일련의 과정을 거치면, 다음 단계로 Upload 과정이 나온다.

 

Upload를 진행하기에 앞서 App store connect에서 사용하기 위한 앱 암호가 필요하다고 한다. 앱 암호는 Apple에서 제공하지 않는 앱 서비스에서 로그인하기 위해 필요한 암호이며, 링크에서 생성할 수 있다. 만약 CI machine을 사용한다면 환경 변수를 이용하여 앱 암호를 설정해줄 수 있다고 한다.

 

그리고 충분한 시간을 기다리면 앱스토어 커넥트에 새로운 버전이 올라간 것을 확인할 수 있다!

 

 마지막에는 각 스텝에서 얼마만큼의 시간이 걸렸고, fastlane을 통해서 시간을 아꼈는지에 대한 리포트가 나온다. 다음 글에서는 Fastfile을 조금 더 깊게 살펴보고, Github Actions와 연동하여 Merge 시에 새로운 버전이 testFlight에 업로드 되도록 만들어 보자!