CLOSE SEARCH

Xcode 5 Continuous Integration

소프트웨어 공학에서, 지속적인 통합(continuous integration, CI)은 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것이다. – 작은 단위의 작업, 빈번한 적용. 지속적인 통합은 모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점이 맞추어져 있다.

(위키백과 발췌. http://ko.wikipedia.org/wiki/지속적인_통합)

 

Xcode 5는 지속적으로 앱을 빌드하고, 전체 테스트 모음을 실행하며, 잠재적인 버그를 찾기 위해 Xcode 정적 분석기를 실행하는 ‘Bot’을 손쉽게 생성할 수 있도록 OS X Mavericks용 OS X Server와 밀접하게 연동합니다. 클릭 몇 번만으로 새로운 Bot을 생성하고 네트워크에 있는 어떤 Mac에서든 즉시 해당 Bot을 시작할 수 있습니다. 원격 Mac이 모든 통합 작업을 수행하는 동안 로컬 컴퓨터의 Xcode는 빌드 및 테스트 보고서를 표시합니다. (애플 개발자 홈페이지 발췌)

Xcode 5의 Continuous Integration 기능을 직접 사용해보기 전에는 위의 설명이 한번에 이해되지 않을 수도 있습니다. 핵심은 지정된 시점에 단위 테스트나 배포버전 생성과 같은 귀찮은 작업들을 자동으로 실행하고 결과를 웹사이트나 메일을 통해 알려준다는 것입니다. 저 역시 WWDC2013에서 처음 소개 되었을 때는 크게 주목하지 않았지만, 직접 서비스를 구성하고 프로젝트에 적용시켜보니 정말 매력적이고 편리한 기능이었습니다. 앞으로 모든 iOS&맥 개발자들이 필수로 사용해야할 서비스가 아닌가 생각됩니다.

이기능은 특히 프로젝트 후반부에 QA팀과 테스트를 진행할 때 진가를 발휘합니다. 개발자가 오류를 수정한 다음 VCS에 커밋하면 서버에서 자동으로 단위 테스트와 디바이스 테스트가 수행되고, 테스트용 배포 버전이 생성됩니다. 그리고 테스트를 담당하는 직원에게 업데이트에 대한 메일을 자동으로 보내주도록 설정해 두면, 더이상 작업 완료에 대한 문의를 받을 필요가 없습니다. 그리고 테스트 담당 직원은 배포 파일을 생성해 달라는 요청을 할 필요없이 봇 홈페이지에 가서 직접 다운로드 하면 됩니다. 지금까지 수동으로 해왔던 귀찮은 작업들이 모두 자동으로 이루어지기 때문에 개발팁, QA팀 모두에게 아주 좋은 도구임에 틀림이 없습니다.

 

Install

Continuous Integration을 사용하기 위해서는 몇가지 필요한 것이 있습니다. OS는 반드시 OS X Server가 설치된 OS X 10.9(매버릭스) 이상의 버전을 사용해야 한다. 두가지 모두 애플에서 무료로 제공하기 때문에 각각 앱 스토어와 개발자 홈페이지에서 다운로드 할 수 있습니다. 특히 OS X Server는 개발자 사이트에 로그인 한 뒤 화면 하단에 있는 메뉴를 통해 리딤코드를 발급받을 수 있습니다.

스크린샷-2013-10-24-오후-11.08.13

Xcode는 반드시 5.x 이상의 버전을 설치해야 합니다. OS X Server를 개발용 맥이 아닌 별도의 맥에 설치하는 경우에는 반드시 각각의 맥에 Xcode를 설치해야 합니다.

 

Configuration – Xcode Service

OS X 10.9, OS X Server, Xcode 5.x를 모두 설치했다면 Continuous Integration을 위한 서비스를 구성해야 합니다. 이 서비스를 “Xcode Service” 라고 부릅니다.

우선 서버 앱을 통해 Xcode Service를 활성화 시켜야 합니다.

스크린샷-2013-10-24-오전-2.42.21

1. Server 앱을 실행한 다음 서비스 그룹에 있는 Xcode 항목을 선택합니다. 그런 다음 “Xcode 선택…” 버튼을 클릭해서 설치되어 있는 Xcode를 선택합니다. 앞에서도 설명했던 것처럼 서버에도 반드시 5.x 이상의 Xcode가 설치되어 있어야 합니다.  Xcode Service는 지정된 Xcode를 사용해서 봇을 실행하고 아카이브를 생성하는 등의 작업을 수행합니다.

2. 화면 상단에 있는 스위치를 클릭해서 Xcode Service를 활성화 시킵니다.

스크린샷_2013-10-24_오전_2.43.40

3. “편집…” 버튼을 클릭해서 봇 권한을 설정합니다. “다음 사용자가 봇 생성 및 보기 가능” 옵선에서 “모두”를 선택하지 않는 경우 인증되지 않은 사용자는 Bots Website의 시작 화면만을 볼 수 있습니다. “다음에 대해 보기 전용 접근도 허용” 메뉴를 활성화 하면 인증되지 않은 사용자도 대부분의 화면에 읽기 전용 권한으로 접근할 수 있는데, 이러한 방식은 봇을 관리할 필요가 없는 프로젝트 관리자나 QA 담당자에게 적합합니다.
스크린샷-2013-10-24-오전-2.43.45

4. “추가…” 버튼을 클릭해서 개발팀을 추가합니다. 등록된 개발자 계정으로 로그인 한 뒤 목록에 표시된 팀을 선택하면 됩니다. 팀을 추가한 뒤에 테스트에 사용할 장비를 추가할 수 있습니다.

 

Configuration – Xcode

Xcode Service 구성이 완료된 다음 개발에 사용할 Xcode(서버에 설치된 Xcode 아님)에서 OS X 서버 계정을 추가해야 합니다.

스크린샷_2013-10-24_오전_2.47.27

1. Xcode > Preferences… 메뉴를 선택해서 환경설정 창을 열고, Accounts 버튼을 클릭합니다. 화면 하단에 있는 + 버튼을 클릭한 다음 Add Server… 메뉴를 선택하면 서버 계정을 추가할 수 있는 대화상자가 표시됩니다.

스크린샷_2013-10-24_오전_2.47.48

2. 앞에서 OS X Server를 정상적으로 구성했다면 대화상자에 서버 이름이 표시됩니다. 서버 이름을 선택한 다음 Next 버튼을 클릭합니다.
서버가 로컬에 설치되어 있는 경우에는 로컬에서 접근가능한 URL (xxx.local)이 자동적으로 입력됩니다. 만약 원격에 있는 서버를 사용하고자 하는 경우에는 해당 서버의 주소를 입력해 줍니다.

스크린샷_2013-10-24_오전_2.48.21

3. 서버 로그인 계정을 입력하고 “Add” 버튼을 클릭하면 OS X 서버가 정상적으로 등록되어 있는 것을 확인할 수 있습니다. Address: 에 표시되어 있는 URL을 클릭하면 Bots Website를 확인할 수 있습니다.

 

Configuration – Source Code Repository

Xcode Service는 Git과 Subversion을 지원합니다. Xcode 5의 Continuous Integration은 저장소를 기반으로 실행되기 때문에 반드시 로컬 저장소나 원격 저장소를 구성해야 합니다. GitHub와 같은 서비스를 사용하거나 Server 앱에서 제공하는 Git 서버를 사용할 수도 있습니다.

저장소는 다양한 방식을 통해서 구성할 수 있지만 여기에서는 새로운 Xcode 프로젝트를 생성할 때 사용할 수 있는 방식만 설명하도록 하겠습니다.

스크린샷_2013-10-25_오전_12.18.21

일반적인 방식으로 프로젝트 생성한 다음 마지막 단계에서 git 저장소를 선택하도록 설정해 주어야 합니다. 여기에서 주의할 점은 My Mac을 선택하는 경우 Server를 통해 호스팅 되는 저장소가 아니기 때문에 Continuous Integration를 사용할 수 없다는 것입니다. 반드시 그 아래쪽에 표시되어 있는 서버 중 하나를 선택하거나 “Add To New Server…”를 선택하여 새로운 서버를 추가해 주어야 합니다.

앞에서 설명한 내용대로 올바르게 구성되었다면 Server 앱을 통해 방금 생성한 프로젝트가 Git을 통해 호스팅되고 있는 것을 확인할 수 있습니다.

스크린샷_2013-10-25_오전_12.26.55

위의 화면에 있는 다양한 메뉴를 통해 새로운 저장소를 추가하거나 권한 등을 설정할 수도 있습니다.

 

Bot

icon-bots

Continuous Integration의 핵심은 지금부터 설명할 Bot입니다. Bot은 소스 코드 저장소에 있는 최신 버전의 프로젝트에서 통합작업을 수행하는 개체입니다. 이 개체의 실행은 앞에서 설명했던 Xcode Service가 담당합니다. Bot이 수행하는 통합작업에는 다음과 같은 작업이 포함되어 있습니다.

[list icon=”icon: asterisk”]

  • 프로젝트 빌드
  • 정적 분석(Static Analyze)
  • 단위 테스트
  • 프로젝트 아카이브, 배포 파일 생성

[/list]

Bot은 통합작업을 수행할 때 Xcode Scheme을 사용합니다. 그러므로 반드시 Bot이 사용할 Scheme을 공유하고 소스 저장소로 전송해야 합니다.

스크린샷_2013-10-25_오전_12.42.33

가장 먼저 scheme 관리 창(Product > Scheme > Manage Schemes…)을 열고 Bot이 사용할 scheme을 선택한 다음 Shared 체크 박스를 선택합니다. 이렇게 해주면 선택한 scheme을 소스 저장소로 전송할 수 있게 됩니다.

스크린샷_2013-10-25_오전_12.47.16

Shared Data 폴더와 하위 항목을 모두 선택해 주고, Push to remote 옵션을 선택한 다음 Commit… 버튼을 클릭합니다. scheme이 저장소로 전송되고 이제 드디어 Bot을 생성할 준비가 완료된 것입니다.

스크린샷_2013-10-25_오전_12.52.49

Product > Create Bot… 메뉴를 선택하면 Bot을 생성할 수 있는 화면이 표시됩니다. Scheme 항목에 선택된 scheme은 반드시 소스 저장소에 저장되어 있는 scheme이어야 합니다. 원하는 이름을 입력한 후에 Next 버튼을 클릭합니다.

스크린샷_2013-10-25_오전_12.58.09

 

Bot은 세가지 방식으로 실행할 수 있습니다.

[list icon=”icon: circle-arrow-right”]

  • Periodically: 시간별, 일별, 주별로 원하는 주기를 설정하여 반복적으로 실행합니다.
  • On Commit: 소스를 저장소로 Commit 할 때마다 실행합니다.
  • Manual: Xcode나 Bot WebSites에서 제공하는 메뉴를 통해 직접 실행합니다.

[/list]

필요에 따라 나머지 옵션을 선택한 다음 Next 버튼을 클릭합니다.

스크린샷-2013-10-25-오전-1.04.29

 

Bot이 프로젝트 테스트에 사용할 디바이스나 시뮬레이터를 선택합니다. 실제 디바이스를 선택하는 경우에는 반드시 해당 디바이스가 Xcode Service를 실행중인 맥에 연결되어 있어야 합니다. 그리고 디바이스의 잠금기능이 활성화 되어 있는 경우 테스트가 실패하기 때문에 이 기능도 잠시 꺼두어야 합니다. 원하는 항목을 선택한 다음 Next 버튼을 클릭합니다.

스크린샷_2013-10-25_오전_1.08.23

 

Bot은 통합작업의 수행 결과를 이메일을 통해 전달해 줍니다. 원하는 이메일 계정을 입력한 다음 “Create Bot” 버튼을 클릭하면 새로운 Bot이 생성됩니다. 앞에서 “Integrate Immediately” 옵셥을 선택했기 때문에 첫번째 통합이 자동적으로 수행되고 이와 관련된 정보는 로그 네비게이터에서 확인할 수 있습니다.

스크린샷_2013-10-25_오전_1.13.03

제가 설명한대로 Bot을 생성하셨다면 위의 스크린샷과 같이 통합작업이 실패할 것입니다. 실패하는 이유는 Xcode에서 기본적으로 생성한 단위 테스트가 항상 실패하도록 코딩되어 있기 때문입니다. 단위 테스트 파일을 다음과 같이 수정한 다음 Commit & Push를 수행하면 Bot이 자동적으로 실행됩니다.

스크린샷 2013-10-25 오전 1.22.45

현재 약 30초 정도의 딜레이가 존재하는데, 로그 네비게이터에서 First Bot 항목을 선택한 다음 Integrate Now 버튼을 클릭해서 Bot을 직접 실행할 수도 있습니다. 실행이 완료되면 이전과 달리 테스트가 정상적으로 완료된 Bot Viewer 화면을 확인할 수 있습니다.

스크린샷-2013-10-25-오전-1.26.10

그리고 마지막 Bot 생성 단계에서 설정한 이메일로 실행 결과가 전달됩니다.

스크린샷-2013-10-25-오전-1.34.47

통합 보기를 선택하면 웹을 통해 실행 결과를 확인할 수 있는 Bot Website로 연결됩니다. “제품 다운로드”를 통해 ipa 파일을 바로 다운로드 할 수도 있기 때문에 매우 편리한 기능입니다.

Bot Viewer 화면에는 많은 기능이 숨어 있습니다. 사용법이 매우 직관적이므로 몇번만 사용해 보시면 쉽게 활용하실 수 있을거라 생각됩니다.^^

 

Bot Website

또 한가지 멋진 기능은 Bot Website입니다. Xcode Service는 Bot Viewer와 유사한 기능을 제공하는 웹사이트를 자동으로 생성해 줍니다. 적절한 권한이 있다면 Xcode를 사용하지 않고도 웹에서 Bot을 관리(생성, 편집, 삭제)할 수도 있습니다. Bot Website도 여러가지 기능을 제공하지만 Bot Viewer와 마찬가지로 별다른 설명없이도 쉽게 사용할 수 있을 것입니다!

스크린샷-2013-10-25-오전-1.43.45

 

스크린샷-2013-10-25-오전-1.47.06

 

이와 같이 Xcode 5에서 Continuous Integration을 사용하도록 설정하고 Bot을 생성하는 과정은 매우 단순하고 직관적입니다. 개발자 뿐만 아니라 프로젝트 팀원 전체에 큰 도움을 줄 수 있는 멋진 기능이므로 반드시 사용해 보시기 바랍니다. OS X 서버를 설치하고 구성하는 것이 귀찮아서 이 기능을 사용하지 않는 분이 계실수도 있지만, 한번이라도 사용해 본 분들은 반드시 반하게 될 것입니다^^

 

 

 

Filed under: Apple WWDC 2013, iOS

  1. krack
    좋은 정보에요. 담아가도 괜찮겠지요?
    • Kei
      넵! 많은 개발자 분들이 보실수록 더 좋죠^^
  2. 잘보고 갑니다. 블로그도 깔끔하고 좋네요. 지난번 번역도 잘봤었습니다. 혹시, OpenGL Programming Guide 8th Edition 번역할 생각은 없으세요? 좋은 책인데, 천천히 저는 읽고는 있는데, 역시 번역본을 손에 쥐고서, 있어야... 아~, 어째든 수고가 많으십니다. 앞으로도, 힘내세요!
    • Kei
      도움이 되셨길 바랍니다^^ 요즘 프로젝트에 치이다 보니 번역할 시간이 없네요ㅠㅠ 나중에 기회가 되면 한번 시도(?) 해 보겠습니다!