Xcode는 애플 전용 데스크톱 운영체제인 macOS에서만 실행할 수 있습니다. MS의 Windows 운영체제가 설치된 일반 PC에서는 Xcode를 설치할 수 없습니다.

Xcode의 정식 버전은 항상 앱스토어에서 받을 수 있지만, 베타 버전은 애플에서 제공하는 애플 개발자 사이트에서만 내려받을 수 있습니다. 베타 버전은 정식 버전보다 한발 앞서 최신 개선 사항을 적용해 볼 수 있다는 장점이 있지만 아직 안정화되지 않은 버전이어서, 개발 도중 알 수 없는 오류로 인하여 Xcode가 다운되기도 합니다. 호환성이 담보되지 않은 문법 및 구문 변경으로 인해 멀쩡하게 잘 돌아가던 스위프트 소스 코드들이 새 베타 버전의 Xcode에서 오류를 뱉어 낼 수도 있습니다.

1. 통합 개발 환경

1-1. 통합개발 환경 이전의 프로그래밍

최근에 널리 사용되는 프로그래밍 언어 대부분은 개발 생산성을 높이기 위해 여러 가지 기능이 집약된 전용 개발 툴을 제공하거나, 또는 유명한 개발 툴에 플러그인 방식으로 사용할 수 있도록 컴포넌트를 제공합니다. 이같은 도구들은 개발을 무척 편리하게 해 줄 뿐만 아니라, 하나의 툴 안에서 개발에 필요한 모든 것을 해결할 수 있도록 All-In-One 형식으로 구성되어 있어, 개발을 위해 여러 개의 툴을 사용할 필요가 없는 것이 장점입니다.

하지만 과거에는 그렇지 않았습니다. 프로그래머들은 하나의 소프트웨어를 완성하기 위해 용도 별로 여러가지 툴을 바꿔가며 사용하는 과정을 반복해야 했습니다. 컴파일러가 소스코드를 컴파일하는 과정에서 오류가 발생하면 이를 확인한 프로그래머가 잘못된 부분과 원인을 찾아 고친 후 다시 컴파일 합니다. 이 과정을 반복한 끝에 오류 없이 컴파일이 완료되면, 이제 그 결과로 만들어진 파일을 실행해보는 단계에 접어듭니다.

지금까지의 과정에서 발생했던 오류를 컴파일 오류로 분류하는 반면, 파일을 직접 실행하면서 발생하는 오류는 런타임 오류라고 합니다. 실행 시점에서 발생하는 오류라는 의미죠

런타임 오류가 발생하면 디버깅 작업을 하는데, 코드 중간중간에 브레이크 코드나 로그 출력 구문을 집어넣어서 실행 과정 중 어느 단계에서 오류가 발생하는지 알아내는 방법을 많이 사용하지만, 경우에 따라서는 메모리 덤프를 떠서 메모리에 입력된 데이터를 분석하기도 합니다. 이를 편리하게 해주는 툴인 디버거를 사용하는 경우도 많죠. 소프트웨어를 개발하는 데에 걸리는 시간의 절반 이상이 오류를 수정하는 과정에 사용된다는 것이 일반적인 지론입니다.

오류의 원인을 찾아내었다면 이를 고치기 위해 소스 코드를 다시 수정합니다. 수정이 완료되면 커맨드 창을 열어 컴파일하고, 다시 그 결과로 나온 파일을 실행해봅니다. 먼저 기존의 런타임 오류가 제대로 해결되었는지 확인하고, 새로운 런타임 오류가 발생하지 않는지 체크합니다. 실행한 어플리케이션이 원하는 결과를 내놓을 때까지 이 과정을 반복하면 하나의 소프트웨어가 만들어집니다.

개발 과정을 진행하는 동안 개발자들은 소스 코딩과 컴파일, 실행 및 디버깅을 위해 여러 가지 관련 툴들을 번갈아가며 사용해야 했습니다. 그러다 보니 번거롭기도 하고, 이 과정에서 오류가 발생하는 경우도 생겨서 개발 생산성이 좀처럼 나아지지 않는 문제가 대두되었습니다. 하드웨어는 폭발적으로 생산성이 극대화되고 있는 상황에서 소프트웨어의 발전 속도는 이에 따라가지 못하게 된 거죠. 이를 극복하기 위한 노력의 하나로 소프트웨어의 개발 생산성 향상에 대한 방법이 모색되기 시작했습니다.

1-2. 통합개발 환경의 등장

개발 생산성을 향상시키기 위한 방법론적 시작은 단순히 소스 코드를 작성하던 편집기에 컴파일러를 연동할 수 있는 기능을 제공하는 것에 불과했습니다. 편집기에서 소스 코드를 작성한 후 단축키나 정해진 버튼을 클릭하면 연결된 컴파일러를 실행하여 그 결과를 바로바로 콘솔창에 보여주는 수준이였죠. 점점 발전하여 소스 코딩과 컴파일, 실행, 디버깅, 그리고 배포 환경 등의 여러 가지 툴을 하나로 갖춘 통합적인 개발 도구의 필요성이 증대되어 갔습니다.

이 과정에서 윈도우나 맥 OS, 리눅스의 X-Window, iOS나 안드로이드 등 그래픽 사용자 인터페이스를 기반으로 하는 다양한 운영체제들이 등장하면서, 소프트웨어 개발 시 UI 작업을 좀 더 쉽게 할 수 있는 도구들까지 만들어졌습니다. 다양한 툴들이 통합된 결과, 소스 코딩부터 디버깅 뿐만 아니라 사용자 화면을 직접 그리거나 데이터 구조를 설계하고, 코딩의 편의를 돕는 자동 완성 기능까지 포함된 툴들이 등장하게 되었습니다. 이른바, 통합개발 환경(Integrated Development Environment, IDE)의 탄생입니다.

통합개발 환경은 프로그래밍 개발과 관련된 모든 작업을 하나의 프로그램 안에서 처리할 수 있도록 개발 환경을 통합적으로 제공해주는 툴로서, 다른 툴을 더 설치해야 할 필요가 거의 없을 뿐 아니라 내부에 포함된 여러가지 도구가 서로 연동되기 때문에 개발 생산성을 극대화할 수 있다는 장점이 있습니다. 현대 프로그래밍에 와서 이들 통합개발 환경이 소프트웨어 개발에 미치는 영향은 무척 지대해서 이제는 IDE 없이 단순히 SDK만으로 상용 소프트웨어를 만든다는 것이 거의 불가능한 일이 되어 버렸습니다.

2. Xcode란?

Xcode는 앞으로 우리가 인터넷 브라우저만큼이나 자유자재로 다루어야 할 툴로서, iOS와 macOS용 앱을 개발할 수 있도록 애플에서 제공하는 IDE 입니다. 맥북 등 애플 컴퓨터의 운영체제인 맥 OS에서만 실행되는 어플리케이션 입니다. 우리는 이 Xcode를 이용하여 오브젝티브-C나 스위프트를 작성하고, 어플리케이션을 개발합니다.

일반적으로 C 기반의 코드를 컴파일할 때에는 GCC라는 표준 컴파일러를 사용하는데, Xcode는 GCC의 성능을 더욱 개선한 LLVM(Low Level Virtual Machine)을 메인 컴파일러로 사용합니다. 오브젝티브-C나 스위프트 코드 모두 실행 파일로 만들어질 때에는 LLVM 컴파일러에 의해 컴파일됩니다. Xcode가 공식적으로 지원하는 언어에는 C, C++, 오브젝티브-C, 스위프트, 자바, 파이썬, 루비 등이 있으며, 플러그인을 사용하면 파스칼, C#, 펄 등의 언어도 지원 가능합니다.

Xcode에서 아이폰용 앱을 만들 수 있게 된 것은 Xcode 3 버전부터입니다. 이 때 애플의 메인 컴파일러인 LLVM도 함께 덧붙여졌습니다.

Xcode 4는 객체를 메모리에서 제거할 타이밍을 계산하기 위한 참조 카운팅을 컴파일러에서 스스로 처리하는 ARC 기능이 추가되었을 뿐만 아니라, 현재의 Xcode 외형과 비슷한 모습을 가지게 된 것도 이 버전부터입니다. 또 별도의 독립 어플리케이션 형태였던 인터페이스 빌더가 이 버전부터 Xcode 내부에 모듈 형태로 탑재됨에 따라 Xcode 하나만으로 앱을 개발할 수 있게 되었습니다.

Xcode5에서는 스토리보드가 추가되었습니다. 개별 UI 화면 단위로 하나씩만을 다루던 nib 파일 기반의 인터페이스 빌더가 스토리보드(storyboard) 파일 형식의 통합 인터페이스 빌더 위주로 대체된 것이 가장 큰 이슈라고 할 수 있습니다. 스토리보드 형식은 화면 인터페이스를 설계할 때 여러 개의 화면을 하나의 스토리보드 파일에 모아 다룸으로써 화면 간의 연결 관계나 흐름을 쉽게 파악할 수 있도록 지원하는 형식입니다.

이후 스위프트와 함께 공개된 Xcode 6은 외견상 큰 변화는 없었습니다. 하지만 Xcode가 스위프트를 지원하기 시작하면서 실시간으로 스위프트 코드를 작성하고 결과를 확인할 수 있도록 해주는 플레이그라운드가 추가된 점은 특기할 만한 사항입니다.

다음 해인 Xcode7은 스위프트2를 지원할 뿐 아니라, 맥 OX X, iOS, watchOS용 앱을 모두 만들 수 있는 더욱 확장된 개발 환경을 제공하였습니다.

Xcode8에서는 스토리보드를 여러 단계로 축소 또는 확대해서 작업할 수 있게 되었습니다. 또한, 스토리 보드 축소 시에도 UI 편집 작업이 가능하게 되었습니다.

Xcode 9에서는 iOS 시뮬레이터가 드라마틱하게 변신했다는 점을 주목할 만합니다. 이전 버전까지의 시뮬레이터는 단순히 화면과 기능만 테스트할 수 있는 밋밋한 일반 창 형태에 불과했던 것이, Xcode 9에서는 아이폰 형태를 그대로 본딴 모습으로 재탄행되었습니다. 뿐만 아니라, iPhone 외에 watchOS, tvOS용 시뮬레이터도 동시에 실행하여 결과를 확인할 수 있게 되었죠.

이외에도 추가된 점은 깃허브 연동을 위한 소스 컨트롤 기능이 네비게이터 패널에 추가되었다는 점, 오토 레이아웃 설정 시 화면상의 변화를 바로바로 확인 할 수 있게 되었다는 점, Swift 3 코드의 호환성 유지를 위한 컴파일러 버전 설정이 추가되었다는 점 등을 들 수 있을 것 같습니다. 전체적으로 Xcode 9은 Swift 3와 Swfit 4 버전 간의 호환성을 유지하는 데에 주력한 면이 큽니다.

이처럼 해마다 버전이 업그레이드 되면서 Xcode는 그 기능을 꾸준히 향상시켜 나가고 있습니다. 주의 할 것은, 최신 iOS 버전을 기준으로 개발 작업을 진행하기 위해서는 항상 최신 버전의 Xcode를 사용해야 한다는 점입니다. Xcode는 새 버전의 전체 업데이트를 통해서만 최신 iOS를 지원하는 앱을 제작할 수 있습니다. 따라서 앱을 개발할 때에는 Xcode의 버전 업데이트 여부를 항상 신경 써야 합니다.

스위프트 언어를 지원하기 시작하는 Xcode 버전은 6부터이지만 이 책에서 다루는 스위프트 5 문법은 Xcode 10 버전부터 지원합니다. 이 책에서는 앱스토어를 통해 Xcode 정식 버전을 설치하는 방법과 개발자 사이트를 통해 베타 버전을 설치하는 방법 모두를 알아보겠습니다.

3. Xcode 설치하기

Xcode는 애플 전용 데스크톱 운영체제인 macOS에서만 실행할 수 있습니다. MS의 Windows 운영체제가 설치된 일반 PC에서는 Xcode를 설치할 수 없습니다.

Xcode의 정식 버전은 항상 앱스토어에서 받을 수 있지만, 베타 버전은 애플에서 제공하는 애플 개발자 사이트에서만 내려받을 수 있습니다. 베타 버전은 정식 버전보다 한발 앞서 최신 개선 사항을 적용해 볼 수 있다는 장점이 있지만 아직 안정화되지 않은 버전이어서, 개발 도중 알 수 없는 오류로 인하여 Xcode가 다운되기도 합니다. 호환성이 담보되지 않은 문법 및 구문 변경으로 인해 멀쩡하게 잘 돌아가던 스위프트 소스 코드들이 새 베타 버전의 Xcode에서 오류를 뱉어 낼 수도 있습니다.

3-1. 정식 버전 설치 : 앱스토어를 통하여

Xcode 정식 버전은 항상 앱 스토어를 통해 제공됩니다. 설치를 위해 맥 환경에서 앱스토어를 실행해 봅시다. 실행된 앱스토어 창의 오른쪽 위에 있는 검색 창에 Xcode를 입력하여 검색하면, Xcode의 앱 아이콘을 확인할 수 있습니다.