Xcode 9 + Xcode Server = 종합 iOS CI
2018.04.04
#Development • #Continuous Integration
by Shashikant Jagtap, translated by pilgwon
WWDC 2017에서 애플은 거의 모든 iOS 개발자가 미소지을 만한 무언가를 ‘Xcode와 Xcode Server의 Signing에 변경된 점’ 세션에서 공개했습니다. 말로하긴 어렵지만, 그것으로 인해 애플 플랫폼, 특히 Xcode 9과 Xcode Server를 쓰는 iOS와 macOS의 지속적인 통합(CI)이 아주 쉬워졌다고 할 수 있습니다.
Xcode 9 이전의 CI
Xcode 9가 나오기 전에는 iOS에서 CI란 너무 어려운 일이었습니다. 대부분은 아래와 같았을 것입니다.
-
인증서과 프로파일로 CI 서버 머신과 싸우고 있는 경우
-
Fastlane과 같은 루비 기반 도구를 사용해서 분석, 빌드, 테스트, 그리고 인증을 자동화 한 경우
-
TravisCI나 CircleCI같은 써드 파티 클라우드 CI 서비스나 자가 호스팅 솔루션인 Jenkins나 TeamCity를 사용한 경우
-
Facebook의 xctool이나 LinkedIn의 Bluepill을 사용해서 여러 기기와 시뮬레이터에서 평행 테스트를 하는 경우
-
CI를 위해 macOS 서버 앱과 Xcode Service를 Xcode Server와 함께 사용하지만 코드 사이닝과 평행적 실행을 하지 못하고 있는 경우
Xcode 9과 함께 나온 Xcode Server는 이 모든 것들을 과거의 일로 만들어버렸습니다. 이제 위의 일은 아주 가끔씩 만나는 일이 돼버렸습니다. 그리고 Xcode Server는 그것들을 아주 쉽게 다룹니다. 개발자 도구를 위해 일하는 개발자분들에게 감사드립니다. 무엇이 바뀌었는지 볼까요?
Xcode 9 이후의 CI
Xcode 9에선 다음과 같은 Xcode에 내장된 CI 관련 기능을 만나볼 수 있습니다.
-
Xcode Server는 Xcode 9에 내장됐기 때문에 분리된 macOS 앱이 필요없습니다.
-
Xcode Server 봇에게 코드 사이닝과 여러 기기와 시뮬레이터에서의 평행 테스팅, 그리고 기기들의 프로비저닝까지 해주는 탭이 생겼습니다.
-
개발 버전, 배포 버전 둘 모두를 위한 사이닝을 자동으로 해줍니다.
-
Xcode Server가 자동 또는 수동으로 사이닝을 통해 배포 IPA를 만들어줍니다.
-
Xcode Server가 더 이상 평행하게 실행되는 동안 시뮬레이터를 실행시키지 않습니다.
이제 Xcode Server로 설정하는 법이 얼마나 쉬운지 알아볼 차례입니다.
Xcode Server 설정하기
앞서 말했듯이, Xcode Server는 더 이상 macOS Server 앱을 필요로 하지 않고 Xcode에 합쳐졌습니다. Xcode 설정에서 “Servers & Bots” 탭을 확인할 수 있습니다. Xcode Server는 로컬 맥이나 또 다른 맥을 통해 설정할 수 있습니다. 그저 맥과 통합할 유저를 고르기만 하면됩니다. Xcode Server를 설정하는 법을 아래 GIF로 정리했습니다.
서비스가 돌아가고 있는동안, 우리는 우리만의 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 키를 사용하면 됩니다. 성공적으로 인증되면 빌드를 설정할 수 있게 될 것입니다. 빌드 설정은 빌드의 일부로 수행하고자 하는 것을 구성하는 주요 단계입니다. 주요 설정 옵션을 살펴봅시다.
-
스키마
-
액션 - 분석, 테스트, 아카이브 그리고
-
설정들
다음 화면은 봇 통합을 예약하는 방법에 대해 설명하는 화면일 것입니다.
다음으로 코드 사이닝을 추가로 선택할 수 있습니다. 그리고 Xcode Server가 개발자 포탈에 접근할 수 있는 권한을 줄 수 있고 그렇게 하면 우릴 위해 모든것을 해줄 것입니다. 또 다른 옵션으로는 서버 머신의 인증서를 수동으로 고를 수도 있습니다.
코드 사이닝 자동화
평행 테스팅
다수의 시뮬레이터에서 평행하게 실행이 가능하도록 하기 위한 “Run tests in parallel” 체크 박스가 있습니다.
테스트 보고
봇이 테스트를 끝내고 나면, 우리는 Xcode가 보내는 보고서를 받게 될 것입니다. Xcode Server의 테스트 보고서는 아래와 같을 것입니다.
행동으로 보여드릴게요
위의 모든 액션은 다음 GIF와 같을 것입니다.
스위프트 패키지를 위한 봇 생성 - macOS
스위프트 패키지는 시뮬레이터나 기기에서 돌릴 필요가 없습니다. macOS에서 돌리면 되니까요. 스위프트 패키지인 XCFit을 위한 봇을 만들어봅시다. 그건 iOS보다 더 쉽고 빠를 것입니다.
이점
우리는 Xcode Server의 빛이 나는 새로운 기능들을 보았지만 그 기능들이 실제 비즈니스나 팀에는 어떻게 영향을 줄 수 있을까요?
-
빌드 자동화를 위한 스크립트를 작성하거나 인증서 및 프로파일에 대한 CI 서버를 관리할 필요가 없습니다.
-
클릭 몇 번으로 Xcode Server를 설정하고 지속적인 배포(CD)를 이룰 수 있습니다.
아직 없는 기능들
애플 엔지니어들이 Xcode Server를 멋지게 만들어주었지만 몇 가지 기능이 빠져있습니다.
-
TravisCI처럼 Pull Request 테스트 지원
-
iTunes Connect나 TestFlight에 IPA 파일을 바로 업로드하는 기능
-
빠진게 있나요?
결론
Xcode 9과 Xcode Server와 함께라면 거의 모든 것을 한 곳에서 처리할 수 있습니다. 지금까지 써 온 도구상자들(Fastlane, Facebook의 xctool, LinkedIn의 Bluepill 또는 TravisCI, CircleCI와 같은 다른 CI서버들 혹은 자가 호스팅 CI 솔루션인 Jenkins, TeamCity)을 버릴 시간이 왔습니다. 이제는 완전히 Xcode Server로 갈아탈 시간이라고 생각합니다.