본문 링크 (Original Link)

Xcode 9 + Xcode Server = 종합 iOS CI

2018.04.04

# • #

by Shashikant Jagtap, translated by pilgwon

image1

WWDC 2017에서 애플은 거의 모든 iOS 개발자가 미소지을 만한 무언가를 ‘Xcode와 Xcode Server의 Signing에 변경된 점’ 세션에서 공개했습니다. 말로하긴 어렵지만, 그것으로 인해 애플 플랫폼, 특히 Xcode 9과 Xcode Server를 쓰는 iOS와 macOS의 지속적인 통합(CI)이 아주 쉬워졌다고 할 수 있습니다.

Xcode 9 이전의 CI

Xcode 9가 나오기 전에는 iOS에서 CI란 너무 어려운 일이었습니다. 대부분은 아래와 같았을 것입니다.

Xcode 9과 함께 나온 Xcode Server는 이 모든 것들을 과거의 일로 만들어버렸습니다. 이제 위의 일은 아주 가끔씩 만나는 일이 돼버렸습니다. 그리고 Xcode Server는 그것들을 아주 쉽게 다룹니다. 개발자 도구를 위해 일하는 개발자분들에게 감사드립니다. 무엇이 바뀌었는지 볼까요?

Xcode 9 이후의 CI

Xcode 9에선 다음과 같은 Xcode에 내장된 CI 관련 기능을 만나볼 수 있습니다.

이제 Xcode Server로 설정하는 법이 얼마나 쉬운지 알아볼 차례입니다.

Xcode Server 설정하기

앞서 말했듯이, Xcode Server는 더 이상 macOS Server 앱을 필요로 하지 않고 Xcode에 합쳐졌습니다. Xcode 설정에서 “Servers & Bots” 탭을 확인할 수 있습니다. Xcode Server는 로컬 맥이나 또 다른 맥을 통해 설정할 수 있습니다. 그저 맥과 통합할 유저를 고르기만 하면됩니다. Xcode Server를 설정하는 법을 아래 GIF로 정리했습니다.

image2

서비스가 돌아가고 있는동안, 우리는 우리만의 Xcode 봇을 만들어서 CI를 시킬 수 있습니다. 이 튜토리얼에서는 macOS와 iOS 어플리케이션을 위한 봇을 둘 다 만들 겁니다. 우리는 macOS를 위한 XCFit과 iOS를 위한 XCS-Demo의 봇을 만들 것입니다.

iOS 앱을 위한 봇 만들기 - iOS

우리는 데모 앱인 XCS-Demo for iOS를 이용해서 Xcode Server를 설정할 것입니다. 먼저 “Product > Create Bot” 을 선택하시고 “XCFit Bot” 이라고 이름을 짓습니다. 다음은 봇에 GitHub 레포를 추가해야 합니다. Git 레포는 SSH로 추가합니다. Xcode는 그 레포지토리를 믿냐고 물어볼 것이고 “Trust”를 선택하시고 기존의 SSH 키를 사용하면 됩니다. 성공적으로 인증되면 빌드를 설정할 수 있게 될 것입니다. 빌드 설정은 빌드의 일부로 수행하고자 하는 것을 구성하는 주요 단계입니다. 주요 설정 옵션을 살펴봅시다.

image3

다음 화면은 봇 통합을 예약하는 방법에 대해 설명하는 화면일 것입니다.

다음으로 코드 사이닝을 추가로 선택할 수 있습니다. 그리고 Xcode Server가 개발자 포탈에 접근할 수 있는 권한을 줄 수 있고 그렇게 하면 우릴 위해 모든것을 해줄 것입니다. 또 다른 옵션으로는 서버 머신의 인증서를 수동으로 고를 수도 있습니다.

코드 사이닝 자동화

image4

평행 테스팅

다수의 시뮬레이터에서 평행하게 실행이 가능하도록 하기 위한 “Run tests in parallel” 체크 박스가 있습니다.

image5

테스트 보고

봇이 테스트를 끝내고 나면, 우리는 Xcode가 보내는 보고서를 받게 될 것입니다. Xcode Server의 테스트 보고서는 아래와 같을 것입니다.

image6

행동으로 보여드릴게요

위의 모든 액션은 다음 GIF와 같을 것입니다.

image7

스위프트 패키지를 위한 봇 생성 - macOS

스위프트 패키지는 시뮬레이터나 기기에서 돌릴 필요가 없습니다. macOS에서 돌리면 되니까요. 스위프트 패키지인 XCFit을 위한 봇을 만들어봅시다. 그건 iOS보다 더 쉽고 빠를 것입니다.

image8

이점

우리는 Xcode Server의 빛이 나는 새로운 기능들을 보았지만 그 기능들이 실제 비즈니스나 팀에는 어떻게 영향을 줄 수 있을까요?

아직 없는 기능들

애플 엔지니어들이 Xcode Server를 멋지게 만들어주었지만 몇 가지 기능이 빠져있습니다.

결론

Xcode 9과 Xcode Server와 함께라면 거의 모든 것을 한 곳에서 처리할 수 있습니다. 지금까지 써 온 도구상자들(Fastlane, Facebook의 xctool, LinkedIn의 Bluepill 또는 TravisCI, CircleCI와 같은 다른 CI서버들 혹은 자가 호스팅 CI 솔루션인 Jenkins, TeamCity)을 버릴 시간이 왔습니다. 이제는 완전히 Xcode Server로 갈아탈 시간이라고 생각합니다.