Slug felix automation cover ko

일상적인 iOS 개발 태스크를 자동화하는 법

iOS 개발자라면 모두 앱 스토어에 새 빌드를 올릴 때 유사한 작업 흐름을 경험할 겁니다. 이 프로세스 중 많은 부분을 직접 해야만 하는데 이를 자동화하면 어떨까요? fastlane이라는 Felix Krause의 툴셋을 사용하면 테스트와 빌드를 만들 수 있으며 간편하고도 빠르게 릴리즈를 할 수 있어 개발자가 실제로 코드를 작성하는 데 집중할 수 있습니다.


소개 (0:00)

fastlane은 오픈 소스 커맨드 라인 도구로 테스트, 빌드, 릴리즈의 전 과정의 자동화를 도와줍니다. 스크린샷을 만들거나 코드 사인을 다루는 등 전반적으로 프로비저닝 프로파일 관리를 도와주는 9개의 개별 툴로 구성됩니다. fastlane 자체는 이 모든 툴과 몇몇 써드파티 툴을 단일 워크플로로 연결하는 툴로, 이를 사용해 프로세스의 모든 단계를 자동화할 수 있습니다. 이 포스트에서는 자주 발생하는 3가지 공통적 이슈와 해결책을 다룰 예정으로, 아름답고 지역화된 스크린샷을 찍는 방법과 코드 사인과 프로비저닝 프로파일, 인증 등의 기능을 다루는 방법, fastlane을 사용해서 전체 프로세스를 자동화하는 법을 알려드리겠습니다.

스크린샷 (1:31)

앱 스토어에 애플리케이션을 올릴 때마다 새 스크린샷을 찍어서 iTunes Connect에 올려야 하며, 애플리케이션의 디자인을 바꿀 때, Apple이 새 디바이스를 출시할 때, 새 언어를 추가할 때에도 매번 새 스크린샷을 만들어야 합니다. 따라서 스크린샷을 제대로 찍는 것은 힘든 작업입니다. 10가지 언어로 iPad Pro를 포함한 6가지 디바이스를 지원하고 있는데 각 조합에 5개의 스크린샷이 있다면 결국 300개의 스크린샷을 만들어서 iTunes Connect에 올려야 합니다.

이런 개발 뉴스를 더 만나보세요

fastlane은 “snapshot”이라는 툴을 제공하는데 올해 WWDC에 소개된 UI testing을 사용합니다. UI testing은 애플리케이션과 자연스럽게 상호작용할 수 있도록 하는 멋진 기술로, UI 테스트를 실행하기 위해 디자인되었지만 snapshot을 사용해서 스크린샷을 생성하는 데 활용할 수도 있습니다.

이 작업은 Objective-C나 Swift로 쓰인 UI test automation 파일의 조항에 따라 이뤄지는데, UI test automation 파일은 snapshot에게 앱을 어떻게 조작해서 어디에서 스크린샷을 찍을지 알려줍니다.

프로젝트에 snapshot을 설정했다면 커맨드 라인에서 snapshot을 실행합니다. snapshot은 자동으로 프로젝트 세팅을 감지합니다. 특히 백그라운드에서 실행되므로 스크린샷을 생성하는 동안 다른 작업을 할 수 있습니다. 시뮬레이터가 화면을 회전하고 탭하는 등 신기한 작업을 하는 것을 볼 수도 있습니다.

모든 작업이 끝나면 snapshot이 생성한 스크린샷을 모두 포함한 HTML 리포트를 만듭니다. 이를 통해 앱이 여러 디바이스와 언어에서 어떻게 보이는지 한눈에 볼 수 있습니다. 또 다른 fastlane 툴인 “deliver”를 사용하면 모든 스크린샷을 iTiunes Connect에 올릴 수 있습니다.

프로비저닝 프로파일 (3:58)

커맨드 라인을 통해 올바른 코드 사인을 만들고 애플리케이션을 빌드할 수 있는 방법에 대해서 말해 보겠습니다. 원격 데스크탑 연결을 통한 SSH나, Jenkins나 Travis와 같은 CI service를 사용해서 애플리케이션을 빌드하고 사인할 수 있으려면 이 방법이 필요합니다.

코드 사인을 하려면 인증이 필요한데 우리의 “cert” 툴을 통해 가능합니다. cert를 사용하면 로컬 머신에 설치된 코드 사이닝 identity가 유효한지 확인할 수 있습니다.

“sigh”는 프로비저닝 프로파일을 위한 툴입니다. sigh는 cert의 정보를 사용해서 애플리케이션을 사인할 수 있는 유효한 프로비저닝 프로파일을 Apple Developer portal로부터 다운받을 수 있게 합니다.

다음으로 애플리케이션을 빌드해야 하는데 “gym”을 사용하면 애플리케이션을 빌드하고 이를 IPA 파일로 패킹해서 코드 사인해줍니다. 그 결과로 iTunes Connect나 서드파티 테스트 서비스에 올릴 수 있는 IPA 파일을 얻습니다.

터미널에서는 단지 각 툴에 한 가지씩 세 가지 명령을 내리기만 하면 됩니다. 각 명령에는 다양한 옵션이 있지만, 기본 옵션도 잘 작동합니다. 하지만 이 세 가지 명령을 내리는 것도 꽤 많은 작업입니다. 더 자동화할 방법은 없을까요?

자동화와 베타 Deployment (5:28)

fastlane을 사용해서 베타 deployment 자동화를 시작할 수 있습니다. 상사나 프로젝트 매니저가 클라이언트에 보여주기 위해 폰에 최신 베타 버전을 설치해달라고 한 상황을 가정해 봅시다. 보통 버전 넘버나 빌드 넘버를 올리고 커밋한 다음 깃에 푸시해서 애플리케이션을 제대로 빌드하고 사인할 수 있는 유효한 프로비저닝 프로파일을 가졌는지 확인한 후, Xcoder를 사용해 export해서 IPA를 만들어서 베타 테스트 서비스나 iTunes Connect에 올리고 릴리즈 노트를 더한 후에야 이 버전을 상사에게 보낼 수 있겠죠.

멋진 것을 만드는 데 쓸 수 있는 귀한 시간을 낭비하는 작업입니다. 만약 버튼 하나만으로 이런 작업을 자동화하고 연속적인 작업 단계를 줄일 수 있다면 어떨까요?

fastlane은 애플리케이션 빌드와 디플로이에 관한 모든 정보를 포함한 “Fastfile”을 사용합니다. 단지 실행할 단계와 순서를 정의하기만 하면 fastlane이 실행해 줍니다. 어떤 단계가 실패한다면 실행이 멈추므로 전체 lane이 실패합니다.

자동화 예제 (6:43)

앞서 말한 상황을 자동화하기 위해서는 먼저 lane을 정의해야 합니다. 원하는 수만큼 lane을 정의할 수 있지만 일단 베타 lane에 대해 말씀드리겠습니다. 베타 레인은 3가지 액션을 포함하는데, 첫 번째로 Xcode 프로젝트를 위한 버전 넘버를 올리고, 다음으로 그 버전을 커밋하고, 마지막으로 GitHub 등의 원격 git에 푸시하는 것입니다.

cert를 사용해서 유효한 코드 사이닝 identity를 받고, sigh를 사용해서 프로비저닝 프로파일을 받은 후, gym을 사용해서 애플리케이션을 빌드하고 사인합니다. 마지막으로 우리 바이너리 파일을 배포하려면 Crashlytics와 같은 베타 테스팅 서비스에 올리고 Slack에 메시지를 포스팅해서 모든 팀 구성원에게 새 빌드가 준비됐음을 알립니다.

fastlane을 사용하면 Slack, email, Git 상호작용 등 내부적으로 빌트인된 많은 통합 기능을 사용할 수 있습니다. 만약 아직 통합 기능이 없다면 필요에 맞게 fastlane을 확장하거나 기존 툴을 사용할 수도 있습니다.

fastlane은 특정 빌드 단계에서 다음 단계로 정보를 전달하는 기능도 갖추고 있어서 최소한의 깔끔한 설정 파일만으로 관리할 수 있습니다. 예를 들어 Crashlytics 액션은 IPA 파일의 위치를 알며, gym은 어떤 프로비저닝 파일을 사용해야 할 지 압니다.

설정 파일을 다 작성하면 fastlane 베타를 통해 실행할 수 있습니다.

Deployment (8:28)

fastlane을 사용해서 실제로 앱 스토어에 앱을 deploy 할 수 있습니다. “fastlane iOS release” 레인을 사용하면 먼저 gym을 사용해서 빌드와 사인을 합니다. 다음으로 애플리케이션을 실행하고 가능한 매개 변수에 대한 요약표를 작성합니다. 이후 Pilot이라는 툴을 사용해서 iTunes Connect에 빌드를 올립니다. 이 툴은 Apple이 제공하는 iTunes Transporter를 사용합니다.

일반적으로 fastlane은 명령을 실행할 때마다 출력해서 상황을 파악할 수 있고 문제 발생 시 이슈 디버깅이 쉬우며, 사용한 매개 변수에 대한 요약도 제공합니다. 특히 몇 주전의 특정 매개 변숫값이 무엇인지 파악할 수 있어 Jenkins 등 CI system을 사용할 때 유용합니다.

툴 개요 (9:34)

fastlane 내의 어떤 툴이 사용 가능한지 간단히 살펴보겠습니다.

먼저 deliver에 대해 말하자면, iTunes Connect에 앱의 메타데이터, 스크린샷, 바이너리 파일을 올릴 수 있는 툴입니다. 심지어 리뷰를 위한 앱 제출도 가능하죠.

snapshot은 지역화된 스크린샷을 만들어 주고, frameit은 snapshot에서 생성한 스크린샷에 기기 프레임을 적용하고 위에 텍스트를 넣어서 멋진 설명 사진을 만들어 줍니다.

pem은 푸시 알림 인증 생성을 자동화해줍니다.

sigh는 프로비저닝 프로파일을 만들고, cert는 코드 사이닝 identity를 만들며, produce는 커맨드 라인으로 iTunes Connect에서 새 앱 ID를 만들고 Apple Developer portal에 올릴 수 있게 합니다.

gym은 애플리케이션을 빌드하고, 새로 선보이는 scan은 간편하게 앱의 테스트를 실행할 수 있게 합니다.

Spaceship (10:27)

Spaceship은 사용자가 직면하는 툴이 아니라 내부적으로 Apple의 web service와 통신할 수 있도록 하는 툴입니다. 다른 툴도 대부분 Apple과 어떤 식으로든 통신하는데, 각기 고유한 툴을 사용해 추상화하고 고유한 Ruby gem에 넣어서 사람들이 고유한 툴을 재사용할 수 있죠.

한편 Spaceship은 API를 직접 사용하는 평범한 HTTP 클라이언트입니다. 세 API 포인트는 iTunes Connect, Apple Developer portal, Xcode API인데, Spaceship은 이 모두를 하나의 통합된 API로 정리했습니다.

Boarding (11:04)

Boarding이라는 툴은 잠재 베타 사용자를 위한 시작 페이지를 쉽게 구축할 수 있게 돕는 툴입니다. Heroku를 통해 호스팅해서 베타 테스트에 참여하려는 사람들의 이메일 주소를 받을 수 있죠.

WatchBuild (11:19)

최근 iTunes Connect의 처리 시간이 10분에서 10시간으로 증가했습니다. 여러분 대신 새로운 툴인 WatchBuild가 이 시간 동안 대기하다가 빌드가 준비되면 알려줍니다.

사용을 시작해 보세요. (23:00)

fastlane의 여러 기능과 이를 사용해서 여러분의 개발 및 deployment 시간이 얼마나 단축될 수 있는지에 대한 간단한 설명을 이것으로 마칩니다. fastlane은 기존에 사용하던 툴이나 설정의 복잡도와 관계없이 여러 형태의 설정을 지원합니다. fastlane.tools에서 어떻게 툴 사용을 시작할 수 있는지 확인해 보세요.

다음: Realm Obj-C와 Realm Swift의 새로운 기능을 소개합니다.

General link arrow white

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.

Felix Krause

Felix Krause is the developer of fastlane, an open-source tool chain for automating iOS development tasks. He now works on fastlane at Google.

4 design patterns for a RESTless mobile integration »

close