80

강행돌파! 아이폰 & 아이패드 프로그래밍

  • View
    234

  • Download
    0

Embed Size (px)

DESCRIPTION

강병우 지음 | 임베디드 & 모바일 시리즈 _ 011 | ISBN: 9788992939522 | 22,000원 | 2011년 01월 31일 발행 | 304쪽

Citation preview

Page 1: 강행돌파! 아이폰 & 아이패드 프로그래밍
Page 2: 강행돌파! 아이폰 & 아이패드 프로그래밍
Page 3: 강행돌파! 아이폰 & 아이패드 프로그래밍

강행돌파!입문자를 위한

아이폰 & 아이패드 앱 개발

Page 4: 강행돌파! 아이폰 & 아이패드 프로그래밍

iv

•목 차•

01장 아이폰 & 아이패드 개발 준비 11.1 아이폰에 대해 ..........................................................................................2

1.2 아이패드에 대해 ......................................................................................3

1.3 아이폰과 아이패드의 특징.......................................................................4

아이폰의 특징 ..............................................................................................4

아이패드의 특징 ..........................................................................................6

1.4 개발을 위한 Mac 준비 .............................................................................8

Mac mini, iMac, MacBook 가운데 무엇을 고를까? ................................8

iMac ...........................................................................................................10

MacBook ....................................................................................................11

Mac mini ....................................................................................................13

02장 개발 시작하기 172.1 Xcode란? ................................................................................................ 17

2.2 Xcode의 커스터마이즈! XCode엔 이런 기능도 있다 .........................................33

2.3 인터페이스 빌더 .................................................................................... 42

2.4 Interface Builder를 커스터마이즈해 보자 ......................................... 46

2.5 인스트루먼트 ........................................................................................ 51

2.6 인스트루먼트 툴의 커스터마이즈! ...................................................... 55

Page 5: 강행돌파! 아이폰 & 아이패드 프로그래밍

v

03장 Jail Break 633.1 Jail Break의 정의 ................................................................................... 63

3.2 Jail Break가 지닌 보안상의 엄청난 위험성 ......................................... 68

04장 iPhone, iPod Touch, iPad 앱 개발의 차이점 73

05장 아이폰 & 아이패드 앱 개발 시작하기 815.1 일곱 가지 템플릿 .................................................................................. 81

5.2 리소스를 추가해 보자 ........................................................................... 91

5.3 아이폰 앱의 개발 언어, Objective-C .................................................. 95

5.4 IBAction과 IBOutlet .......................................................................... 102

5.5 프로퍼티도 설정해 주는 당신은 친절한 신사 ................................... 113

5.6 UIButton, UILabel을 다뤄보자 ......................................................... 116

리소스의 준비와 등록 .............................................................................133

5.7 어? 실행이 안 되요! ............................................................................. 152

5.8 에러 메시지의 확인 방법과 종류, 메시지 해석 방법 ........................ 159

5.9 메모리 관리 .......................................................................................... 162

5.10 어? iPad용으로 개발했는데요? ......................................................... 167

Page 6: 강행돌파! 아이폰 & 아이패드 프로그래밍

vi

06장 메모장을 만들어 보자! 1716.1 UIView와 UIWindow ........................................................................ 171

6.2 스플래쉬 스크린과 아이콘을 넣어보자! ............................................ 176

스플래쉬 화면 설정 .................................................................................176

iPhone 아이콘의 설정 .............................................................................178

6.3 리스트 화면에 그림과 글을 넣어보자. ............................................... 180

6.4 데이터를 관리하는 두 가지 다른 방법과 장단점 ............................. 186

6.5 애플은 당신을 위해 Plist Editor를 준비해 두었어요! ........................... 191

6.6 졸지 마세요! 델리게이트만은 알아두셔야 합니다! .......................... 196

6.7 메모장 애플리케이션의 완성! ............................................................ 199

07장 지도 애플리케이션 2157.1 지금 저는 어디에 있지요? ................................................................... 215

7.2 지도 관련 델리게이트들 .................................................................... 218

7.3 지금 저는 어디에 있지요? 사용자 위치 표시 .................................... 221

7.4 말풍선 관련 클래스를 생성해 줍시다! ............................................... 229

08장 메일 애플리케이션 2378.1 메일 애플리케이션 .............................................................................. 237

메일 애플리케이션에 대해 .....................................................................237

8.2 기본 발송 방법 ..................................................................................... 239

8.3 한계란 넘어서기 위해 있는 법! 또 다른 메일 발송법을 소개합니다. 245

8.4 파일을 첨부해 보자! ........................................................................... 252

Page 7: 강행돌파! 아이폰 & 아이패드 프로그래밍

vii

09장 엔터테인먼트 애플리케이션 2579.1 mp3 파일을 재생해 보자! ................................................................... 257

9.2 미디어 파일 재생 ................................................................................ 264

10장 팁 좀 주세요 27110.1 개발자용 팁 ........................................................................................ 271

11장 코코아 한 잔과 잡담 28711.1 iPhone OS는 정말로 폐쇄적인가? .................................................. 287

11.2 안드로이드 기기와 아이폰의 차이 ................................................. 288

Page 8: 강행돌파! 아이폰 & 아이패드 프로그래밍

viii

지은이 글

#pragma mark = 환영합니다! =

안녕하세요?!

먼저 『강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발』이라는 긴 제목의 책을 읽어주시는

개발자 여러분께 감사의 말씀을 드립니다. 누구나 아이폰을 처음 접할 때는 신기함과 경이감을 느

꼈을 것이고, 개발자로서 ‘나도 언젠간 멋진 아이폰 앱을 만들고 말 거야!’라는 생각을 다들 하셨

을 거라고 생각합니다. 하지만 아이폰 앱을 개발하려는 많은 분들이 아이폰 앱 개발의 진입 장벽

이 그리 만만하지 않다고 느끼셨을 것입니다. 우선 개발을 위해 Mac을 구입해야 하고, 거의 들어

보지 못했던 Objective-C라는 언어와 Cocoa Framework에 관한 심도 있는 지식이 필요하다는

데 많은 분들이 놀라움과 아쉬움을 느끼셨을 듯합니다. Objective-C는 C 언어와 문법이 상당 부

분 다르고, 아이폰 앱에서 C 언어를 사용할 수 있다고 해도 Cocoa Framework에 올바르게 접근

하려면 Objective-C를 익히는 방법밖에 없습니다. 그리고 써본 적도 없는 개발 툴인 Xcode와 어

디에 쓰는 물건인지도 헷갈리는 Interface Builder, 겉모습은 폼 나는데 쓰는 법은 도통 모를 법한

Instrument Tool, 복잡하게 생긴 Debugger와 같은 툴에서 또 한번 좌절하게 됩니다. 그래서 현재

시중에 나와 있는 수많은 책에서 소개하지 않는 기초 지식과 원리, 그리고 각종 툴 사용법을 친절

히 알려주는 책을 쓰고자 했습니다.

그리고 코드의 일부분만 소개하고 있어 입문자가 코딩하면 에러만 나고 실행은 되지 않는 황당

한 경우가 생기지 않게 노력했고 중복되지 않는 선에서 최대한 각 코드에 설명을 덧붙였습니다. 부

디 기초부터 차근차근 개념을 익혀서 훌륭한 개발자가 되는 데 도움이 됐으면 좋겠습니다. 개발하

다가 궁금한 사항이 생기면 애플 개발자 포럼에 질문을 하시거나 다양한 커뮤니티 사이트, 혹은

St. Cocoa 연구소로 연락주시면 성심성의껏 답변해 드리겠습니다. 이 책을 보시다가 코딩 샘플을

직접 확인하고 싶으실 때는 www.stcocoa.com에 접속하시면 각 장의 샘플 코드가 있으니 참조하

시기 바랍니다. 그 밖에 애플리케이션 개발에 관한 각종 팁과 최신 뉴스도 동일 사이트에서 볼 수

있습니다.

Page 9: 강행돌파! 아이폰 & 아이패드 프로그래밍

ix

앞으로 아이폰의 스펙과 기능은 나날이 발전할 것이며 iOS 또한 더욱 강력하고 다양한 기능으

로 사용자와 개발자를 즐겁게 해줄 테지만, 그것들의 근간이 되는 Cocoa Touch 프레임워크와

Objective-C 언어의 기본은 변하지 않을 것입니다. 아무쪼록 이 책이 특정 iOS 버전에 한정되지

않고 오랫동안 많은 개발자들에게 도움을 주는 책이 됐으면 합니다.

개발에서 가장 중요한 것은 ‘개발 자체를 즐기는 마음’이라고 생각합니다. 개발자 자신이 즐겁게

개발할 때 나오는 결과물도 사용자에게 더 많은 즐거움을 줄 수 있다고 생각합니다. 그리고 또 하

나 필요한 것은 겸손의 미덕이 아닐까 합니다. 아무리 실력이 뛰어나더라도 세계 도처에는 자신보

다 뛰어난 개발자가 얼마든지 있다는 사실을 자각하고 있어야 합니다. 또한 하루가 멀다 하고 새

로운 기술과 장비가 개발 · 발표되고 있으므로 현재에 안주해서 새로운 흐름을 놓친다면 금방 도

태될 수 있다는 점도 가슴속에 새기고 언제나 초심자의 마음으로 겸손하게 배워가는 자세를 잃지

않아야 할 것입니다. 아이폰 애플리케이션의 세계뿐만이 아니라 어떤 분야에서도 자신의 일을 즐

기면서 겸손하게 일하는 ‘장인’들의 아름다운 모습을 얼마든지 발견할 수 있습니다.

결국 초심자의 호기심과 열정으로 자신의 노하우를 공유하며 함께 즐겁게 개발해 나가는 것, 이

것이 바로 진정한 엔지니어의 로망이 아닐까요?!

앞으로 개발을 하면서 이 책의 제목처럼 길고 긴 경험과 아름다운 추억을 남기시기 바라며, 열

정에 불타는 개발자분들을 비롯해서 뭘 하든 너무 귀여운 동생 민정이, 맛있는(딱 한 번 빼고!) 밥

을 20년도 넘게 지어주신 마마 & 언제나 바른 길로 이끌어 주신 파파께 이 책을 바칩니다.

- 강병우

책 홈페이지 :

www.stcocoa.com

Page 10: 강행돌파! 아이폰 & 아이패드 프로그래밍

iPho

ne &

iPad

Prog

ram

min

g

Page 11: 강행돌파! 아이폰 & 아이패드 프로그래밍

01아이폰 & 아이패드 개발 준비

안녕하세요? 아이폰 앱 개발을 위해 이 책을 구입해 주신 모든 분들께 먼저 감사의 마음을 전합니

다. 여러분 모두 아이폰 앱을 개발하려고 이 책을 구입했을 것입니다. 한 걸음 더 나아가 아이폰 앱

개발 전문가가 되어 누구라도 이름만 대면 알 만한 유명한 앱을 개발할 꿈을 가지고 계시겠지요?

혹시 점쟁이냐고요? 아닙니다. 하지만 점을 보는 앱은 개발할 줄 아는 엔지니어랍니다. 지금은

비록 아이폰 & 아이패드 앱 개발이 낯설고 어렵게 느껴지겠지만 이제부터 여러분의 기대를 저버

리지 않도록 저도 최선을 다해 제가 알고 있는 유익한 정보들을 나눠 드리겠습니다. 아무쪼록 이

책이 아이폰 & 아이패드 앱 개발을 꿈꾸는 독자 여러분에게 좋은 길잡이가 되기를 바랍니다.

아이폰 앱 개발을 하기 전에 먼저 전 세계 사람들의 사랑을 듬뿍 받고 있는 스마트폰인 아이폰

에 대해 알아보겠습니다.

물론 잘 아시는 바와 같이 ‘아이폰’은 미국 애플사가 고안 · 개발 · 판매하고 전 세계적으로 아주

많은 팬을 거느리고 있는 스마트폰입니다(열정적인 팬들을 가끔 ‘애플빠’라는 애칭(?)으로 부르기

도 합니다만 절대 기죽지 마세요!).

Page 12: 강행돌파! 아이폰 & 아이패드 프로그래밍

2 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

1.1 아이폰에 대해

아이폰은 애플사의 창업자이자 전설적인 개발자이며 현재도 애플의 CEO인 스티브 잡스의 지휘

하에 개발이 시작되어 2007년 1월 9일에 발표되고, 2007년 6월 29일에 처음으로 정식 판매가 시

작됐습니다. 하지만 아이폰의 첫 모델은 한국과 일본 등에서 채택한 통신 방식인 GSM 방식을 지

원하지 않아서 한국과 일본을 포함한 일부 국가에서는 발매가 되지 않았습니다. 색상도 화이트와

블랙 두 종류가 아닌 실버 색상 한 종류만이 있었습니다. 일반적으로 이 아이폰 모델을 제1세대 아

이폰이라고 부릅니다. 이때는 아직 ‘앱스토어’가 없었습니다. 앱스토어 없는 아이폰이라니 지금은

상상할 수도 없겠죠?

첫 발매일로부터 1년 정도 지난 2008년 6월 9일 WWDC 2008에서 제2세대 아이폰으로 불리는

iPhone 3G가 발표되고 그 뒤 2008년 7월 11에 발매됐습니다. iPhone 3G 모델은 일본을 포함한 세

계 각지에서 크게 히트했으나, 아쉽게도 한국에서는 여러 가지 법적인 문제와 국내 이동통신사 간

의 이해 관계가 맞물려 발매가 크게 늦어졌습니다. 색상은 화이트와 블랙으로 두 종류이고, 8GB

와 16GB 용량의 모델이 있습니다.

WWDC란?

Worldwide Developers Conference의 약어로, 애플사가 매년 개최하는 개발자를 위

한 행사입니다. 처음에는 미국 산호세의 San Jose Convention Center에서 개최됐지만,

매년 참가자와 행사 규모가 커져서 2003년부터는 미국 샌프란시스코의 Moscone West

Convention Center에서 개최되고 있습니다. 참가하려면 Apple Developer Connection에

회원 등록하고 비밀엄수 조항(NDA, Non-disclosure agreement)에 동의해야 합니다. 앱 개

발과 앱스토어 등록을 위해서는 ADC(Apple Developer Connection)에 가입해야 합니다.

제3세대 아이폰인 iPhone 3GS는 2009년 6월 9일에 발표됐습니다. 이 모델은 성능 면에서

iPhone 3G보다 처리 속도가 2배 정도 빨라졌으며, 아이폰의 가장 큰 단점으로 지적됐던 배터

리 성능도 크게 향샹시킨 모델입니다. 카메라도 3메가 픽셀의 오토포커스 카메라로 좋아졌으며,

iPhone 3G 모델에서는 지원하지 않아 개선이 요구되던 동영상 촬영 기능, 핸즈프리 보이스 콘트롤

기능, 디지털 나침판 등도 추가됐습니다.

한국에서는 SK텔레콤와 KT가 아이폰 도입을 위해 애플사와 접촉해, KT가 먼저 도입하게 됐습

니다. 정식 판매는 KT의 협상 지연과 법률 문제로 계속 미뤄지다가 2009년 11월 28일에 iPhone

Page 13: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 3

3G와 iPhone 3GS 모델이 정식으로 판매되기 시작했습니다.

그리고 마침내 2010년 6월 24일 iPhone 4가 발매됐고, 한국에서는 2010년 9월 10일에 정식 출

시됐습니다. iPhone 4G는 카메라가 앞뒤로 달려 있어 화상통화할 때 편리하고 전반적으로 수신

상태를 제외한 모든 면에서 업그레이드됐습니다.

1.2 아이패드에 대해

2010년 1월 27일 정식으로 발표된 아이패드는 사실 애플사가 이전부터 야심차게 발매를 준비해온

태블릿형 컴퓨터입니다. 애플사는 이미 2000년경에 태블릿형 컴퓨터에 대해 특허를 제출했으니

이때부터 개발을 시작했거나 적어도 계획하고 있었던 것으로 보입니다. 정식으로 아이패드(iPad)

라는 이름으로 발표하기 전에는 아이태블릿(iTablet), 아이슬레이트(iSlate), 태블로이드(Tabloid)

등으로 불리기도 했습니다. 사실 ‘iPad’라는 상표는 일본 후지쯔의 자회사 ‘Fujitsu Transaction

Solution(현재 Fujitsu America)’이라는 기업이 Microso� Windows CE.NET 5.0을 운영 체제로

쓰는 스캐너, 카드 리더기, 키보드 그리고 전화 기능까지 탑재한 강력한 올인원 업무용 기기를 발

표하면서 2003년 미국에 이미 출원한 상표였기에 사용이 불가능할 수도 있었습니다. 이 점에 대해

서는 후지쯔가 애플에 상표 사용을 공식적으로 허가했다는 일부 언론 보도가 있기도 했습니다.

하지만 이 두 회사의 자세한 협정 내용은 아직 발표되지 않고 있습니다. 다만 후지쯔가 특별히 크

게 분쟁을 일으키지 않고 있으며, 애플이 아무 문제없이 쓰고 있기에 협상이 순조롭게 끝났다는

의견이 우세합니다.

그럼, 아이패드에 대해 좀 더 알아봅시다. 먼저 크기를 보면 세로 약 24센티미터, 가로 약 19센티

미터로 일반 책과 비슷하거나 약간 더 큰 크기입니다. 두께는 가장 두꺼운 곳이 1.3센티미터로 일

반 책과 비교해서는 물론이고 여타 태블릿형 컴퓨터나 전자책과 비교해도 상당히 얇은 편에 속합

니다.

그리고 CPU에 주목할 필요가 있는데, 아이패드는 아이패드에 특별히 최적화된 ‘Apple A4

processor System-on-a-chip 1Ghz’를 사용하고 있습니다. 이처럼 SoC(System-on-a-chip) 기법

을 활용하면 하드웨어의 고속화, 회로의 소형화, 소형화에 따른 소비에너지의 감소, 소비 에너지 감

소에 따른 배터리 사용 시간의 연장과 하드웨어 제작 비용 감소 등의 아주 많은 효과를 얻을 수 있

습니다. 다만, 개발 기간이 오래 걸리거나, 사양 변경에 막대한 비용이 발생하는 등의 단점이 있기

도 합니다. SoC 기술이 갑자기 등장한 새로운 기술은 아니지만, 소위 ‘개방성’, ‘확장성’을 우선하는

기업들에 의해 적극적으로 도입되지 않았던 것도 사실입니다. 그런 면에서 이번 아이패드에 CPU

Page 14: 강행돌파! 아이폰 & 아이패드 프로그래밍

4 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

가 탑재된 방식은 신선하면서도 혁신적인 형태라고 할 수 있습니다.

아이패드는 현재 Wi-Fi 연결만 지원하는 iPad Wi-Fi 모델과 Wi-Fi와 3G 연결을 모두 지원하는

iPad Wi-Fi + 3G 모델로 나눠져 있으며 기록장치의 용량에 따라 다시 16G, 32G, 64G 모델로 나

뉩니다(각각 16, 32, 64GB의 저장용량).

아이패드로 iBooks 전자서적을 다운로드해서 즐길 수 있으며, 아이폰과 달리 iWork를 사용할

수 있다는 것도 특징입니다.

이렇게 뛰어난 성능과 매력을 가진 아이패드, 그리고 아이폰의 등장으로 국내에서도 많은 변화

가 일고 있습니다. 정부는 갖가지 규제를 완화하거나 변경하고 있으며, 네이버와 같은 대형 포털도

보안상의 이유로 아이폰, 아이패드와 같이 플래시를 지원하지 않는 많은 휴대기기를 지원하기 위해

점차 플래시 사용을 줄여 HTML5나 Ajax로 대체하겠다고 했습니다. 안드로이드 또한 아이폰의 브

라우저와 같이 웹킷(Webkit) 기반의 브라우저를 사용하고 있으며 HTML5뿐 아니라 플래시도 지

원하고 있습니다. 아이폰에서 앞으로 플래시를 적극 지원할지는 미지수지만 전반적인 흐름은 플래

시보다 HTML 5 쪽으로 흐르고 있습니다.

1.3 아이폰과 아이패드의 특징

간단히 알아보는 기본적인 아이폰과 아이패드의 특징은 아래와 같습니다.

아이폰의 특징

▶ 실제 카메라보다는 좀 떨어지는 듯하지만 휴대폰용치고는 괜찮은 카메라 장착(3GS 모델

은 300만 화소, iPhone 4는 500만 화소, 동영상은 3GS 모델부터 지원)

▶ iPod과 같은 종류의 미디어 플레이어 탑재(H.264 동영상 재생)

▶ 가상 키보드를 활용한 입력 방식과 멀티터치 스크린(상당히 많은 다국어 지원)

▶ 산에 가서 길을 잃었을 때 위력을 발휘할 만한 디지털 나침반 기능(3GS 모델부터 지원)

▶ 잠자리에서 이불의 뒤척임도 정확하게 감지하는 고성능 가속력 센서, 자이로스코프

(iPhone 4부터 지원)

Page 15: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 5

▶ GPS 기능과 현재 위치 인식 기능(실제로 자신의 위치를 찾을 때는 GPS 기능이 아닌 근처

의 기지국 등을 분석해서 위치를 감지합니다).

▶ 2세대 무선통신 기술인 GSM과 2.5세대 무선 통신 GPRS/EDGE를 비롯해 패킷을 쓰지 않

고 인터넷을 무제한 쓸 수 있는 와이파이(Wi-Fi) 지원. 그리고 블루투스도 당연히 지원함.

▶ 가장 중요한 ‘전화’ 기능.

동영상 재생

애써 다운로드한 동영상이 아이폰에서 재생이 안 될 때는 HandBreak라는 무료 툴을 다운

로드해서 포맷을 m4v로 바꾼 다음 iTunes 라이브러리에 넣은 후 동기화해주면 됩니다(다음

사진을 보면 오른쪽 창에 iPhone & iPod Touch를 선택할 수 있습니다. 참 편리한 툴입니다).

[그림] HandBreak 실행화면

Page 16: 강행돌파! 아이폰 & 아이패드 프로그래밍

6 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

슬립 사이클 앱

실제로 이불 위에 올려두고 자면, 수면 패턴을 체크해 주는 슬립 사이클(Sleep Cycle)이란

앱이 있습니다. 필자는 한 달간 이 앱을 사용해본 결과 몇 시에 잠이 들든지 새벽 3시부터 5

시까지는 시체처럼 움직이지도 않고 잔다는 사실을 알았습니다. 수면 습관을 분석해서 기상

시 가장 개운할 시간에 알람도 해주는 꽤 재미있고 고마운 앱입니다.

http://mdlabs.se/sleepcycle/

아이패드의 특징

▶ 아이폰에서 작동하는 대부분의 애플리케이션을 더 큰 화면으로 즐길 수 있음. 물론 좋아

하는 연예인의 화보집도 포함!

▶ iWork를 설치할 수 있어서 공책 대신 쓸 수 있음. 다만 주위에서 공책 좀 빌려달라고 할 경

우가 많이 생길수 있음. 또 실제 공책보다 무거움.

▶ 키보드를 연결할 수 있음.

▶ 배터리 성능이 상당히 우수함(뉴욕타임스 리뷰어는 12시간 연속 영화 재생에도 문제가 없

었다며 감탄!)

▶ 모델에 따라 Wi-Fi 이외에도 3G 기능도 제공해 ‘길치’들에게 마지막 희망이 되어 줄 수 있

음! (화면이 넓다 보니 한 번에 확인할 수 있는 지도의 범위도 넓어져서 상당한 도움이 됩니

다!)

▶ 크기가 제법 크고 금속 재질이라 여차하면 호신용으로도 사용 가능! 키보드도 연결해 쓰

고 있었다면 금상첨화! (키보드는 창으로, 아이패드는 방패로 쓰는 양손 전략도 가능합니

다. 물론 아이패드는 망가질지 모르겠지만요!)

Page 17: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 7

아이폰 도움말

Mac OS X에는 다음과 같은 iPhone 도움말도 포함돼 있습니다. 찾는 법은 iTunes 메뉴의

[도움말 ▷ iPhone 도움말]을 클릭하면 됩니다.

오른편에는 ‘Safari에서 iPhone 사용 설명서 책갈피를 살짝 누르거나 help.apple.com/

iPhone으로 이동하십시오.’라고 친절히 설명돼 있습니다.

설명서를 살펴보면 스펙 이외에도 ‘벨소리 다운받기’, ‘비디오 대여하기’ 등 유용한 정보가 아

주 많습니다.

Page 18: 강행돌파! 아이폰 & 아이패드 프로그래밍

8 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

1.4 개발을 위한 Mac 준비

Mac mini, iMac, MacBook 가운데 무엇을 고를까?

그럼 이제 앱 개발에 필요한 것들을 하나하나 열거해 볼까요? 어떤 것이 필요할까요? 그렇죠! 먼

저 맥 컴퓨터가 있어야겠죠! 그냥 보통 컴퓨터로 개발하면 안 되냐고요? 우리집 컴퓨터는 와우

(WoW)도 잘만 돌아가는데 왜 아이폰 앱 개발은 안 되냐고요? 네, 안됩니다. 왜냐하면 아이폰 앱

을 개발하기 위한 Xcode라는 툴이 일단 맥의 기본 운영체제인 Mac OS X에서만 작동하기 때문입

니다. 물론 Mac OS X는 애플의 맥에만 설치할 수 있습니다. Mac OS X를 일반 컴퓨터에 설치하는

방법이 인터넷상에 떠돌고는 있으나, 정확하게 동작한다는 보장도 없고 결정적으로 ‘위법’이므로

절대 하지 않길 바랍니다(또 설치에 상당한 노력과 시간이 들어서, 그냥 맥을 한 대 구입하시는 것

이 정신 건강상에도 좋습니다). 이렇게 Max OS X를 설치한 컴퓨터를 해킨토시라고 부르기도 합

니다. iPhone을 해킹하는 Jail Break와 해킨토시 이용은 절대 하지 말아야 할 위법 행위임을 다시

한 번 가슴에 새겨주세요. 특히 Jail Break는 스스로 자신의 보안체제를 뚫어버리는 행위로서 저

는 Jail Break(탈옥)가 아니라 Shield Break(보호막 파괴)라고 부르고 싶습니다. 이 Jail Break에 대

해서는 나중에 다시 한 번 설명하겠습니다.

맥 오에스 텐? 맥 오에스 엑스

Mac OS X는 ‘맥 오에스 텐’이라고 읽습니다. 필자는 아직도 습관처럼 ‘맥 오엑스 엑스’라고

얘기해서 주위 개발자분을 당황하게 합니다. 물론 X는 10의 로마자 표기인 X에서 따온 것입

니다. 저는 자기 전에 꼭 ‘맥 오엑스 엑스라고 적고 맥 오엑스 텐이라고 읽는다’고 자기암시하

면서 잠이 들지만 좀처럼 고쳐지지가 않네요.

또, 아이폰 앱 개발을 위한 개발 툴인 iPhone SDK for iPhone OS(보통 줄여서 iPhone SDK라고

합니다)도 Mac OS X에서만 설치됩니다. 이 툴은 애플에서 운영하는 iPhone Dev Center라는 아

이폰 앱 개발자를 위한 사이트에서 무료로 내려 받을 수 있습니다. iPhone SDK는 아이폰 앱의 기

본 개발 언어인 Objective-C와 C 등을 지원합니다. 대부분의 코드는 가능한 한 Objective-C 언어

로 코딩합니다. iPhone SDK는 조금 뒤에 다시 설명하겠습니다.

Page 19: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 9

오! 드디어 맥을 구입하기로 하셨다고요? 좋습니다. 이제부터 윈도우에서는 느낄 수 없었던 경험

을 Mac OS X에서 체험할 수 있습니다(꼭 제가 애플사의 홍보직원인 것처럼 흥분하고 있네요. 하

지만 여러분도 맥을 사용하기 시작하면 저처럼 맥의 엄청난 팬이 될지도 모릅니다!)

그런데 어떤 맥을 구입해야 할지 모르겠다고요? 음... 이 고민은 상당히 신중하게 결정해야 할 문

제인 것 같습니다. 여러분이 정말 부자여서 맥을 몇 대씩 살 수 있다면 상관없겠지만요.

먼저 맥은 크게 3종류로 나눌 수 있습니다. 데스크톱용으로 나온 모니터 일체형 맥인 iMac, 노

트북인 MacBook, 그리고 데스크톱이라고도 할 수 있지만 너무 작아서 가방에 넣어 다녀도 좋을

만한 휴대성을 지닌 Mac mini가 있습니다. 그 밖에 영화 제작 등 고도의 성능이 요구되는 작업에

쓰이는 Mac Pro라는 데스크톱도 있습니다만 아이폰 앱 개발을 위해서는 너무 고성능이므로 일단

후보에서 제외하겠습니다.

그림 1-1 압도적인 성능과 가격을 자랑하는 Mac Pro의 포스. 엄친아 같은 맥이군요.

자, 그럼 먼저 iMac에 대해 알아봅시다.

Page 20: 강행돌파! 아이폰 & 아이패드 프로그래밍

10 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

iMac

그림 1-2 iMac

▶ 이름 : iMac (아이맥)

▶ 생일 : 1998년 8월 (시리즈 첫 발매일)

▶ 특징 : 모니터와 본체가 붙어 있는 일체형 맥

장점 :

▶ 화면이 커서 개발할 때 화면상의 공간을 넉넉하게 활용할 수 있다.

▶ 같은 이유로 동영상을 감상할 때도 유용하다. 리모콘도 있어서 정말 소파에 앉아서 군것질

하면서 영화를 감상하기에 딱 좋다. (리모콘은 별도 구입)

▶ 모니터와 본체가 일체형이니 따로 본체를 놓을 장소가 필요하지 않다.

▶ 스피커가 상당히 좋아서 음악을 감상하기에는 좋다.

▶ 마이크와 캠카메라가 기본 장착돼 있다.

▶ 겉모습도 왠지 멋있다.

단점 :

▶ 화면이 커서 그런지 백라이트 빛에 눈이 부셔서 장시간 개발이 어렵다는 의견이 있다(사람

마다 좋아하는 기준이 다르니 매장에서라도 꼭 한 번 써보고 구입하기를 바란다). 이 점을

보완하기 위해 다양한 모니터 커버가 판매되고 있다. Shade와 같이 이러한 단점을 보완하

는 소프트웨어도 많다. 참고로 구글에서 ‘imac too bright’라고 검색해 보면 이 같은 눈부

심 현상으로 고민하는 동지들이 꽤 많음을 알 수 있다.

Page 21: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 11

▶ 화면이 ‘Matt’가 아니라 ‘Glossy’ 형이라서 형광등 불빛의 빛을 잘 반사한다. 다시 말해 엄청

커다란 화면에서 반사되는 상당한 양의 빛은 안 그래도 밝은 화면을 더욱 ‘빛나게’ 해준다.

‘Matt’ 화면과 ‘Glossy’ 화면

Matt 화면이란 일반적인 LCD 모니터에서 볼 수 있는 빛을 잘 반사하지 않는 소재의 화면을

말합니다. Glossy 화면은 아날로그 TV의 화면처럼 표면을 유리 같이 반들반들하게 처리한

화면입니다. 일반적으로 애플사는 Glossy 화면이 장착된 제품을 많이 발표하고 있습니다.

iMac의 가장 큰 특징이라면 본체와 모니터 일체형이라는 것과 큰 화면이라고 할 수 있습니다.

iMac은 MacBook 시리즈와 더불어 애플의 주력 상품입니다. 한때 애플을 떠났던 스티브 잡스가

애플에 복귀하면서 내놓은 야심작이기도 합니다. 이제 보니 스티브 잡스는 이때부터 자산의 야심

작에 i를 붙이기 시작했군요.

그럼 다음으로 애플사의 노트북 시리즈인 MacBook에 대해 알아봅시다.

MacBook

그림 1-3 MacBook

▶ 이름 : MacBook(맥북), MacBook Pro(맥북 프로), MacBook Air(맥북 에어)

▶ 생일 : 2006년 5월(시리즈 첫 발매일)

▶ 특징 : 노트북이라 휴대가 간편하다.

Page 22: 강행돌파! 아이폰 & 아이패드 프로그래밍

12 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

장점 :

▶ 노트북이므로 집에서 집중이 안 될 때 카페에 가서 코코아나 한잔 하면서 개발하는 데 쓸

수 있으며, 휴대성이 좋으니 오프라인으로 공동 작업을 할 때도 유리하다.

▶ 특히 공공장소에서 사용하면 화면 뒷부분에 있는 하얀 애플 마크가 찬란하게 빛나며 상

당한 포스를 뿜는다. TV 드라마나 광고에서 배우들이 맥북을 쓰는 이유가 있다.

▶ 노트북치고는 괜찮은 스피커가 장착돼 있다.

▶ 화면이 iMac과 같이 ‘Glossy’ 타입이지만 별로 눈이 부시지도 않다.

▶ 마이크, 캠 카메라도 장착되어 있어 스카이프 등 인터넷 전화를 사용할 때 편하다.

단점 :

▶ USB 단자가 전부 왼쪽에 몰려 있어 유선 마우스 등을 연결할 때 불편하다. (왼손잡이 분들

에겐 오히려 장점이겠지만요!)

MacBook 시리즈에는 가격이 저렴하지만 성능은 뛰어난 MacBook, 성능에 더욱 중점을 둔

MacBook Pro, 휴대성이 좋은 MacBook Air가 있습니다.

MacBook은 다른 맥 노트북과 비교하면 사양이 낮지만 iPhone용 앱을 개발할 때는 전혀 문

제가 없습니다. 또 다른 맥 노트북과 차별화되는 앙증맞은(?) 디자인도 MacBook의 장점으

로 꼽을 수 있습니다. 학생, 그중에서도 특히 여대생 등 여성분들에게 크게 사랑받고 있는 모

델이기도 합니다.

MacBook Pro는 성능에 중점을 두고 만든 노트북으로 아주 쾌적한 개발환경을 꾸밀 수 있을

만큼 훌륭한 성능을 갖춘 모델입니다.

MacBook Air는 크기와 무게 등 휴대성에 중점을 둔 모델인데, 가격 면에서는 MacBook에

밀리고 성능 면에서는 MacBook Pro와 비교되는 어중간한 위치를 점하고 있다가 점점 가격

과 성능, 그리고 휴대성까지 모든 면에서 바람직한 모델로 급부상한 매력적인 모델입니다. 특

히 저장장치로 하드디스크가 아닌 플래시메모리를 채택함으로써 속도 향상과 경량화라는 두

마리 토끼를 모두 잡은 휼륭한 모델이기도 합니다.

Page 23: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 13

MacBook 시리즈 바닥이 너무 뜨거워요!

MacBook 시리즈를 구입하신 분들은 제품에 대해 거의 다 만족을 하시지만 단 하나, 너무 뜨거

워서 무릎 위에 놓고 쓰기 어렵다는 점을 아쉬워 하는 분이 많습니다. 사실 상당히 뜨거운 게 사

실입니다. 노트북 내부의 열이 밖으로 잘 빠져나가고 있다는 것은 노트북 자체에는 매우 바람직

한 일이지만 사용자 입장에서는 그리 반가운 일만은 아닙니다. 이 점에 대해서 애플 측에서는

이런 의견을 내놓고 있습니다. “MacBook은 책상에 올려놓고 쓰는 노트북(notebook)입니다.

랩톱(laptop)이 아닙니다.” 즉 원래 책상 위에 놓고 쓰는 것을 전제로 만든 제품이지 무릎 위에

놓고 쓰는 걸 전제로 한 제품이 아니라는 것입니다. 한 겨울에는 난방 제품으로도 손색이 없어

보이는 MacBook의 발열량. 하지만 여름에 냉방 장치가 설치되지 않은 곳에서 사용하기에는

좀 불편할 수도 있겠네요.

Mac mini

그림 1- 4 Mac mini

▶ 이름 : Mac mini

▶ 생일 : 2005년 1월 (시리즈 첫 발매일)

▶ 특징 : 도시락 만한 작은 크기.

장점 :

▶ 작아서 책상 위에 올려둬도 별로 공간을 차지하지 않는다. (가로, 세로 16.5cm)

▶ 워낙 작다 보니 데스크톱인데도 필요할 때마다 가방에 넣어 다닐 수 있다 (1.3kg으로 그렇

게 무겁지도 않다. 즉 1.5리터 콜라보다 가볍다).

▶ 위에 작은 선인장 화분이나 인형, 프라모델 등을 올려두면 은근히 귀엽다. 즉, 장식용으로

쓸 정도로 디자인이 좋다.

Page 24: 강행돌파! 아이폰 & 아이패드 프로그래밍

14 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

▶ 의외로 스피커도 장착돼 있어 이어폰 없이도 음악 감상이 가능하다. Mac mini 자체가 거

의 무소음에 가깝워서 소음 없는 감상이 가능하다.

▶ 크기는 작지만 고성능의 그래픽 처리 카드가 장착돼 있다.

▶ 가격이 저렴하다.

▶ ‘Matt’ 형 모니터와 맥을 함께 사용하고 싶은 사용자에게 알맞은 모델이다.

단점 :

▶ 도둑이 든다면 가장 먼저 노릴 만한 아이템

▶ 키보드와 마우스를 따로 구입해야 한다(iMac은 무선 키보드, 마우스 기본 포함). 아! 물론

모니터도 별도 구입.

Mac mini는 처음 보는 사용자에게는 상당히 깊은 인상을 남길 만큼 모습이 귀엽습니다. 성능

면에서도 만족할 만한 수준의 성능을 보여 줍니다. 맥 모델 중 모니터와 본체의 일체형이 아닌 데

스크톱에서는 고가의 Mac Pro밖에 없었기에 그 공백을 채우기 위해 개발됐다고 합니다. 스티브

잡스는 이 모델을 발표하면서 ‘가장 적당한 가격의 맥(most a©ordable Mac ever)’이라고 표현했습

니다. 실제로도 맥 중에서 가장 크기도 작고 가장 저렴한 모델입니다. 보안이 허술한 곳에서 사용

하실 분이시라면 좀도둑이라도 든다면 노트북 훔쳐가듯 쉽게 훔쳐가 버릴 수 있다는 점에도 유의

해주세요. 물론 개발 중인 앱도 함께 사라지겠지요! (아무래도 저 거대한 iMac보다는 가져가기 쉽

지 않겠어요!? )

자, 그럼 어떤 모델을 선택하시겠습니까? 벌써 마음에 드는 모델이 정해졌나요?

아이폰 앱을 개발하고는 싶은데 돈은 많이 쓰고 싶지 않으신 분은 일단 Mac mini부터 시작하

는 것이 좋을 것 같습니다. 그리고 커다란 화면으로 편하게 개발하면서 다른 엔터테인먼트용으로

도 맥을 만끽하실 분은 iMac을, 카페에서 디자이너 분이랑 만나서 공동 작업을 하시는 등 데이터

를 가지고 자주 이동하는 분들은 MacBook 시리즈가 좋을 것입니다. 모두 아이폰 앱을 개발하기

에 충분한 성능을 갖추고 있으니 자신의 개발 스타일과 라이프 스타일에 맞춰 선택하시면 됩니다.

성능 면에서 다른 맥에 별로 내세 울 것이 없는 Mac mini도 아이폰 앱을 개발하는 데 전혀 부족

함이 없습니다. 심지어 앱 개발을 위해 3D 관련 툴을 장시간 사용해 상당한 부담을 가해도 Mac

mini는 아무 말 없이 꿋꿋이 어려움을 이겨냈습니다. 결론적으로 세 종류 모두 개발하는 데 사용

해 봤지만 성능상 문제가 된 모델은 하나도 없었습니다. 그러므로 안심하고 가장 마음에 드는 모델

Page 25: 강행돌파! 아이폰 & 아이패드 프로그래밍

01 아이폰 & 아이패드 개발 준비 l 15

을 고르면 됩니다. 저는 어떤 현재 모델을 쓰냐고요? 회사에서는 Mac mini에 커다란 와이드 모니

터(Matt 형)를 연결해서 쓰고, 집에서는 MacBook Pro를 씁니다. 제가 개인용으로 MacBook 시리

즈를 구입한 이유는 간단합니다. 이사갈 때 짐이 적어지니까요(맥 기종을 고르는 기준은 개발자

마다 정말 천차만별입니다).

자! 이제 맥과 아이폰만으로 아이폰 앱 개발을 위한 장비는 모두 갖춰졌습니다!

이제부터 실제로 개발을 시작해 봅시다! 먼저 Xcode부터 살펴보겠습니다.

Page 26: 강행돌파! 아이폰 & 아이패드 프로그래밍

iPho

ne &

iPad

Prog

ram

min

g

Page 27: 강행돌파! 아이폰 & 아이패드 프로그래밍

02개발 시작하기

2.1 Xcode란?

먼저 Xcode에 대해 간단히 알아봅시다. Xcode란 Objective-C 언어로 iPhone/iPod touch 혹은

iPad용 애플리케이션을 개발하기 위한 툴입니다. 물론 다른 언어로 개발할 때도 사용할 수 있으

며 Mac OS X용 애플리케이션을 개발할 때도 사용됩니다. 단순한 인터페이스와 스냅샷과 같은 편

리한 기능, 그리고 여러 가지 프로젝트 공유 기능을 기본적으로 탑재한 Xcode는 많은 개발자에게

새로운 희망으로 등장한 강력한 개발 툴입니다.

이제 Xcode를 설치해 봅시다. Xcode는 원래부터 Mac OS X에 포함돼 있습니다(하지만 따로

Mac OS X 설치 디스크에서 설치해야 할 때도 있습니다).

[루트폴더 ▷ Developer ▷ Application] 순서로 찾아가면 Xcode.app을 확인할 수 있습니다. 이

폴더에는 그 밖에도 개발자를 즐겁게 해 줄 만한 여러 가지 도구가 준비돼 있으므로 시간이 날 때

한번 살펴보기 바랍니다.

Page 28: 강행돌파! 아이폰 & 아이패드 프로그래밍

18 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-1 Xcode가 있는 폴더

잘 찾기 힘든 분이나 찾기 귀찮은 분은 Finder 오른쪽 상단의 찾기 창(Spotlight)에서 Xcode.

app를 타이핑하면 나옵니다.

Mac OS X는 왜 이렇게 파일 찾는 게 빠른가요?

Mac OS X는 HFS+(Mac OS 확장 포맷)라는 Mac OS X 특유의 파일 시스템을 사용합니다.

이 시스템에서는 기본적으로 파일 정보를 미리 인덱스화해서 찾기 창(Spotlight)에서 검색할

때 사용합니다. 이 시스템은 Mac OS X뿐 아니라 iPhone OS에도 채용되어 iPhone OS 3.0

이상의 OS에서도 Spotlight 기능을 사용할 수 있습니다. 아이폰 메인화면에서 왼쪽 페이지

로 가면 보이는 검색창이 바로 그것입니다. 마이크로소프트 윈도우에서 이 시스템을 사용하

려면 별도의 상용 소프트웨어를 구입해야 합니다. 하지만 맥의 ‘부트캠프’를 사용해서 맥에 윈

도우를 설치하는 경우 HFS+ 파일 시스템에 접근이 가능하기도 합니다. 마이크로소프트도

이 파일 시스템에 대항하기 위해 WinFS라는 파일 시스템을 개발해 왔으나 2006년 6월 23일

개발이 중지되어 탑재 예정이었던 Windows Vista에서도 볼 수 없게 됐습니다. 그 뒤 마이크

로소프트의 CEO 스티브 발머가 이 기술은 아직 개발 중이라고 언급하기도 했으나 그 후로

별다른 소식은 없습니다. 그래서 일각에서는 WinFS를 베이퍼웨어(vaporware : 출시 예정이

었으나 출시되지 않고 사라진 소프트웨어) 중 하나라고 간주하기도 합니다. 그 사이 Mac OS

X의 파일 시스템은 더욱 더 발전을 거듭하고 있습니다.

Page 29: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 19

그림 2-2 /Developer/Application 하위 폴더에 있는 다양한 개발 툴

그림 2-3 유용한 아이콘 편집 툴인 Icon Composer

그럼, Xcode를 실행해 볼까요? 그 전에 Xcode는 앞으로 자주 애용할 개발 툴이므로 Xcode.app

아이콘을 드래그해서 Dock(메뉴바)에 놓아둡시다. 앞으로 Xcode를 실행할 때는 이 바로가기

(Short cut)를 이용하면 됩니다.

그림 2-4 이 부분을 Dock이라고 한다.

Page 30: 강행돌파! 아이폰 & 아이패드 프로그래밍

20 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

Xcode를 클릭해 봅시다! 아래와 같은 웰컴 윈도우가 표시됩니다.

Welcome to Xcode... 라면서 우리를 반기고 있습니다. 친절하군요.

그림 2-5 환영 메시지

그림 2-6 일본어는 지원하면서 왜 한국어는?!

기본적으로 Xcode는 영문 메뉴를 기본으로 지원하므로 영문 메뉴에 익숙해집시다. 아직 한글

메뉴는 지원되지 않는 점이 매우 아쉽습니다. 우리나라에도 맥 사용자가 더 늘고, 아이폰의 보급

량이 늘어난다면 언젠가는 한글로 된 메뉴와 iPhone SDK API Reference를 볼 수 있을 것입니다.

Page 31: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 21

iPhone SDK, iPhone SDK API, iPhone SDK API reference

이게 뭐냐고요? 왜 이름이 점점 길어지냐고요? 지금부터 설명해 드리겠습니다.

1. iPhone SDK

먼저 iPhone SDK에 대해 알아봅시다. 정식 명칭은 ‘iPhone SDK for iPhone OS’입니다. 풀

어서 쓰면 iPhone Software Development Kit for iPhone Operating System입니다. 직역

하면 ‘아이폰 운영체제를 위한 아이폰 소트프웨어 개발 툴‘입니다. 이것만으로 iPhone SDK

를 이해할 있을 것입니다. 즉, 아이폰 앱을 개발하기 위한 도구를 의미합니다. Xcode도 이 도

구 중 하나이므로 iPhone SDK의 구성요소입니다. iPhone SDK에는 기본적으로는 아래 도

구가 포함돼 있습니다.

• Xcode : 프로젝트 개발 및 테스트를 실행하는 메인 도구입니다.

• iPhone Simulator : 실제 아이폰이 아닌 맥 위에서 가상 아이폰/아이패드 환경을 만들어

앱을 모의로 실행해 볼 수 있는 도구입니다.

• Instruments : 앱이 동작하면서 어느 정도 리소스를 쓰며, 메모리 유출은 없는지 등을 체

크할 수 있는 도구입니다.

• Interface Builder : MVC 구조의 V에 해당하는 뷰를 디자인하고 설계해주는 툴입니다.

MVC 구조란 데이터를 보존하거나 기억하는 역할을 하는 M(Model), 그리고 사용자의 입

력에 응답해 그것을 처리하여 M에 데이터 관련 처리를 시키거나 V에게 화면에 데이터를

표시하게 하는 등의 일을 처리하는 C(Controller), 그리고 사용자에게 결과를 화면에 보여

주거나 적당한 응답을 전하는 V(View)로 프로젝트 요소를 나눠서 설계하는 구조를 뜻합

니다. 아이폰 앱 개발에서 뷰는 단순한 코딩을 넘어서 그림판에 그림을 그리듯 화면을 디

자인하는 것이 가능합니다(이것을 ‘진화’라고 하지요!). 작성 결과는 확장자가 xib인 파일

로 저장됩니다. 물론 xib 파일을 작성하지 않고 완전히 코딩만으로 화면을 표현할 수도 있

습니다만, 이 편리한 툴을 놔두고 전부 코딩으로 처리하는 것은 작업 효율상 바람직하지

않습니다. 코딩만으로 화면을 표현할 경우 실제 어떤 모습으로 표현될지 정확히 예상하기

가 어렵지만 인터페이스 빌더를 이용하면 눈에 보이는 그대로 화면에 표현되므로 화면 디

자인이 수월합니다. 실제 앱 개발에서는 어느 한 방식만 사용하기보다는 인터페이스 빌더

와 코딩을 적절히 섞어서 화면을 표현합니다.

Page 32: 강행돌파! 아이폰 & 아이패드 프로그래밍

22 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

2. iPhone SDK API

자, 그럼 iPhone SDK API는 무엇일까요? iPhone SDK API는 iPhone SDK Application

Programming Interface를 뜻합니다. 쉽게 풀어 말하면 앱을 제어하기 위한 룰을 준비해

둔 것입니다. 라이브러리 혹은 프레임워크라고 하는 함수의 모음을 총칭한다고 생각하면 됩

니다.

3. iPhone SDK API Reference

iPhone SDK API Reference란 ‘Reference : 참고 문서’라는 뜻 그대로 iPhone SDK API의

설명을 적어둔 사전과 같은 참고자료입니다. 즉, 아무리 API를 잘 만들어도 설명해 두지 않는

다면 아무 소용이 없겠죠? ‘API 사용설명서’라고 생각하면 됩니다. 이 문서와 친해지는 것이

앱 개발의 고수가 되는 지름길입니다.

[그림] Reference : 영어로만 제공된다.

참고로 iPod touch와 iPad용 애플리케이션 개발에 따로 iPad SDK 등이 존재하지는 않습니

다. 더 정확하게 표현하자면, iPad 전용 API 메서드는 iPhone SDK API에 포함돼 있지만 그

것을 따로 iPad SDK라고 부르지는 않습니다. iPad에 설치된 OS를 따로 iPad OS라고 하지

않고, 아이폰용 OS와 아이패드용 OS를 통합해서 iOS라고 합니다. 기본적으로 iPhone에서

작동하는 대부분의 API 메서드는 다른 iPhone OS 운영체제가 작동하는 하드웨어에서도 동

작하므로 굳이 따로 API를 분리해서 번거롭게 할 필요가 없습니다.

Page 33: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 23

자, 그럼 Xcode의 웰컴 화면을 한 번 더 살펴봅시다. 오른쪽에는 지금까지 개발해 온 프로젝트

의 히스토리가 남아 있습니다. 이전까지 개발했던 프로젝트를 금방 읽어와서 계속 작업하기 위한

기능입니다. 왼쪽에 있는 ‘Create a new Xcode Project’는 Mac OS X이나 iPhone OS용 앱을 개발

하기 위한 프로젝트를 바로 생성하는 버튼입니다. 메뉴에서 [File ▷ New Project]와 같은 기능입

니다. 또한 그 밑에 ‘Getting Started With Xcode’는 Xcode를 효율적으로 사용해서 프로젝트를

진행해 나가는 노하우를 알려주는 ‘Xcode Quick Start’라는 페이지로 이동하게 해줍니다. 이 페이

지에는 API Reference를 빠르고 정확하게 찾는 법, Apple Developer Connection 웹페이지 소개,

버그 보고 방법 등 다양한 정보가 담겨 있습니다. 아무리 시간을 보내도 아깝지 않을 만큼 좋은 페

이지이니 이것저것 살펴보도록 합시다.

‘Xcode Quick Start’ 페이지들을 살펴보다가 좋은 정보가 있으면 창 위에 있는

‘Bookmarks’의 ‘Add Bookmark For ○○○‘를 클릭해 북마크해 둘 수 있다.

[그림] 마음에 드는 페이지는 북마크해주자!

세 번째 버튼인 ‘Apple Developer Connection’은 새로운 버전의 소프트웨어를 다운로드하거나

개발한 앱을 등록, 관리하는 ADC 웹페이지를 표시해 줍니다.

Page 34: 강행돌파! 아이폰 & 아이패드 프로그래밍

24 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그럼, 먼저 프로젝트를 생성해 보겠습니다.

‘Create a New Xcode project’나 [File ▷ New Project]를 선택합니다.

그러면 다음과 같은 6가지 템플릿이 나옵니다. 아직 개발을 시작하기보다는 Xcode의 사용을 연

습하는 단계이므로 우선 적당히 ‘Navigation-based Application’을 선택합니다. 그러고 나서 맨 밑

의 ‘Choose’를 선택합니다.

그림 2-7 프로젝트 시작하기

다음에 나오는 창은 프로젝트의 이름과 생성 위치를 지정하는 창입니다. 위치는 언제든지 바꿀

수 있으며, 프로젝트 이름도 간단히 변경할 수 있으므로 너무 곰곰이 생각할 필요는 없습니다. 다

른 프로젝트와 다르게 아이폰 앱 프로젝트는 Xcode와의 콤보 플레이로 프로젝트 이름을 쉽게 바

꿀 수 있다는 장점이 있습니다. Xcode에 프로젝트 이름을 변경하면 다른 설정 파일의 설정도 함께

바꿔주는 편리한 기능이 있기 때문입니다. 유의할 점은 Xcode 3.2 이상의 버전에서만 지원한다는

점입니다.

이제, ‘Save As’ 부분에 프로젝트 이름으로 ‘Practice’라고 입력하고 ‘Where’ 부분에 생성 장소로

‘데스크톱’을 선택합니다. 참고로 Mac 시스템에서는 바탕화면을 ‘데스크톱’이라고 표현합니다. 영

어 환경에서는 ‘Desktop’이라는 이름으로 검색창(Finder) 등에 표시됩니다.

Page 35: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 25

그림 2-8

[Save] 버튼을 클릭하면 데스크톱에 ‘Practice’라는 폴더가 만들어진 것을 확인할 수 있습니다.

그림 2-9 생성된 폴더

그러면 어떤 파일이 생성됐는지 살짝 살펴볼까요? ‘Practice’ 폴더를 더블클릭해서 열어봅시다.

다음과 같은 파일이 보일 것입니다.

그림 2-10 폴더의 내용

각 파일에 대해 간략히 알아봅시다. 먼저 ‘build’ 폴더. 이 폴더의 내용은 특별히 신경 쓸 필요

가 없습니다. 이 안에는 개발자가 코딩한 내용이 컴파일되어 들어 있습니다. 컴파일이란 코딩한 내

Page 36: 강행돌파! 아이폰 & 아이패드 프로그래밍

26 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

용을 아이폰 등 하드웨어가 더욱 알기 쉽게 기계어로 바꿔 주는 것을 뜻합니다. 이 동작은 물론

Xcode가 알아서 해줍니다.

다음으로 ‘Classes’라는 폴더를 알아봅시다. 이 폴더에는 개발자가 코딩한 클래스 파일이 들어

있습니다. 클래스 파일들이 들어 있어서 폴더명도 ‘Classes’입니다.

그림 2-11 .h와 .m을 확장자로 가진 파일이 들어 있다.

‘main.m’ 파일은 어떤 앱 프로젝트에도 있는 앱 시작 파일입니다. 대부분의 경우는 편집할 일이

없습니다.

그 밖에 연필과 자가 그려져 있는 꽤 괜찮은 디자인의 아이콘이 ‘○○○.xib’라는 확장자에 할당

돼 있는 것을 확인할 수 있습니다. xib 파일은 앞에서 언급한 적이 있습니다만, 다시 한 번 설명하

면 인터페이스 빌더에서 사용하는 화면 설계용 파일입니다. 화면을 설계하고(자) 그린다(연필)는

의미가 아이콘에 나타나 있습니다.

‘Practice_Pre¯x.pch’ 파일은 어떤 클래스 파일에도 공통으로 적용하고 싶은 부분을 코딩해 두

는 장소입니다. 다시 말해 모든 클래스가 참조하는 부분을 코딩해 두는 것입니다.

기본적으로 모든 클래스에서는 <Foundation/Foundation.h>와 <UIKit/UIkit.h>를 임포트

(import)하도록 되어 있습니다. 방금 언급한 것이 무슨 뜻인지는 조금 더 진행한 후 코드를 작성할

때 설명하겠습니다.

Page 37: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 27

그림 2-12 Practice_Prefix.pch 파일의 내용

그 밖에 확장자가 Plist인 프로젝트 세팅 파일과 xcodeproj이라는 긴 확장자를 가진 프로젝트

관리 파일이 있습니다. 프로젝트의 구조에 관해서는 5장의 ‘기본 폴더 구조와 기본 파일들의 역할’

에서 더 자세히 설명하겠습니다.

이제 Xcode의 기본 레이아웃을 살펴봅시다. 다음과 같은 레이아웃을 확인할 수 있습니다.

그림 2-13 Xcode의 기본 인터페이스

그림 2-13에서 왼쪽 상단의 Overview(‘Simulator - 3.0 | Debug’라고 된 부분)는 프로젝트를 어

떤 환경에서 어떤 모드로 실행할지를 정하는 곳입니다. 화면은 현재 iPhone OS 3.0이 설치된 아이

폰 시뮬레이터에서 디버그 모드로 실행하도록 설정돼 있습니다. 다음과 같이 클릭해서 설정을 바

꿀 수 있습니다.

Page 38: 강행돌파! 아이폰 & 아이패드 프로그래밍

28 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-14 iPhone OS 3.2가 설치된 아이패드에 릴리즈 모드로 실행되도록 설정해보자!

그 오른쪽에 있는 작은 톱니바퀴는 여러 가지 선택 대상에 대한 동작을 결정하는 곳입니다. 대

상을 선택하고 오른쪽 버클릭할 때와 같으므로 특별히 만질 일은 없는 곳입니다.

그림 2-15 메뉴의 톱니바퀴를 선택했을때 메뉴(좌)와 대상을 오른쪽 클릭했을 때 나오는 메뉴(우).

내용이 동일하므로 오른쪽 클릭을 하는것이 비교적 편하다.

오른쪽에 있는 ‘Breakpoints’라는 부분은 브레이크포인트(breakpoint)라는 것을 적용할 경우 그

것의 동작을 켜고 끄는 기능을 합니다. 디버그 모드를 사용하면 브레이크포인트로 지정된 지점에

서 앱을 멈추게 한 후 그 순간의 변수 값이나 메모리 상태를 확인할 수 있습니다. ‘브레이크포인트’

란 말 자체가 ‘멈추는 지점’이니 쉽게 이해할 수 있을 것입니다. 브레이크포인트를 활용해 버그를

잡는 행위를 ‘Debug (디버그)’라고 합니다. ‘디버그’라는 말 자체도 ‘De + Bug : 버그를 없애다’라는

뜻이니 이해하기 어렵지 않을 것입니다. 이 브레이크포인트와 디버그 모드도 좀 더 진행한 후에 본

격적으로 살펴보겠습니다.

Page 39: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 29

그림 2-16 브레이크포인트 비활성화

‘Breakpoints’ 버튼을 누르지 않았을 땐 코딩 창의 파란 표시(브레이크포인트 표시)가 흐릿하게

비활성화되어 있습니다(그림 2-16).

그림 2-17 브레이크포인트 활성화

그림 2-17에서 ‘Breakpoints’ 버튼을 눌러두면 파란 표시가 뚜렷해지며 브레이크포인트가 활성화

됩니다. 오른쪽에 ‘Build and Run’ 부분도 ‘Build and Debug’로 바뀝니다(그런데 아이콘이 왜 뜬금

없이 망치와 살충제로 바뀔까요? ‘Build ▷ 만들다 ▷ 망치’, ‘Debug ▷ 벌레를 잡다 ▷ 살충제’와 같

Page 40: 강행돌파! 아이폰 & 아이패드 프로그래밍

30 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

이 애플사의 소프트웨어에는 이 같은 재미있는 부분이 많이 있습니다. 애플사의 제품에는 이곳뿐

만이 아니라 여러 군데 센스(?)가 넘치는 부분이 많습니다. 개발을 더욱 즐겁게 해주는 이런 점들

을 여러분도 찾아보세요!).

그 다음은 ‘Build and Run’이란 부분인데 이것은 프로젝트를 컴파일하고 실행하는 버튼입니다.

Xcode는 컴파일과 리소스 복사, 라이브러리 링킹 등 프로젝트를 최종 .app 파일로 만드는 일련의

과정을 Build라고 표현하곤 합니다. 그래서 컴파일 파일도 build라는 폴더에 저장되고 지금 이 버

튼 이름도 ‘Build and Run’입니다.

옆에 ‘Tasks’라는 부분은 코딩할 때는 비활성화돼 있다가, 시뮬레이터나 아이폰에 프로젝트를

실행할 때 활성화됩니다. 이 버튼은 실행된 프로젝트를 멈추게 하는 기능을 합니다.

그 오른쪽에 ‘info’ 버튼은 선택한 대상의 정보를 보여주는 버튼으로 정보를 수정하는 데에도

사용됩니다.

그림 2-18 Info 버튼

파일의 인코딩(encoding)도 이 기능으로 변경할 수 있습니다. 개발 중 메모를 남기고 싶을 때는

Comments라는 부분에 메모도 남겨둘 수 있습니다. Comments에는 뭐라고 적든 코딩에는 영향

을 주지 않습니다(그림 2-18).

가장 오른쪽 상단에 보이는 창은 어디서 많이 보던 창 같습니다. 그렇습니다! Finder의 검색창,

일명 스포트라이트 창과 비슷한 모습입니다. 역할도 스포트라이트 창과 비슷합니다. 파일 등을 검

색할 때 쓰는 창입니다.

Page 41: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 31

그림 2-19 검색창

그림 2-19에서 프로젝트를 선택한 후 검색창에 ‘prac’이라고 입력하면 ‘prac’으로 시작하는 5개

의 파일이 검색되어 나옵니다. 대소문자 구별은 하지 않습니다. 결과가 몇 개 있는지는 화면 왼쪽

의 가장 아래쪽에 표시되어 나옵니다(위치가 극과 극이네요).

그럼 맨 위의 기본 메뉴바를 알아보았으니 이제 그 밑의 커다란 창들을 살펴봅시다.

먼저 왼쪽에 있는 창을 살펴보면 프로젝트의 파일과 구성요소를 같은 종류끼리 모아 놓은 것을

볼 수 있습니다.

▶ Classes : 실제 코딩의 대부분을 차지하는 파일(확장자가 .h나 .m인 파일)을 주로 담아두

는 곳입니다. 파일이 너무 많아지면 하위 그룹을 만들어 다시 분류할 수 있습니다.

▶ Other Sources : .pch 파일과 main() 메서드가 포함된 main.m 파일이 들어갑니다. 여기엔

별로 만질 일이 없는 파일을 모아두는 곳으로, 다른 그룹에 들어가기 애매한 파일이 분류되

어 있습니다. 이름도 ‘Other Sources : 기타 소스들’입니다. 세간에서는 이들을 ‘기타 등등’이

라고 부르기도 하지요. 추가되거나 삭제되는 일도 거의 없는 상당히 조용한 그룹입니다(정

확히 표현하자면 Objective-C 로 표현되지 않은 소스코드 등을 정리해 두는 곳이지요).

▶ Resources : ‘자원들’이란 뜻 그대로 앱의 실제 재료로 쓰일 이미지, 사운드와 화면 설계인

xib 파일, 데이터 저장 파일인 plist 파일 등을 넣어두는 그룹입니다. 실제로 쓰이는 모든 파

일은 이곳에 넣어두어야 합니다. 애플리케이션이 실행되면서 접근권한이 있는 폴더와 없

는 폴더로 구분되는데, 여기 들어 있는 파일들에는 모두 접근권한이 있기 때문입니다.

Page 42: 강행돌파! 아이폰 & 아이패드 프로그래밍

32 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

▶ Frameworks : 프레임워크들이 들어있는 그룹입니다. 프레임워크란 ‘Applicat ion

Framework’를 줄여 부르는 말로, 특정 시스템(여기선 iPhone)의 애플리케이션 표준 구조

를 구현하기 위해 쓰이는 클래스와 라이브러리의 모음을 뜻합니다. 예를 들어 MapKit이라

는 프레임워크는 지도를 구현하기 위한 클래스들을 모아둔 집합입니다(김연아 선수에게

팬레터를 보내는 클래스, 김연아 선수의 동영상을 찾아주는 클래스, 김연아 선수의 스케줄

을 알아봐주는 클래스를 모으면 ‘연아사랑.framework’라는 프레임워크가 되겠지요! )

▶ Product : 프로젝트의 설정 파일, 리소스, 컴파일된 파일 등을 한데 묶은 꾸러미인 .app 파

일이 들어 있습니다. 이 .app 파일은 앱스토어에 실제 등록할 때 애플사에 보내는 파일입

니다(이 파일 하나만 보내면 됩니다. 필요한 데이터를 전부 가지고 있으니까요). 참고로 이

.app 파일은 압축을 풀 듯이 다시 프로젝트를 복원하지는 못하게 되어 있습니다. 그러므로

프로젝트를 백업하려면 폴더의 복사본을 만들거나 zip 파일로 압축하는 것이 좋습니다. 물

론 .app 파일도 같은 폴더에 있으므로 같이 백업되겠지요. 이 app 파일이 빨간색으로 표시

되는 경우가 있는데, 이는 Xcode가 이 파일을 찾을 수 없어서입니다. 이때는 프로젝트를 컴

파일해 주면 파일을 찾아서 검정색으로 표시해 줍니다.

그림 2-20 파일 압축

Mac OS X은 Zip 형식 압축을 기본 지원합니다. 폴더를 대상으로 오른쪽 버튼을 클릭하면 압축

을 하게 해주는 메뉴가 보입니다.(그림 2-20)

▶ Target : 애플리케이션 빌드 방법 등을 설정하는 타겟 정보가 표시됩니다. 애플리케이션을

앱스토어에 업로드할 때 프로젝트 설정을 많이 변경하게 되는데 그때 자주 쓰이는 그룹입

니다.

Page 43: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 33

▶ Executable : 확장자가 app인 애플리케이션이 포함된 실행 가능 파일이 표시됩니다.

▶ Find Results : 프로젝트 안의 문자열 검색 결과 이력이 리스트로 정리돼 있습니다.

▶ Bookmarks : 소스코드 등에 붙여 놓은 북마크가 표시됩니다.

▶ SCM : 프로젝트 공유 등 프로젝트 관리 정보를 제어하는 부분입니다.

▶ Project Symbol : 프로젝트 내에 존재하는 인스턴스 등 심볼들을 리스트로 정리해서 보여

줍니다.

▶ Implementation Files : main.m 등 확장자가 .m이나 .c 등 소스코드 파일이 표시되는 곳

입니다.

▶ Nib Files : 프로젝트에 등록된 확장자가 xib인 사용자 인터페이스 정의 파일을 표시하는

부분입니다. 그룹 이름은 ‘Nib Files’인데 ‘Xib’가 확장자인 파일들이 저장돼 있습니다. 사실

Xib 파일들의 원래 이름이 Nib입니다. 그러므로 Xib라는 확장자를 쓰더라도 Nib 파일이라

고 표시하는 경우도 많으니 알아두기 바랍니다.

위의 폴더 중 개발을 할 때 주로 사용하게 되는 곳은 Classes, Other Sources, Resources,

Frameworks, Nib Files 등입니다. 물론 자주 사용하는 그룹은 프로젝트의 성격에 따라 달라질

수도 있습니다. 그리고 유의할 점은 이 그룹들은 말 그대로 ‘그룹’일 뿐 ‘폴더’가 아니라는 점입니

다. 예를 들어 프로젝트 폴더 안에 ‘Other Sources’라는 폴더는 없습니다. 또 프로젝트 폴더 안

에 ‘Image’라는 폴더를 만들어 그림 파일들을 저장해두고 Xcode상에서는 ‘Resources’ 그룹 안에

‘Picture’라는 그룹에 그림을 추가해 둬도 됩니다. 이처럼 자유로운 파일 배치는 프로젝트 진행을

상당히 수월하고 편하게 만들어 줍니다! Xcode 안에서는 절대 경로니 상대 경로니 고민할 필요가

없습니다. 절대 경로도 상대 경로도 아닌 ‘내 마음대로’ 경로이니까요!

2.2 Xcode의 커스터마이즈! XCode엔 이런 기능도 있다

그러면 이 Xocde를 사용하기 쉽게 커스터마이즈해 봅시다! 무슨 말이냐고요? Xcode에서는 메뉴

나 창의 개발자가 다루기 쉽게 배치를 자유롭게 바꿀 수 있는 기능이 있습니다. 먼저 상단의 툴바

아이콘을 커스터마이즈해 보도록 하지요. 다음과 같이 툴바 부분을 대상으로 오른쪽 버튼을 클릭

해서 ‘Customize Toolbar’를 선택합니다.

Page 44: 강행돌파! 아이폰 & 아이패드 프로그래밍

34 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-21 'Customize Toolbar…' 를 선택

참고로 다음 툴바의 ‘Icon and Text’에 체크 표시를 해두면 툴바의 각 항목이 아이폰과 그 밑에

텍스트로 표시됩니다. Xcode는 기본적으로 이 설정이 기본 설정으로 돼 있지만, 혹시라도 바꾸고

싶은 분은 ‘Icon Only’(아이콘만 표시) 혹은 ‘Text Only’(텍스트만 표시)를 선택하면 됩니다(그림

2-21).

그러면 아래 그림 2-22와 같은 커다란 창이 나타납니다.

그림 2-22 아이콘 항목 표시창

Page 45: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 35

‘Drag your favorite items into the toolbar... : 툴바로 당신이 좋아하는 아이템을 드래그하세요’

라고 적혀 있습니다. 사용법은 말 그대로 드래그하는 것뿐입니다. 참 편리하죠?

이 중에서 자주 쓰이고 중요한 아이콘은 다음과 같습니다.

▶ BreakPoints : 브레이크포인트를 활성화하고 디버그 창이 뜨게 해줍니다.

▶ Clean All : 새로운 리소스를 추가하거나 프로젝트에 중대한 변화가 생길 경우 다시 컴파일

을 해주고 설정 파일을 재정리해 줍니다. 매우 자주 쓰이니 꼭 툴바에 넣어둡시다.

▶ Snapshots : 스냅샷이란 프로젝트를 백업하고 이전 백업에서 바뀐 부분을 쉽게 설명도 해

주는 Xcode의 기능입니다. 이 스냅샷들을 보여주고 관리하는 창을 열어주는 아이콘은 꼭

추가해 줍시다(사진 찍듯이 그대로 저장해 준다는 의미로 아이콘도 사진기 아이콘입니다).

▶ Make Snapshots : 스냅샷을 만들어 주는 기능입니다.

▶ Build and Run / Debug : 원래 기본으로 표시되는 기능으로, 프로젝트를 컴파일해서 실행

해 주는 기능입니다.

▶ Tasks : 실행된 프로젝트를 중지하는 기능입니다.

그 밖에도 Xcode에 기본 제공되는 아이콘들은 그대로 쓰는 편이 좋습니다. ‘Info’ 버튼만 빼고

요. Info 버튼은 대상의 정보를 보여주는 것인데 그렇게 자주 쓰이지 않고 대상을 ‘오른쪽 버튼 클

릭’ ▷ ‘Get Info’ 하는 것과 결과가 같으므로 툴바에 넣어둘 필요까지는 없을 것 같습니다. Xcode

의 원래 기본 설정으로 되돌리고 싶을 때는 창의 하단에 있는 ‘... or drag the default set into the

toolbar (... 또는 기본 세트를 툴바로 드래그하세요)’라는 부분을 그대로 툴바에 드래그해 주면 됩

니다.

이 외의 아이콘은 시간이 있을 때 추가해서 하나씩 살펴보기 바랍니다. 개발자마다 자주 쓰는

기능도 다르고 또 단축기도 다르기에 자신에게 맞는 개발환경으로 커스터마이즈해 나가는 것 또

한 아이폰 앱 개발의 즐거움입니다.

툴바 설정창의 하단에 있는 Use small size를 체크해 주면 툴바의 아이콘 크기가 ‘약간’

작아집니다. 대신 클릭하기가 ‘약간’ 불편해집니다.

Page 46: 강행돌파! 아이폰 & 아이패드 프로그래밍

36 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그 다음으로 화면 좌측에 있는 ‘Groups & Files’ 부분을 커스터마이즈해 봅시다.

이 작은 버튼( )을 누르면 창이 나눠집니다.

이 버튼( )을 누르면 하단의 창과 합쳐져서 하나의 창이 됩니다.

필자는 다음과 같이 창을 2개로 나눠서 작업을 합니다. 그 이유는 프로젝트를 진행하다 보면 파

일의 수가 늘어나서 창 하나에 전부 표시해 두기가 힘들어지기 때문입니다. 그래서 창을 둘로 나누

어 두고 위에는 Classes 폴더 안의 파일을 다루고 밑의 창에서는 Resources 창의 파일을 다룹니다.

이렇게 하면 파일을 쉽고 효율적으로 찾을 수 있습니다.

그림 2-23 화면을 둘로 나누면 편리하다.

이제는 실제 코딩을 하는 코딩 창도 약간 바꿔 봅시다. 이 창에는 왼쪽에 줄 번호가 표시되게끔

설정해 두면 도움이 됩니다.

먼저 [Xcode ▷ Preference]를 선택해 줍니다.

Page 47: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 37

그림 2-24 ‘Preference’를 선택해서 환경설정을 해보자!

그러면 다음과 같은 창이 나타납니다. 여기서 ‘Text Editing’ 항목의 좌측 ‘Display Options’의

‘Show line numbers’에 체크해 줍니다.

그림 2-25 바로 이 부분!

그 밖에도 폰트의 크기나 종류를 바꾸거나 단축키를 확인, 변경하는 부분 등 많은 설정을 할 수

있으므로 다른 항목들도 시간이 날 때 천천히 살펴보기 바랍니다. 일단 이번에는 위의 부분만 다

뤄 봤습니다.

Page 48: 강행돌파! 아이폰 & 아이패드 프로그래밍

38 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

스냅샷(SnapShot) 기능

일단 스냅샷을 찍으려면 툴바의 ‘Make Snapshop’ 버튼을 클릭하면 됩니다.

‘Make Snapshop’ 버튼 ‘SnapShop’ 버튼

그러면 찍은 스냅샷을 불러오거나 관리하려면 어떻게 해야 할까요?

네, 바로 ‘SnapShop’ 버튼을 누르면 됩니다. ‘Snapshot’ 버튼을 누르면 아래 그림과 같은 창

이 나타납니다.

Snapshot 창 툴바의 버튼들을 하나씩 살펴봅시다.

• Make : ‘Make Snapshop’ 버튼과 같은 기능입니다. 스냅샷을 찍습니다.

• Delete : 스냅샷을 삭제합니다.

• Restore : 선택된 스냅샷(백업)의 내용대로 프로젝트를 되돌립니다.

• Show Files : 직전의 스냅샷과 비교해서 어떤 파일이 추가/삭제/변경됐는지, 그리고 파일

내용에 변경 사항이 있다면 어떤 내용이 바뀌었는지 보여줍니다.

[그림] ‘Snapshot’ 관리 창

Page 49: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 39

[그림] 코드 변경 사항의 확인

‘Show Files’를 선택하면 다음과 같이 변경 사항을 자세히 알려줍니다. 매우 친절한 기능입니

다. ‘Hide Files’를 선택하면 오른쪽으로 펼쳐진 창이 다시 줄어듭니다.

툴바 밑에 있는 창은 스냅샷들이 작성된 시간에 따라 스냅샷이 나열돼 있는 리스트입니다.

‘Name’이라는 텍스트 박스에 찍은 스냅샷의 이름을 지정하고 ‘Comments’ 부분에 남기고

싶은 내용을 작성하면 됩니다. 여기서 지정한 이름은 리스트에 그대로 표시됩니다. 기본적으

로 스냅샷의 이름에는 스냅샷을 찍은 날짜와 시간이 됩니다만 다른 이름을 지정해도 작성된

시간은 ‘Date’ 항목에서 언제나 확인할 수 있으므로 걱정할 필요가 없습니다.

[그림] 이름과 코멘트도 넣어주면 편리하다.

Page 50: 강행돌파! 아이폰 & 아이패드 프로그래밍

40 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

이제 마지막으로 ‘내비게이션 바’라고도 하는 코딩 창 바로 위에 있는 바에 대해 알아봅시다.

그림 2-26 내비게이션 바

가장 왼쪽에 있는 화살표는 이전에 본 파일을 다시 한 번 창에 표시하는 역할을 합니다. 물론 그

오른쪽에 있는 화살표는 다시 최근의 파일을 표시해 주는 기능을 합니다. 그 오른편의 ‘파일 히스

토리 메뉴’라고 하는 이 부분에는 이제까지 코딩 창에 표시했던 파일들의 히스토리가 나와서 쉽게

재참조가 가능합니다.

그림 2-27 히스토리 기능

참고로 ‘Clear History’를 선택하면 히스토리가 모두 삭제됩니다. ‘History Capacity’에서는 최근

의 몇 개까지 히스토리에 기록해 둘지를 정해줄 수 있습니다. 기본적으로는 ‘Unlimited’인 무한으

로 설정돼 있지만 10개, 20개, 40개로 설정할 수도 있습니다(아직 개수를 마음대로 지정해주는 기

능은 없습니다).

그 다음에 있는 ‘액션 메뉴’는 상당히 자주 쓰이는 부분이니 기억해 둡시다. 이 버튼을 누르면 다

음과 같이 클래스 안의 메서드 등의 리스트가 나타나는데 클릭하면 바로 코딩창에서 선택한 위치

로 이동합니다. 쉽게 말해 -tapBtn이란 부분을 클릭하면 - (void) tapBtn과 같은 메서드로 바로 점

프합니다. 코딩 창을 이리저리 움직이며 특정 메서드를 찾아보는 수고를 덜어줍니다.

그림 2-28 자주 쓰이는 ‘액션 메뉴’

Page 51: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 41

액션 메뉴에 특정 지점을 추가하고 싶으면 #pragma mark라고 작성하고 이름을 뒤에 적

어주면 됩니다. 예를 들어 #pragma mark I like BOA라고 코딩하면 다음과 같이 나옵니다. 주로

메서드들을 역할 등에 따라 쉽게 구분하는 데 사용됩니다.

[그림] 코딩 창과 액션 메뉴를 비교해 보자!

그 밖의 버튼은 그리 자주 쓰이지 않습니다. 그래도 Xcode의 구성원인데 나머지 버튼도 소개는

하고 넘어가야겠죠?

▶ 북마크 메뉴( ) : 북마크를 표시합니다.

▶ 브레이크포인트 메뉴( ) : 브레이크포인트를 표시합니다.

코딩 창의 브레이크포인터 마크와 같은 이미지가 표시돼 있습니다.

▶ 클래스 계층 메뉴( ) : 클래스의 계층을 표시합니다.

Class의 첫 글자인 ‘C’가 이미지에 들어 있습니다.

▶ 인크루드 파일 메뉴( ) : 현재 지정된 파일이 ‘import’ 혹은 ‘include’하고 있는 파일의

리스트와 바로가기를 제공합니다. import와 include는 ‘#’을 적

고 #import <UIKit/UIKit.h>와 같이 작성하므로 ‘#’가 아이콘

에 들어가 있습니다.

▶ 카운터 파트 버튼( ) : Objective-C의 클래스들은 기본적으로 .m과 .h의 짝으로 구성

됩니다. 그 짝의 코드로 화면을 바꿔주는 고마운 버튼입니다. 나

머지 버튼 중에서는 가장 자주 쓰이는 버튼이네요. 짝을 찾아준

다고 해서 두 창이 한 쌍이 돼 있는 그림이 그려져 있습니다.

Page 52: 강행돌파! 아이폰 & 아이패드 프로그래밍

42 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

▶ 잠금 버튼( ) : 열린 파일을 잠그거나, 잠긴 파일을 여는 기능을 합니다. 잠그는 기능 그대로 ‘자물쇠’가 그려져 있습니다.

▶ 나누기 버튼( ) : 에디터 윈도우, 일명 코딩 창을 나누거나 합쳐 줍니다.

지금까지 Xcode의 기본적인 커스터마이징 방법을 알아봤습니다. 이제 커스터마이징은 여기서

마치고 다음으로 인터페이스 빌더에 대해 알아봅시다!

2.3 인터페이스 빌더

자, 이제 아이폰 앱 개발의 꽃이라고 할 수 있는 인터페이스 빌더(Interface Builder)를 알아볼

까요?

먼저 RAD라는 용어를 알아보고 넘어갑시다. RAD란 Rapid Application Development의 약자

로서 소프트웨어 개발을 쉽고 빠르게 만들어 주는 툴을 의미합니다. 예를 들어 비주얼 베이직에

서는 소스코드를 직접 입력하지 않아도 GUI 부분의 아이콘을 이용해 시각적으로 간단히 윈도우

를 만드는 것이 가능합니다. 또, 단순한 뷰의 디자인뿐만이 아니라 속성과 액션의 처리 등도 해줄

수 있는 매우 바람직한 도구입니다.

쉽게 말해 소스코드를 직접 입력하는 대신 앱을 시각적으로 만들 수 있게 해주는 툴을 이용해

서 쉽고 빠르고, 효율적으로 앱을 제작하게 해주는 툴을 뜻합니다. 그런데 갑자기 왜 RAD 이야기

냐고요? 바로 이 인터페이스 빌더가 RAD에 속하는 툴이기 때문입니다.

이 인터페이스 빌더를 어떻게 이용하느냐에 따라 앱 개발의 시간과 효율이 크게 달라집니다.

먼저 인터페이스 빌더가 어디 있는지 확인해 봅시다. 인터페이스 빌더는 Xcode와 같이

/Developer/Application에 있습니다. 이 툴도 Dock 에 드래그해서 등록해 둡시다.

그림 2-29와 같이 Xcode와 같은 장소에 사이 좋게 함께 있습니다. 여기 있는 다른 친구들도 좀

더 진행하면서 자연스럽게 알게 될 것입니다. 서로 떼려야 뗄 수 없는 좋은 친구들입니다.

Page 53: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 43

그림 2-29 Interface Builder의 기본 위치

Interface Builder의 편리한 기능을 알아보자!

이제 실제로 인터페이스 빌더를 실행해 봅시다! 2.1절에서 작성한 ‘Practice’ 프로젝트를 계

속해서 사용합니다. 먼저 ‘Groups & Files’ 창의 ‘Resources’ 그룹의 ‘RootViewController.

xib’ 파일을 더블클릭하면 인터페이스 빌더가 실행되고 다음과 같은 창이 나타납니다(앞으로

는 ‘Groups & Files’ 창이란 말은 생략하겠습니다. 예를 들어 방금 전의 행동은 [Resources ▷

RootViewController.xib]를 클릭합니다.’ 와 같이 표현하겠습니다).

이제 다음과 같은 창이 나타날 것입니다.

그림 2-30 xib 파일의 내용을 보여주는 창. ‘Xib 윈도우’라고도 한다.

이 ‘Xib 윈도우’에 표시된 아이템들은 ‘인터페이스 오브젝트’ 라고 합니다. 이렇게 불리는 이유는

각기 어떤 인터페이스를 나타내고 있기 때문입니다. 인터페이스(Interface)를 물건(Object)처럼 눈

에 보이는 아이템으로 표시하기에 인터페이스 오브젝트(Interface Object)라고 부른다고 생각하면

Page 54: 강행돌파! 아이폰 & 아이패드 프로그래밍

44 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

됩니다. 다만, ‘File’s Owner’와 ‘First Responder’는 ‘프록시 오브젝트’라고 불립니다. 이것들은 xib

파일에는 반드시 있는 아이템이지만 특정 클래스의 인스턴스는 아니며, 이곳에 생성된 아이템(정

확한 표현은 인스턴스)을 코드와 연결시켜 주기 위해 존재하는 매력적인 도우미입니다.

File’s Owner & First Responder

File’s Owner : File’s Owner는 클래스 오브젝트 자체를 나타내며 xib 파일에서 디자인한

부분을 코딩과 연결시킬 때 필요한 항목입니다. 처음 보는 사람에게 신선한 충격을 주곤 하

는 파란 선으로, 진짜로 실 같은 게 나와서 연결해 줍니다.

[그림] File's Owner

First Responder : 이 프록시 오브젝트는 사용자 인터페이스에서 사용자로부터 생긴 동작

(이벤트라고도 부릅니다)에 가장 먼저 응답할 오브젝트를 나타냅니다. First Responder라는

말 자체도 ‘First : 가장 먼저, Responder : 응답하는 것’이므로 기억하는 데 도움이 될 듯합

니다. 자세히 보면 아이콘도 위에 왼쪽 상부의 작은 버튼을 누르면(event) 아래의 빈 공간에

뭔가 응답(respond)이 뚝 떨어지는 자판기처럼 생겼습니다. 가장 먼저 응답해 준다고 측면엔

1이라는 숫자도 크게 새겨져 있습니다.

[그림] FirstResponsder 아이콘

자, 그러면 RootViewController.xib를 더블클릭했을 때 떠오르는 또 다른 창을 살펴봅시다. 이

번엔 뭔가 리스트가 표시된 다음 창을 알아볼까요?

Page 55: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 45

그림 2-31 Table View

‘California’라는 바 밑으로 캘리포니아 주의 지역명이 나열돼 있습니다(이 지역명은 iPhone

SDK의 버전에 따라 바뀌곤 합니다. 주로 캘리포니아의 지역이나 도시의 이름이 나열되는 경우가

많습니다).

이 창은 방금 전의 Xib 윈도우의 ‘Table View’라는 오브젝트을 더블클릭하면 뜨는 편집창입니

다. 오브젝트을 더블클릭하면 해당 오브젝트에 특화된 편집창이 나타납니다. 물론 프록시 오브젝

트는 예외입니다. 이 편집창에는 창을 시계 반대 방향으로 90도 회전시키는 화살표가 오른쪽 위에

위치해 있습니다. 이 기능은 가속력 센서로 아이폰의 회전을 감지해서 앱의 뷰를 회전에 따라 움

직여 줄 때(아이폰이 가로로 놓였을 때 창을 회전시켜 가로로 표시해 주는 기능과 같은 것입니다)

어떤 모습으로 표현될지 실험해 보기 위한 도구입니다. 클릭해도 큰일나는 것은 아니니 한번 클릭

해 봅시다!

그림 2-32 우측 상단의 버튼을 누르면 화면이 회전한다.

그리고 마지막으로 인스펙터라는 창에 대해 알아봅시다. 인스펙터(Inspector : 조사관)란 단어

뜻대로 오브젝트의 속성 등을 조사하고 수정도 할 수 있는 창입니다. xib 파일을 더블클릭해서 인

터페이스 빌더를 실행했을 때는 초기에 인스펙터 창이 나타나 있지 않은 경우가 많으므로 메뉴의

[Tools ▷ Inspector]를 선택해 인스펙터를 표시해 줄 필요가 있습니다.

Page 56: 강행돌파! 아이폰 & 아이패드 프로그래밍

46 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-33 xib 창에 있는 테이블뷰의 정보를 오른쪽의 인스펙터가 표시해 주고 있다.

인스펙터에서는 테이블뷰 등 오브젝트의 속성을 직접 변경할 수도 있다.

윈도우의 ‘Table View’를 클릭하면 인스펙터에 자세한 정보가 뜹니다. 오른쪽에 ‘Table View

Attributes(테이블뷰 속성)’이라고 표시된 창이 인스펙터 창입니다.

지금까지 인터페이스 빌더에 대해 간략하게 알아봤습니다. 이제 인터페이스 빌더도 Xcode처럼

커스터마이즈해 봅시다.

2.4 Interface Builder를 커스터마이즈해 보자

인터페이스 빌더의 초기 화면(Xib 창)을 다시 한 번 살펴봅시다.

그림 2-34 인터페이스 빌더의 초기 화면(Xib 창)

이 창의 툴바를 먼저 확인해 봅시다.

Page 57: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 47

먼저 가장 왼쪽을 보면 ‘View Mode’( )라는 부분이 있습니다. 3개의 버튼으로 구성돼 있으며, 왼쪽부터 ‘아이콘 모드’, ‘리스트 모드’, ‘컬럼 모드’라고 합니다.

‘View Mode’에서 맨 왼쪽에 조그만 사각형 네 개가 그려져 있는 버튼은 오브젝트을 꽤 큼직한

아이콘과 그 밑에 텍스트로 표시합니다. 오브젝트을 대상으로 오른쪽 버튼을 클릭해서 다른 곳으

로 연결해주는 작업 등을 많이 하기 때문에 아이콘은 크게 표시하는 편이 클릭하기 좋아서 작업하

기에 좋습니다. 처음 Interface Builder를 실행하면 이 버튼 설정이 기본 값으로 지정돼 있습니다.

그리고 ‘View Mode’에서 가운데에 줄이 가로로 나열돼 있는 모양의 버튼을 누르면 버튼의 모양

그대로 오브젝트이 목록으로 표시됩니다. 화면에 오브젝트이 중첩되면 각 오브젝트을 클릭하기가

힘든 경우가 생기는데 이때 이 리스트 모드이면 선택하기가 쉽습니다. 또한 각 오브젝트의 포함 관

계도 명확하게 관리할 수 있으므로 많은 개발자들이 선호하는 모드입니다.

그림 2-35 오브젝트을 리스트로 표시하는 버튼

마지막으로 ‘View Mode’에서 맨 오른쪽의 창틀처럼 생긴 버튼은 컬럼으로 각 오브젝트을 계층

적으로 보여주는 모드입니다. 왼쪽에 있는 오브젝트 안에 오른쪽에 나열된 오브젝트이 포함돼 있

는 형태입니다.

그림 2-36 포함 관계에 따라 계속해서 리스트를 보여준다.

Page 58: 강행돌파! 아이폰 & 아이패드 프로그래밍

48 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-37 오브젝트에 직접 이름을 붙여줄 경우 그 이름이 표시된다.

오브젝트에 이름 짓기

각 오브젝트에는 알아보기 쉽게 이름을 지어 줄 수 있습니다. 이 이름은 실제 동작에는 아무

런 영향을 끼치지 않는 별명과 같은 것으로 오직 개발자의 편의를 위해 제공되는 기능이므로

개발자 자신이 알아보기 편한 대로 지으면 됩니다. 이름을 짓는 방법은 다음과 같습니다.

• 이름을 지어주려는 오브젝트를 선택한다.

• 인스펙터 창을 띄운다.

• ‘Identity Inspector’라고 하는 창의 맨 오른쪽 메뉴 버튼을 누른다. ‘Interface Builder

Identity’라고 하는 부분의 ‘Name’ 부분에 원하는 이름을 기입한다.

참고로 사진의 Label에 색상을 지정해주면 Xib뷰의 오브젝트에 지정해 준 색상으로 이름이

표시됩니다.

Page 59: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 49

위 그림과 같이 설정해 준 이름과 색상이 표시됩니다.

이제 툴 바를 커스터마이즈하는 내용으로 다시 돌아와서 ‘Inspector’ ( ) 버튼에 대해 알아

봅시다. 전에도 언급한 바와 같이 Inspector(인스펙터)는 기본적으로 기동 시 창이 표시되지 않은

경우가 많은데, 이때 메뉴의 [Tools ▷ Inspector]를 선택하기 귀찮은 경우 바로 이 버튼을 클릭하

면 인스펙터가 바로 표시됩니다.

툴 바의 가장 오른쪽에 있는 ‘Search Field’는 오브젝트를 검색할 때 쓰이는 부분입니다. 예를 들

어 ‘win’이라고 적어주면 ‘win’이란 부분이 들어가 있는 ‘window’ 오브젝트 등이 검색되어 나옵니

다. 검색 결과는 언제나 리스트뷰 화면으로만 결과가 표시됩니다.

그림 2-38 검색창

그런데 Xcode에서처럼 툴바에 다른 기능의 아이콘을 추가할 수 없느냐고요? 네, 그렇게 할 수

있습니다. Xcode와 똑같은 방법으로 추가가 가능합니다. 툴바를 선택하고 오른쪽 버튼을 클릭한

뒤 [Customize Toolbar...]를 선택합니다.

Page 60: 강행돌파! 아이폰 & 아이패드 프로그래밍

50 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-39 ‘Customize Toolbar...’ 선택

그러면 다음과 같은 화면이 나타납니다.

그림 2-40 Xcode 툴바 커스터마이즈 화면과 비슷한 화면이 나타난다.

사용법은 역시 드래그앤드롭입니다. Xcode 창에 비하면 추가할 수 있는 툴이 적습니다. 툴이 많

지 않으므로 전부 알아보고 갑시다.

▶ View : 뷰 모드를 선택할 수 있게 해줍니다.

▶ Info : 선택된 오브젝트의 정보를 표시합니다.

▶ Library : 인스펙터의 라이브러리 창을 표시합니다.

▶ Inspector : 인스펙터 창을 표시합니다.

▶ Search : 오브젝트 검색창을 표시합니다.

▶ Separator : 툴 사이에 세로선을 그어 툴을 구분하기 쉽게 만들어 줍니다.

▶ Space : 고정된 크기의 빈 공간을 툴 사이에 넣어 줍니다.

▶ Flexible Space : xib 창의 크기에 맞춰 크기가 변하는 빈 공간을 넣어 줍니다.

Page 61: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 51

▶ Customize : 커스터마이즈 창을 표시합니다(지금 이 창과 같은 창입니다.)

▶ Print : 인쇄 기능을 수행합니다.

기본 툴바 설정으로 되돌리고 싶은 경우에는 ‘... or drag the default set into the toolbar.’ 밑에

있는 부분을 드래그해서 세팅하면 됩니다.

그 밑에 있는 ‘Show’ 부분은 Xcode를 커스터마이즈할 때와 마찬가지로 툴바의 표시 방법을

지정하는 부분입니다. ‘Use small size’는 작은 아이콘으로 표시할 것인가를 묻는 체크박스인데

Xcode에서와 다르게 기본적으로 체크박스에 체크가 되어 있습니다. 조금 더 큰 아이콘을 표시하

고 싶다면 이 체크 박스의 체크를 해제하기 바랍니다. 커스터마이즈가 다 끝나면 [Done] 버튼을

누르면 됩니다. 다음으로 인스트루먼트 툴에 대해 알아봅니다!

2.5 인스트루먼트

먼저 인스트루먼트(Instrument)의 원래 영문 의미를 알아봅시다. 영한 사전에는 ‘도구’ 또는 ‘악기’

라는 뜻으로 적혀 있습니다. 여기서는 ‘도구’라는 뜻으로 쓰였습니다.

그런데 자세히 보니 Instrument가 아니고 Instruments, 즉 복수형으로 쓰이고 있습니다. 이

제 감이 잡히나요? 네, 그렇습니다. 인스트루먼트 툴은 앱 개발을 도와주는 도구들을 모아둔 툴

세트입니다. 그러면 인스트루먼트 툴은 어디에 있을까요? 바로 Xcode와 인터페이스빌더가 있던

/Developer/Applications 폴더에 있습니다.

그림 2-41 인스트루먼트 툴 폴더

Page 62: 강행돌파! 아이폰 & 아이패드 프로그래밍

52 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

보통은 Xcode상에서 실행하므로 바로가기를 Dock에 만들어 줄 필요는 없습니다.

그러면 인스트루먼트 툴은 어떤 기능을 할까요? 전반적으로 다음과 같은 기능을 합니다.

▶ 현재 진행 중인 프로세스 조사

▶ 사용자의 동작(Action)을 시간의 순서대로 기록 및 재연

▶ 시스템이나 애플리케이션을 분석해주는 자신만의 툴을 제작

▶ Xcode에서 접근 가능한 형태로 개발자가 만든 기록(Record)과 인스트루먼트 설정을 저장

▶ 개발 중인 애플리케이션의 성능 시험

▶ 코드에 대한 테스트를 자동으로 실행

▶ 발생한 문제에 대한 시스템 레벨의 해법 파악

▶ 작성한 코드의 동작 방식을 이해하는 데 도움을 줌.

이렇게 이야기해도 여전히 쉽게 이해가 되지 않을 수도 있습니다. 뭐든지 백번 듣는 것보다 한

번 해보는 것이 이해가 빠른 법입니다.

그럼, 인스트루먼트 툴을 실행하는 법을 알아봅시다. 가장 단순한 방법은 역시 /Developer/

Applications 폴더의 Instruments.app 파일을 더블클릭해서 실행하는 것입니다. 하지만 대부분

의 경우 이렇게 실행하기보다 Xcode에서 직접 실행하는 형태로 인스트루먼트 툴을 실행합니다.

아래 그림을 보면서 다시 ‘Practice’ 프로젝트의 Xcode 창을 살펴봅시다. 메뉴의 [Run ▷ Run with

Performance Tool]을 보면 꽤 여러 가지 항목이 선택 가능하게 되어 있습니다. 인스트루먼트 툴

을 이러한 각기 다른 인스트루먼트로 구성돼 있습니다. 이 중에서 회색으로 표시된 툴들은 실행이

불가능한 (정확하게 말하면 현재 프로젝트와 연관성이 없어서 연결이 안 되는) 툴입니다. 프로젝

트에 쓰이는 프레임워크 등에 따라 실행되는 툴들은 차이가 있습니다. ‘Practice’ 프로젝트는 그림

2-42와 같이 4개의 툴을 선택할 수 있습니다.

Page 63: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 53

그림 2-42 Leak 항목의 위치

이 중에서 ‘Leaks’를 선택해 봅시다! Leaks란 ‘누출, 새는 곳’이란 뜻 그대로 메모리가 새는 곳

즉, 메모리 관리가 제대로 되지 않은 곳을 찾아 주는 툴입니다. 클릭해서 한번 실행해 봅시다.

그림 2-43 실행 환경이 시뮬레이터일 경우 위와 같이 시뮬레이터가 함께 실행된다.

Page 64: 강행돌파! 아이폰 & 아이패드 프로그래밍

54 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-44 인스트루먼트가 작동하는 모습

빨리 앱을 만들어 보고 싶다고요? 아직은 실제로 프로젝트를 시작하기 전 준비 단계입니다. ‘준

비’라고 하면 역시 개발 툴의 커스터마이즈겠죠? 인스트루먼트 툴이라고 해서 예외는 아닙니다. 다

음 절에서는 인스트루먼트 툴을 커스터머이즈해 봅시다.

시뮬레이터에서 하드웨어 선택하기

시뮬레이터에서 가상으로 실행해 볼 하드웨어를 아이폰과 아이패드 중에서 고를 수 있습니

다. 다음과 같이 시뮬레이터 메뉴에서 [Hardware ▷ Device]에서 iPhone이나 iPad를 선택

해 줍니다.

Page 65: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 55

2.6 인스트루먼트 툴의 커스터마이즈!

인스트루먼트는 데이터를 수집해서 사용자가 보기 편한 방식으로 표시해 주는 것이 목적인 툴입

니다. 하지만 한 번에 너무 많은 툴을 창에 표시하면 시스템에 과중한 부하를 가하게 되므로 수많

은 툴을 한 번에 동작시키지는 않는 것이 좋습니다. Mac Pro를 사용하고 있다고 해도 마찬가지입

니다. 그리고 참고로 같은 툴을 여러 개 동시에 실행하는 것도 가능합니다. 같은 툴이라도 시스템

에 다른 프로세스를 감시하게 하는 경우가 있으니까요.

사실 이 툴(이번 절에서는 편의상 각 인스트루먼트를 ‘툴’이라고 하겠습니다)은 처음부터 설정이

너무나 잘 되어 있어서 설정을 바꿀 필요가 없습니다. 이것이 바로 많은 iPhone 관련 도서들이 인

스트루먼트 툴의 설정에 대해 좀처럼 다루지 않는 이유입니다. 하지만 이 책에서는 인스트루먼트

툴의 설정 방법에 대해서도 살펴보고 넘어가겠습니다. 우선 툴들을 창에 추가하는 방법을 알아봅

시다.

먼저, 모든 툴들을 다 보여주는 창을 열어 봅시다. 인터페이스 빌더와 마찬가지로 ‘Library’에

서는 설정가능한 오브젝트을 모두 확인할 수 있고 또 드래그앤드롭으로 추가할 수 있습니다.

[Windows ▷ Library]를 선택하면 다음과 같은 라이브러리 창이 표시됩니다.

◀ 그룹 선택 창

인스트루먼트 리스트

인스트루먼트 상세 설명◀

액션 메뉴 - 필터 콘트롤러◀

그림 2-45 라이브러리 창

Page 66: 강행돌파! 아이폰 & 아이패드 프로그래밍

56 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

먼저 라이브러리 뷰를 보는 방법을 바꿔주는 아래쪽의 톱니 모양 아이콘에 대해 알아봅시다. 그

림 2-46은 액션 메뉴라고 하는 부분입니다.

그림 2-46 액션 메뉴

각 부분에 대해 알아봅시다.

▶ View Icons : 각 툴을 상징하는 아이콘만 표시합니다.

▶ View Icons And Labels : 각 툴을 이름과 아이콘으로 표

시합니다.

▶ View Icons And Descriptions : 각 툴을 이름과 아이콘,

그리고 툴에 대한 설명으로 표시합니다. 기본 설정이기도 합

니다.

▶ View Small Icons And Labels : 각 툴을 작은 아이콘과

이름으로 표시합니다.

그림 2-47 View Icons를

선택한 모습

Page 67: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 57

어떻게 설정하든 하단의 각 툴에 대한 자세한 설명이 나오므로 각 아이콘이 무엇을 의미하는지

쉽게 구분할 수 있습니다.

▶ Show Group Banners : 각 아이콘이 속하는 그룹에 따라 툴을 나눕니다. 아이폰 앱 개발

의 경우 Library - iPhone이란 그룹명으로 표시해서 구분해 주므로 반드시 체크해 둡니다.

기본적으로는 체크 표시가 안 되어 있습니다.

그림 2-48 Show Group Banners를 체크해서 아이폰 앱 개발용 툴을 쉽게 구분할 수 있다.

▶ New Group : 개발자가 자신만의 그룹을 만들어 툴들을 마음대로 넣을 수 있는 기능입니다.

툴을 넣는 방법은 드래그앤드롭입니다. 그룹명을 바꾸고 싶을 때는 그룹명을 더블클릭하

면 됩니다.

그림 2-49 나만의 그룹을 만들자!

Page 68: 강행돌파! 아이폰 & 아이패드 프로그래밍

58 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

▶ New Smart Group : 개발자가 원하는 조건을 입력하면 해당 조건에 맞는 툴을 알아서 찾

아와서 그룹화해 주는 툴입니다. 보통은 이 툴보다는 New Group 기능을 많이 사용하는

편입니다.

그림 2-50 New Smart Group 설정창

‘Category’(카테고리)에 ‘Contains Something Like’(다음과 비슷한 것을 포함하는)이라고 설정

한 후 ‘memory’라고 입력하면 아래 그림과 같이 메모리와 관련한 툴을 소개해 줍니다.

그림 2-51 그룹을 자동으로 생성해 준다. 전부 메모리와 관련된 툴이다.

지금까지 라이브러리의 커스터마이즈에 대해 알아봤습니다.

앞에서 정리한 라이브러리를 활용해 인스트루먼트 창에 원하는 툴을 드래그앤드롭하면 인스트

루먼트 창도 커스터마이즈해서 사용할 수 있습니다.

Page 69: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 59

그림 2-52 드래그앤드롭으로 인스트루먼트 툴을 원하는 대로 바꿔주자!

그렇다면 Xcode나 인터페이스 빌더처럼 툴바도 커스터마이즈할 수 있을 까요? 물론 됩니다. 커스

터마이즈 방식도 동일하고요. 다만 조금 특이하다고 할 만한 점은 커스터마이즈해서 추가할 수 있

는 기능들이 ‘Colors’라는 색상 파렛트를 보여주는 툴 이외에는 처음부터 툴바에 다 추가돼 있어

서 커스터마이즈할 여지가 없다는 것입니다.

그림 2-53 이미 처음부터 다 추가돼 있다.

Page 70: 강행돌파! 아이폰 & 아이패드 프로그래밍

60 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 2-54 유일하게 기본 툴바에서 빠져 있는 ‘Colors’를 실행하면 색상 파렛트가 나온다.

하지만 인스트루먼트에서 그리 쓸 일은 없는 기능이다.

툴바의 기능과 사용법은 다음부터 나오는 실전에서 자연히 익히면서 넘어가겠습니다. 이제 인

스트루먼트 툴의 커스터마이즈도 끝났습니다. 처음에 말씀드린 ‘Xcode’, ‘인터페이스빌더’ 그리고

‘인스트루먼트 툴’을 모두 살펴봤으니 이제 다음으로 넘어가 봅시다!

빨리 개발을 시작해 보고 싶다고요? 조금만 참아주세요. 이제 거의 다 왔습니다.

‘Hello World’라고 하는 첫 번째 애플리케이션을 만들어 보기 전에 다음 두 가지만 알아보고 넘

어 갑시다. 첫 번째는 흔히 탈옥이라고 하는 ‘Jail Break’, 두 번째는 iPhone OS가 설치돼 있고 앱스

토어의 앱들이 작동되는 세 가지 하드웨어인 ‘iPhone’, ‘iPod touch’ 그리고 ‘iPad’에 대해 먼저 살

펴봅시다!

Page 71: 강행돌파! 아이폰 & 아이패드 프로그래밍

02 개발 시작하기 l 61

Page 72: 강행돌파! 아이폰 & 아이패드 프로그래밍

iPho

ne &

iPad

Prog

ram

min

g

Page 73: 강행돌파! 아이폰 & 아이패드 프로그래밍

03Jail Break

3.1 Jail Break의 정의

요즘 인터넷 뉴스 기사나 커뮤니티에서 자주 화제가 되고 있는 아이폰의 ‘Jail Break’에 대해 알아

봅시다. ‘Jail Break’는 ‘탈옥’이라고 부르는데요, 왜 탈옥이라고 하는지, 또 번거롭게 탈옥을 하는

이유는 무엇인지 알아보겠습니다.

먼저 아이폰의 시스템에 대해 알아봅시다. 아이폰의 운영체제는 여러분이 잘 아는 바와 같이

iPhone OS입니다. 이름 그대로 정식 명칭도 iPhone OS입니다. 아이폰이 처음 발매될 당시에는

iPhone OS X 혹은 OS X iPhone이라고도 불린 적이 있으나 현재는 iPhone OS가 정식 명칭입니다.

다만, iPhone OS 4.0부터는 정식으로 iOS라고도 부릅니다.

iOS는 오픈소스 소프트웨어를 제작하지 않기로 유명하고 ‘폐쇄적’이라는 얘기를 듣는 애플사

가 만든 ‘오픈소스’ 유닉스 계열 운영체제 ‘다윈’(Darwin)에 기반을 두고 있습니다. 사실 애플사가

폐쇄적이라고 불리는 경우가 많기도 하지만 알고보면 좋은 오픈소스 자료도 공개하고 있습니다.

그림 3-1의 URL을 참고하기 바랍니다. 흔히 오픈소스라고는 하지만, 말만 오픈소스이지 소스코

드를 쉽게 볼 수 없고 소스를 사용하는 하드웨어에서 라이선스료를 꼬박꼬박 받는 경우도 볼 수

있는데, 이에 비하면 애플사는 ‘폐쇄적’이라는 비난에도 꽤 많은 것을 공개하고 있습니다.

Page 74: 강행돌파! 아이폰 & 아이패드 프로그래밍

64 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

그림 3-1 애플사의 오픈소스 공개 페이지(http://www.apple.com/opensource/).

유용한 시큐리티 툴인 openSSL을 비롯해 개발자에게 도움이 되는 소스를

친절하게 공개하고 있다(애플사가 관여하지 않은 프로젝트도 포함돼 있다).

이 다윈이라는 유닉스 계열 운영체제는 여러 가지 유닉스 또는 리눅스 운영체제에서 좋은 부

분만 따와 만든 종합적인 시스템입니다. 간단히 말하면 Mach 3.0 + FreeBSD + NetBSD + 기타

BSD 계열 OS이므로 기본적으로는 BSD 계열 운영체제와 크게 다르지 않습니다. 참고로 BSD

란 ‘Berkeley Software Distribution’의 약자로, 1970년대 미국 캘리포니아 대학교 버클리(UC

Berkeley)에서 개발, 배포한 유닉스 계열의 운영체제입니다. 이 BSD 운영체제의 가장 큰 장점 중 하

나가 ‘보안성’입니다. 다시 말해 바이러스, 해킹 등에 강하다는 것이죠. 그래서 BSD 계열 운영체제

중 하나인 FreeBSD는 야후!나 HotMail, 세이클럽 등의 운영체제로 채택되기도 했습니다. BSD 계

열 유닉스를 설정하고 사용하는 방법에 따라 달라지겠지만 필자도 현존하는 세계 최고 수준의 보

안 운영체제 가운데 하나라고 생각하고 있습니다. 하지만! 이 BSD 계열 유닉스에도 문제가 있었습

니다. 문제라기보다는 불편한 점이라고 할 수 있겠는데요. 바로! ‘일반 사용자’들이 사용하기에는

사용법이 너무 어렵다는 것이었습니다(이것이 블루스크린과 바이러스와 해킹, 그리고 가격으로

고민하는 하면서도 윈도우 시스템을 일반 사용자들이 써 온 이유이기도 하지요).

그렇지만 희망이 보이기 시작했습니다. 일반 사용자들이 사용하기에는 어려운 인터페이스를 가

진 BSD 유닉스에, 사용자 위주의 편리한 인터페이스 개발로 유명한 애플사의 손길이 닿기 시작한

것이었습니다. 그것은 그야말로 마법의 손길이었습니다. 세계 최고 수준의 개발자들이 모여 여러

Page 75: 강행돌파! 아이폰 & 아이패드 프로그래밍

03 Jail Break l 65

프로젝트를 거쳐, 결국 여러 종류의 BSD 유닉스들의 장점만을 살린 강력한 보안성과 기능을 탑재

한 다윈이라는 BSD계 유닉스를 탄생시켰습니다. 그후로 애플사는 지금까지 개발해 온 사용자 중

심의 인터페이스를 이 다윈에 결합시켜 마침내 Mac OS X이라는 엄청난 녀석을 개발 · 발표하기에

이릅니다.

그럼 Mac OS X의 탄생을 시간 순서에 따라 좀 더 정확하게 알아봅시다. 여기엔 애플사의 스티

브 잡스가 깊숙이 관여되어 있습니다.

1. 스티브 잡스가 애플을 떠나 NeXT COMPUTER란 회사를 설립 - 1985년

2. NeXT COMPUTER에서 BSD 유닉스 기반의 ‘NeXTSTEP’이란 운영체제를 개발, 발표

- 1989년

3. 애플이 NeXT COMPUTER를 인수하면서 스티브 잡스가 애플에 복귀 - 1996년

4. 애플은 1997 WWDC에서 랩소디(Rhapsody)라는 ‘NextSTEP’ 계열(또는 그 근간인 BSD

계열 유닉스)를 바탕으로 하는 운영체제를 발표(이 운영체제는 오직 개발자들에게만 공개

하는 약간 이상한 운영체제였습니다. 1998년 이후로 다음 버전이 나오지 않아 현재는 개발

이 중단된 상태라고 보아도 무방할 듯합니다). - 1997년

5. 랩소디의 소스를 그대로 사용해 또 다른 운영체제인 다윈(Darwin)을 개발, 발표(이처럼

한 프로젝트의 소스를 그대로 사용해 또 다른 프로젝트를 시작하는 것을 프로젝트 포크

(project fork)라고 합니다). - 2000년

6. 다윈 운영체제에 사용자 중심 인터페이스를 강화한 운영체제인 Mac OS X가 발매됨(서버용

운영체제인 Mac OS X Server는 1999년에 발표한 적이 있지만 일반 맥용 Mac OS X는 이때

처음 발매됐습니다). - 2001년

그런데 iPhone OS 설명하다가 말고 왜 뜬금 없이 Mac OS X를 설명하는지 궁금할 겁니다.

iPhone OS가 바로 이 Mac OS X에서 파생돼 나온 다윈 기반의 운영체제이기 때문입니다. 즉,

iPhone OS 의 역사는 Mac OS X의 역사와 떼려야 뗄 수 없는 깊은 관계를 갖고 있습니다. 자, 그럼

역사에 한 줄을 더 추가해 볼까요?

7. Mac OS X 기반의 아이폰 운영체제 iPhone OS가 Macworld Conference & Expo에서 발표

됨 - 2007년

Page 76: 강행돌파! 아이폰 & 아이패드 프로그래밍

66 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

결국 iPhone OS는 이렇듯 깊은 역사와 기술력에 바탕을 둔 운영체제이기에 최고의 보안과 성

능을 자랑할 수 있는 것입니다. 여타 다른 스마트폰을 사용해 봐도 스펙상으로는 아이폰과 비슷

하거나 오히려 아이폰을 능가하는데도 버벅거리거나, 에러가 나거나 사용감이 좋지 않은 이유도

여기에 있습니다. 하드웨어가 아무리 좋아도 이 ‘운영체제’라는 부분에서 너무나 차이가 나기 때

문이죠. 이렇게 성능이 좋은데도 iPhone OS가 필요로 하는 하드웨어 메모리는 고작 500MB 미

만입니다. 또 바이러스나 해킹의 위험도 거의 없는 정말 말 그대로 근본이 다른 ‘궁극’의 운영체제

이지요.

그런데 이 고마운 iPhone OS의 위대한 보안 체계를 해제시켜 스티브 잡스를 비롯한 많은 개발

자들의 노력을 물거품으로 만들고 어둠 속의 해커들에게 한 줄기 빛을 안겨주는 행위가 있습니다.

그것이 바로 그 이름도 유명한 ‘Jail Break’.....

그럼 먼저 Jail Break, 즉 탈옥이 정확히 어떤 행위를 뜻하는지 알아봅시다. Jail Break란 일반적

으로 ‘iPhone, iPod 혹은 iPad에 애플의 심의를 받지 않은 코드가 실행 가능하게 하는 모든 행위’

또는 ‘본래의 iPhone OS에서 접근이 제한된 부분을 임의로 변경해 보안을 해제하는 행위’를 뜻합

니다. Jail Break를 위한 방법을 연구하는 개발자들은 iPhone OS라는 ‘Jail(감옥)’ 보안을 해제해

‘탈출’한다는 의미로 ‘Jail Break(탈옥)’라는 이름을 붙였습니다.

기본적으로 iPhone OS에서는 애플의 심의를 받는 앱만을 설치해서 사용할 수 있습니다. 굳이

애플의 심의가 필요한 이유는 대체적으로 다음과 같습니다.

1. 설치하는 앱 자체에 다뤄지는 사용자 정보가 사용자의 동의 없이 특정 대상에게 전달되는

코드가 없는지 확인하기 위해

2. iPhone OS 자체에 해악을 끼칠 만한 소스코드가 없는지 확인하기 위해

3. 다른 앱에 저장돼 있는 사용자의 개인 정보를 악의적으로 복사해서 이용/전송하거나, 다른

앱 자체를 파괴/변경하는 코드가 있는지 확인하기 위해

4. 지나치게 선정적이거나, 폭력적이거나, 정치/상업적인 앱을 막기 위해

사실 기본적으로 2번과 3번은 Jail Break가 적용돼 있지 않는 이상은 iPhone OS 자체가 워낙 보

안이 철저해서 앱에서 시도하려고 해도 원천적으로 불가능합니다. 즉, iPhone OS 의 코어 부분은

앱에서 접근할 수 없게 차단돼 있으며 다른 앱에서 정보를 읽거나 앱에 정보를 쓰는 것도 가능하

지 않게 되어 있습니다. 하지만 1번은 앱 자체가 서버와의 통신이 허용돼 있으니 악의가 있다면 얼

마든지 서버에 (그리고 해커 등 개인 정보를 필요로 원하는 자들에게) 사용자의 개인 정보를 전송

Page 77: 강행돌파! 아이폰 & 아이패드 프로그래밍

03 Jail Break l 67

할 수 있습니다. 그러므로 애플사의 검열이 상당히 중요합니다. Jail Break가 적용되지 않은 아이폰

에서 유일하게 개인 정보를 유출하는 구멍이 될 수 있기 때문입니다.

사실 사용자들이 Jail Break를 하는 이유 중 하나가 4번이라고 할 수 있습니다. 하지만 임산부

등 보호받아야 할 분들을 위해 애플에서는 검열을 해서 안심하고 앱을 다운로드해서 사용할 수

있게 해줍니다.

그리고 결정적으로 Jail Break를 하는 가장 큰 이유는 역시 ‘유료’ 앱을 ‘무료’로 설치할 수 있기

때문입니다. 사용자 입장에서는 더할 나위 없이 매력적인 부분이겠지만 앱 개발자나 애플 입장에

서는 치명적인 부분이라 할 수 있지요.

그림 3-2 Jail Break를 적용한 아이폰의 스프링보드

그림 3-2는 Jail Break를 적용한 아이폰의 스프링보드입니다. 참고로 스프링보드란 아이폰의 메

인 화면을 뜻합니다. 기본 아이콘도 변경돼 있고, 한 페이지에 25개의 아이콘이 들어갈 수 있게 되

어 있습니다. 가장 밑에 자주 쓰는 앱도 기본 4개에서 5개로 변경돼 있습니다. 그리고 Jail Break가

적용된 아이폰의 앱스토어라고도 할 수 있는 ‘Cydia’의 모습도 볼 수 있습니다. 여기엔 여러분의

주소록과 최근 통화 목록을 몰래 타인에게 전송하는 앱도 게임 등으로 가면을 쓰고 등록되어 있

을 수 있습니다. 물론 이에 따른 피해는 그 누구도 보상해 주지 않습니다.

개발자 입장에서도 Jail Break가 적용된 아이폰용 앱을 개발할 때 이제껏 제한 때문에 사용하

지 못했던 프레임워크(private framework라고 불립니다)도 사용할 수 있기 때문에 좀 더 멋진 앱

을 쉽게 개발 할 수 있는 것이 사실입니다. 하지만 될 수 있으면 iPhone OS에서 부과한 제약 속에

서도 뛰어난 성능을 보이는 앱을 개발하는 것이 개발자의 진정한 로망이 아닐까요?

Page 78: 강행돌파! 아이폰 & 아이패드 프로그래밍

68 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

3.2 Jail Break가 지닌 보안상의 엄청난 위험성

이제까지 Jail Break를 적용해서 좋아지는 점(또는 달라지는 점)을 알아봤습니다만, 그럼 Jail

Break의 단점은 무엇이 있을까요?

먼저, 애플사의 보증/수리 대상에서 제외된다는 점입니다. 즉, Jail Break를 적용한 상태에서 아

이폰을 사용하다가 아이폰이 이상해져서 수리 또는 교환을 요청해도 ‘KIN’이란 대답이 돌아올

뿐입니다.

또, 아이폰에 현재까지 발견되지 않은 ‘바이러스’가 Jail Break가 적용된 아이폰에서는 활동이

가능해집니다. 즉, 기존에는 접근이 불가능했던 아이폰의 코어 부분이나 다른 앱에 접근/변경이

가능하게 되어 기존의 ‘바이러스’라고 불리던 악성 코드가 하던 일들이 얼마든지 가능해집니다.

유심히 살펴보면 아이폰의 보안 관련 뉴스에서 아이폰의 악성코드가 몇 개 발견됐다고 발표돼도

언제나 ‘Jail Break가 적용된 아이폰에서’라는 단서가 따라다닙니다. 실제로 2009년 11월, iPhone

역사상 가장 처음으로 호주의 Australian technical college 소속의 Ashley Towns라는 당시 21살

의 학생에 의해 아이폰의 웜바이러스가 개발됐습니다. 물론 Jail Break가 적용된 아이폰에서만 활

동할 수 있는 웜바이러스입니다(이 개발자는 그 뒤에 Mogeneration이라는 앱 개발사에 고용됐습

니다).

더욱 위험한 점은 앞서 언급한 바 대로 ‘개인정보’의 유출입니다. 즉 애플의 심의 과정 없이

Cydia 등에 등록된 앱은 겉보기에는 화려할지 몰라도 등록된 앱이 실제로는 무슨 동작을 하는지

정확히 알 수가 없습니다. 검열을 피한 게임 앱을 즐기는 동안, 스테이지1을 클리어하면 기념으로

스카이프 앱에 등록된 아이디와 비밀번호를 누군가에게 보내 주고 있고, 스테이지 2를 클리어하

면 기념으로 어제 친구랑 주고받은 문자 기록을 어딘가에 보내주고 있어도 사용자는 스테이지를

클리어한 기쁨으로 웃고 있을 뿐입니다.

그림 3-3 Jail Break가 적용된 아이폰의 상징 - 파인애플

그림 3-3은 Jail Break가 적용된 아이폰을 상징하는 아이콘입니다. 애플사의 사과처럼 한 입 베어

먹은 자국이 있네요. 파인애플보다 겉보기에 화려한 독버섯 등으로 상징을 바꾸는 것은 어떨까요?

Page 79: 강행돌파! 아이폰 & 아이패드 프로그래밍

03 Jail Break l 69

그림 3-4 Jail Break가 적용된 아이폰을 켤 때 나오는 파인애플

JailBreak 아이폰의 상징인 ‘Pineapple’은 Pine + Apple로 나눌 수 있는데 Pine의 뜻을 사전에

서 찾아보면 솔나무란 뜻과 함께, ‘(사람이 죽거나 떠난 후) 매우 슬퍼하다‘라는 무시무시한 뜻이

있습니다. 왜 하필 파인애플을 초기화면에 심어둔 것일까요?

Jail Break된 아이폰의 바이러스나 스파이웨어를 만드는 것은 어떤 의미에서 그리 어려운 일이

아닙니다. 간단한 방식 중 하나로는 아이폰의 디렉토리 구조 등을 확인해주는 코드 등으로 구조를

파악한 후에 개인 정보가 있는 파일을 조사해서, 복사한 후 원하는 곳으로 보내기만 하면 됩니다.

그렇기에 더욱 더 Jail Break가 적용된 아이폰은 보안상 위험하다고밖에 할 수 없습니다. Jail Break

가 적용되지 않은 아이폰에서는 이 같은 금단의 구역은 숨겨져 있어서 보이지 않거나 보여도 접근

이 차단됩니다. 대신 스프링보드가 아주 화려하게 커스터마이즈되지 않는다든가 하는 불편함이

있기도 하지만 ‘보안과 안정성’이란 대의를 위해 이런 불편함 정도는 감수하는 것이 어떨까요?

그림 3-5 아이폰의 디렉토리 구조를 콘솔에 찍어보기

필자도 iPhone의 내부 구조에는 상당히 관심이 있어서 아이폰의 내부 구조를 보여주는 앱을 만

들어 보기도 했습니다. 그림 3-5와 같이 실행 중인 앱은 Documents(설정 파일과 DB 파일 등이 저

장되는 곳), Library(프레임워크가 저장되는 곳), dir_test.app(앱의 클래스 등이 컴파일되어 패키

지화된 파일), tmp(임시 폴더) 등에는 접근할 수 있어서 확인이 가능하지만, 다른 앱의 경우에는

폴더가 존재하는 것까지만 확인이 될 뿐 내용은 보이지 않습니다. 또한 보다시피 앱이 인스톨될 때

실제 앱의 이름과 전혀 관계 없는 폴더에 설치되어 무슨 앱이 설치돼 있는지도 확인이 불가능합니

Page 80: 강행돌파! 아이폰 & 아이패드 프로그래밍

70 l 강행돌파! 입문자를 위한 아이폰 & 아이패드 앱 개발

다. 이것을 우리는 ‘보안’이라고 부릅니다.

그럼 Jail Break는 합법일까요, 불법일까요? 아직까지도 논란이 되고 있기는 하지만 엄밀하게 말

하면 Jail Break 자체는 아직 합법으로 간주하는 경향이 우세한 듯합니다. 해외에서 들려오는 여

러 뉴스에서도 아직 합법으로 간주되고 있는 듯하며, 아무리 구입할 때 받은 계약서나 동의서를

봐도 iPhone OS의 변경 혹은 다른 OS를 설치하지 못하게 하는 조항은 찾을 수 없습니다. 물론 필

자가 못 찾았을 수도 있지만요. 다만 iPhone 모델의 ‘iPhone 소프트웨어 사용권 계약 단일 사용권’

에서 다음과 같은 구절을 확인할 수 있습니다.

“책임 제한 해당 법률로 금지되지 않는 범위 내에서, Apple은 iPhone 소프트웨어와 본 서

비스 및 iPhone 소프트웨어와 관련된 제3자 소프트웨어나 애플리케이션의 사용이나 사용

불능으로 인하여 발생되거나 그와 관련이 있거나 상관없이, 나아가 어떠한 이유로 초래된

것인지와도 상관없이, 기대이익상실의 손해, 데이터의 변조나 분실, 데이터의 전송이나 수

취실패, 영업의 중단 또는 기타 상업적인 손해와 멸실 등을 포함하여 인사사고나 어떠한

형태의 우연적인, 특수한, 간접적이고 결과적인 손해이든 그 손해에 대하여 책임을 지지

아니합니다.”

즉, Jail Break를 적용하고 나서 생긴 어떤 문제점도 애플에서는 아무 책임을 지지 않는다는 것입

니다. 그리고 JailBreak를 적용한 뒤 앱스토어 이외의 곳에서 유료 앱을 다운로드해서 무료로 사용

하는 것은 불법입니다. 간단히 말해서, 제작자에게 대금을 지불하지 않고 그냥 복사해 쓰는 것이

므로 저작권 등 여러 가지 부분에서 법에 저촉된다고 보시면 됩니다. 예전에 그 유명한 ‘이찬진’씨

가 개발한 한글이라는 좋은 소프트웨어도 불법 복제에 의해 쇠락의 길을 걸은 것을 생각하면 이

러한 Jail Break에 이은 유료 앱 다운로드라는 이단 콤보는 전체적인 앱 시장의 질적 향상을 위해

자제했으면 하는 바람입니다.