개정판 2장

간이 편집본 PDF(내용은 동일합니다.)

 

2 설치 개발 환경 구축

개발자에게는 효율적인 개발 환경을 갖추는 일이 가장 중요하다. 실력이 같은 개발자라도 메모장을 쓰는 자바 개발자와 이클립스를 쓰는 자바 개발자의 개발 효율은 천지 차이다. 2장에서는 아이폰 애플리케이션을 개발하기 위해 갖추어야 할 개발 환경에 대해서 설명한다. 개발 환경을 구축한 후에는 직접 애플리케이션을 하나 만들어 볼 것이다.

2.1 개발에 필요한 시스템

2-000.jpg

<그림 2-1> 이 책 집필에 사용한 iMac

안타깝게도 iOS SDK를 이용해서 개발하려면 애플 매킨토시 시스템이 꼭 필요하다. 사실 이 부분이 아이폰 애플리케이션을 개발하려는 개발자에게 가장 큰 장벽이다.

이 책을 계속 공부하다 보면 아이폰 개발이 맥 OS 애플리케이션 개발과 상당히 비슷하고, 개발 환경도 맥 OS 시스템에 상당히 의존한다는 사실을 느끼게 될 것이다. 따라서 애플이 마음먹고 MS 윈도에서 아이폰 개발을 할 수 있는 툴을 제공할 수도 있겠지만, 그렇더라도 상당히 제한적일 수밖에 없을 것이다. 또한 애플이 애써 그런 수고를 할 것 같지도 않다. 이는 애플만의 고집이라고도 할 수 있는데, 2001년에 아이팟이 처음 발표되었을 때도 오직 매킨토시에서만 이용할 수 있었음을 상기하면 감이 올 것이다.

2.1.1. 개발에 필요한 시스템 사양

iOS SDK 4.2를 기준으로 했을 때 필요한 시스템 최소 사양은 다음과 같다.

  • OS X 스노 레오파드 10.6.4 이상

  • 최신 버전의 아이튠

  • 인텔 CPU 기반 매킨토시 시스템

  • 10기가바이트 이상의 하드디스크

  • 아이폰 / 아이팟 터치/ 아이패드 기기 (선택사항)

매킨토시 시스템에는 크게 PowerPC 기반 시스템과 인텔CPU 기반 시스템이 있다. 공식적으로 iOS SDK는 인텔 기반 매킨토시에서만 동작한다. 그리고 맥 OS도 최신 버전인 스노 레오파드 10.6.4 이상이어야 함을 주의하자. 아이폰 개발시에는 시스템을 항상 최신 버전으로 유지하는 것이 좋다.

 

OS X는 ‘맥 오에스 텐’ 이라고 읽는다. 코드명은 레오파드(Leopard).OS 는 지속적으로 고양이과 동물 이름을 코드명으로 사용해 왔다. 10.6 버전이 스노 레오파드이고, 10.5 가 레오파드, 그 이전 버전인 10.4는 타이거, 10.3은 팬서, 10.2는 재규어를 코드명으로 사용했다. 2011년 여름에는 새로운 맥 OS인 라이언(Lion)이 정식으로 발매된다.OS X 라이언은 아이폰의 앱 스토어를 데스크탑에 옮기는 도전을 감행했다.

 

2.2. iOS SDK 설치

아이폰 애플리케이션을 개발하기 위해서는 가장 먼저 iOS SDK를 다운받아서 설치해야 한다. 20083월에 처음 1.0 버전으로 공개되었던 iOS SDK20087월에 정식으로 공개됐다. 그 이후로 버전 업을 계속해서 2009년에는 3.0 그리고2010년 여름에는 4.0이 공개됐다. iOS SDK는 애플 홈페이지에서 무료로 다운받을 수 있다.

 

아이폰 개발자 웹페이지 주소는 http://developer.apple.com/iphone/이다.

 

2-001.jpg

<그림 2-2> 애플 아이폰 개발자 홈페이지

애플 홈페이지에서 SDK를 다운받으려면 먼저 회원 가입을 해야 한다. 회원 등록을 마치면 그림 2-2와 같이 아이폰 개발자 페이지에 접근할 수 있다. iOS SDK로 개발하는 데 필요한 거의 모든 정보를 이곳에서 얻을 수 있다. 개발자 홈페이지는 크게 다음 항목으로 구성된다(아쉽게도 모든 내용은 영어로만 제공된다).

  • Getting Started Videos

    개발을 처음 시작할 때 도움이 될 만한 동영상 강의를 볼 수 있다. 여기서는 iOS SDK 소개, 개발 툴에 대한 설명, 그래픽과 미디어, 아이폰 시스템 자원들에 대한 설명 등 거의 대부분의 주제를 다룬다.

  • Getting Started Documents

    처음 시작하는 입문자가 참고할 문서를 주제별로 정리해서 보여준다. 예를 들어 오디오와 비디오를 사용하고 싶은데 어디서부터 시작해야 할지 막막할 때 이곳을 참고하면 된다.

  • iPhone Reference Library개발 관련 문서들이 모두 정리되어 있다. 릴리스 노트부터 개발 가이드, Q&A 모음 등 모든 자료를 검색해서 참고할 수 있다.
  • iAd JS Reference Library

    iAd 광고 개발을 위한 자료를 볼 수 있다.

  • Coding How-To’s

    주제별로 자주 사용되는 코드를 설명한다. 예를 들어 텍스트 문자열을 화면에 그리는 코드, 그래디언트(Gradient) 효과를 주는 방법 등을 참조할 수 있다.

  • Sample Code

    예제 코드를 다운받을 수 있다. 각 주제를 최대한 활용할 수 있는 뛰어난 예제가 많다.

  • Apple Developer Forums (유료)

    개발자를 위한 문답 형식의 게시판이다. 애플 엔지니어가 직접 답변을 달아주기도 한다. 개발자 프로그램에 유료로 등록한 개발자만이 접근할 수 있다.

  • Featured Content

    꼭 읽어야 할 주요 문서 목록을 보여준다. 새로운 SDK가 릴리즈 되거나, 새로운 기능이 추가될 때 꼭 읽어야 할 항목들도 여기서 보여준다.

  • iOS Provisioning Portal (유료)

    개발자 프로그램에 가입한 경우 개발에 사용할 디바이스를 등록하고 인증서를 관리할 수 있는 메뉴를 제공한다. 15장에서 자세히 설명하겠다.

  • iTunes Connect (유료)

    앱스토어에 애플리케이션을 등록하거나 판매를 중지하는 등 프로그램 판매와 관련된 작업을 처리할 수 있다. 또한 판매량 통계를 확인할 수 있다.

  • Developer Support Center (유료)

    아이폰 개발자 프로그램에 관련된 세부 정보 및 자주 묻는 질문을 참고할 수 있다.

 

개발을 진행하면서 이 사이트를 가장 많이 들러야 할 것이기 때문에 꼭 한번 둘러보고 어디에 어떤 자료가 있는지 익혀 두자.

2.2.1 iOS SDK 설치하기

홈페이지에서 Downloads를 선택한 후 ‘Xcode 3.2.4 and iOS SDK 4.1’과 같은 링크를 선택하면 확장자가 DMG인 파일을 다운받을 수 있다. DMG 파일은 맥 OS에서 실제 디스크 이미지로 취급된다. MS윈도에 익숙한 개발자라면 많이 알려진 형식인ISO를 떠올리면 된다.OS에서 이 파일을 실행시키면 새로운 디스크로 마운트된다. 마운트되면 그림 2-3과 같은 창이 나타난다.

Figure3.png

<그림 2-3> 마운트된 SDK

화면의 가운데 항목인 iPhone SDK 아이콘을 실행하자. 그러면 설치 프로그램이 실행된다. 라이선스 내용을 확인하는 단계를 거친 후에 설치할 항목을 선택하는 화면이 나타난다. (그림 2-4)

Figure4.png

<그림 2-4> 설치할 항목 선택 기본값으로 두자

기본값에서 따로 변경할 내용은 없다.선택되지 않은 두 가지 항목은 이전 버전의 맥 OS X 애플리케이션을 개발할 수 있게 지원하는 옵션(Mac OS X 10.3.9 Support)WebObject를 개발하기 위한 툴을 설치하는 옵션이다. 이 항목들은 이 책에서 다루지 않기 때문에 선택할 필요가 없다. Continue를 누르면 설치가 진행된다. 그림 2-5와 같은 화면이 나타나면 설치가 완료된 것이다.

2-004.jpg

<그림 2-5> 설치 완료

iOS SDK는 기본값으로 /Developer 위치에 설치된다. 특히 /Developer/Platforms/iPhoneOS.platform/Developer/SKDs/iPhoneOS4.1.sdk/System/Library/Frameworks 디렉터리는 프로젝트에 추가할 프레임워크를 검색할 때 자주 참조하는 디렉터리이니 기억해 두자. (그림 2-6)

참고로 Xcode, 인스트루먼츠 등의 툴은/Developer/Applications에 위치한다. 아이폰 시뮬레이터는 /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator에 위치한다.

Figure6.png

<그림 2-6> 프레임워크 디렉터리

여기까지 설치를 마쳤으니, 이제부터 개발을 진행하는 데 가장 많이 사용하게 될 개발 툴을 살펴보자.

2.3 Xcode

MS 윈도 개발자에게 비주얼 스튜디오가 있고, 자바 개발자에게 이클립스가 있다면 아이폰과 맥 개발자에게는 Xcode가 있다. 전에도 잠깐 언급했지만 Xcode는 아이폰은 물론이고 맥 OS X 애플리케이션 개발 환경이기도 하다. iOS SDK에는 Xcode 외에도 여러 개발 툴이 포함되어 있는데, 이들을 모두 Xcode 환경이라고 부르기도 한다. 그만큼 대표적인 툴이 Xcode. Xcode의 기본 기능을 요약하면 다음과 같다.

  • 소스 코드 분석

    코드 심볼을 인식해서 쉽게 찾을 수 있게 해 준다.

  • 아이폰 시뮬레이터

    외부 툴인 아이폰 시뮬레이터로 실제 장치 없이도 애플리케이션을 테스트해 볼 수 있다.

  • 소스 코드 편집

    편집기가 포함되어 있어 손쉽게 코드를 작성할 수 있다.

  • 인터페이스 디자인

    외부 툴인 인터페이스 빌더와 연동해서 인터페이스를 디자인하고 코드와 연결할 있다.

  • 빌드

    프로젝트를 손쉽게 빌드할 수 있고, 사용자 환경에 맞게 빌드를 구성할 수 있다.

  • 성능 분석

    메모리 누수나 성능을 분석할 수 있는 인스트루먼츠(Instruments)와 샤크(Shark) 등의 툴과 연계할 수 있다.

  • 소스 형상 관리

    소스 형상 관리 기능이 툴에 통합되어 있기 때문에, 여러 개발자가 동시에 작업을 진행할 때 유용하다.

  • 디버깅

    소스 코드와 동기화해서 디버깅을 진행할 수 있다. 또한 조사식(Expression), 조건부 브레이크 포인트, 와치 포인트 등의 기본적인 디버깅 기능을 모두 지원한다.

  • 프로퍼티 리스트 편집

    프로퍼티 리스트를 쉽게 편집할 수 있는 편집기가 내장되어 있다.

  • 리팩터링

    자체적으로 리팩터링 기능을 제공한다. 코드를 읽기 쉽고, 관리하기 쉽게 하게 만드는 코드 정리 기술인 코드에 적용할 수 있다.

이제 Xcode를 실행시켜 보자. 프로그램의 정확한 위치는 /Developer/Applications/Xcode. 이 파일을 실행시키면 환영한다는 안내 창이 나타난다. 일단 이 창은 닫고, 메뉴에서 File – New Project 메뉴를 선택해서 새로운 프로젝트를 하나 만들자. 그림 2-7과 같이 새로운 프로젝트를 생성하는 창이 나타난다.

2.3.1 프로젝트 템플릿

Figure7.png

<그림 2-7> 프로젝트 생성

그림 2-7을 보면 프로젝트로 선택할 수 있는 템플릿이 몇 가지 제공되는데,2-1에서 정리해 보았다.

프로젝트 설명
2-007.jpg 내비게이션 컨트롤러를 기반으로 하는 프로젝트. 계층 구조로 더 깊은 단계로 들어갔다가 나올 수 있는 형태의 프로그램을 만들 수 있다. 그림 2-8과 같이 Setting 창에서 General로 한 단계 더 들어간 후 다시 About을 눌러서 가장 깊은 단계까지 들어갔다가도, 다시 이전 단계로 이동할 수 있는 형태다. (그림2-8)
2-008.jpg 게임 등을 위해서 3D 엔진인 OpenGL ES를 사용하는 애플리케이션을 만들 수 있다.
2-009.jpg 아이패드 만을 위한 형태이다. 화면을 두개로 분할해서 왼편에는 주요 항목을 선택할 수 있고, 오른편에 그 주요 항목의 세부 정보를 보여주는 형태의 애플리케이션을 만들 수 있다. 아이패드를 가로로 두면 두 뷰를 모두 볼 수 있지만, 세로로 두면 세부 뷰(Detail View)만 보이는 점이 특징이다.
2-010.jpg 아이폰 시계 애플리케이션처럼 탭 바 기반 애플리케이션을 개발할 수 있다(그림 2-9).
2-011.jpg 날씨나 증권 애플리케이션과 같은 위짓 형태 애플리케이션을 만들 수 있다. 그림 2-9와 같이 창 하나에서 필요한 정보를 모두 보여주는 형태의 프로그램이다. 필요한 설정은 화면이 뒤집어지면서 뒷면에서 이루어진다. 사용자 입력을 거의 받을 필요가 없는 날씨 등의 정보를 보여주는데 적합하다(그림 2-10).
2-012.jpg 윈도우(Window)에 뷰(View)가 하나 추가된 기본 형태를 갖는 프로젝트를 만들어 준다.
2-013.jpg 뷰도 없이 윈도우 하나만 존재하는 가장 기본적인 형태다. 스스로 뷰를 추가하는 등의 작업을 해야 한다.

< 2-1> 프로젝트 템플릿

2-014.jpg

<그림 2-8> 내비게이션 기반 애플리케이션

2-015.jpg

<그림 2-9> 탭 기반 애플리케이션

2-016.jpg

<그림 2-10> 유틸리티 형태

여기서는 일단 View-Based Application을 선택하자. 그리고 원하는 프로젝트 이름을 입력하면 그림 2-11과 같이 새로운 프로젝트 창이 생성된다. 이 책에서는 Hello를 프로젝트 이름으로 입력했다.

2.3.2 Xcode 화면 구성

간략하게 Xcode 프로젝트 창이 어떻게 구성되는지 살펴보자. 그림 2-11을 보면 프로젝트 창은 크게 네 개 영역으로 나눌 수 있다.

  • 툴 바

    코드를 빌드하고 실행시키는 등 가장 많이 사용되는 명령이 위치한다. 하지만 키보드 단축키를 이용하는 것이 더 빠르다. 단축키는 부록을 참고하자.

  • 그룹 및 파일 목록

    프로젝트를 구성하는 파일과 프레임워크 라이브러리를 정리해서 보여준다. 여기서 프로젝트에 파일을 추가하거나 제거하는 등의 작업도 가능하다.

  • 세부 항목

    그룹 및 파일 목록에서 선택한 그룹에 포함되어 있는 항목을 자세히 표시해 준다. 이 세부 항목을 선택하면 편집기로 내용을 편집할 수 있다. 세부 항목에서 확인 가능한 정보는 컴파일 후 바이너리 코드의 크기, 컴파일 상태, 빌드 시에 발생한 에러 및 경고 개수 등이다.

  • 편집기

    소스 코드와 기타 텍스트 파일을 편집할 수 있는 창이다. 주로 이 창에서 소스 코드를 편집한다. 다른 방법으로 파일 목록의 파일을 더블 클릭하면 새로운 창에서 편집할 수도 있다.

2-017.jpg

<그림 2-11> 프로젝트 창

2.4 인터페이스 빌더

인터페이스 빌더(Interface Builder)는 말 그대로 사용자 인터페이스를 디자인하는 툴이다. 윈도우와 뷰 그리고 뷰를 구성하는 여러 구성 요소를 배치시키고, 속성을 편집할 수 있다. 이전에 설명한 프로젝트 창의 그룹 및 파일 목록 창에서 Resource 그룹을 보자. HelloViewController.xib 파일이 있다. 이 파일을 더블 클릭하면 그림 2-12와 같이 네 개의 창으로 구성된 인터페이스 빌더가 실행된다. (만약 창이 다 보이지 않는다면 Tool->Library 메뉴, Tool->Inspecter 메뉴 그리고 Window->Document 메뉴를 직접 선택하자.)

2-018.jpg

<그림 2-12> 인터페이스 빌더 실행모습

그림 2-12에서 HelloViewController.xib라는 이름을 갖는 문서 창을 보자. 이 창에서는 XIB 파일에 포함되는 뷰, 컨트롤러 등의 유저 인터페이스 객체를 확인할 수 있다. 즉 인터페이스 빌더는 XIB 파일 편집기 라고 보면 된다. XIB안에는 화면에 보이는 객체는 물론이고, 일단 객체(Cocoa Objects)도 포함 시킬 수 있다. 인터페이스 빌더는 앞으로 자주 사용할 테니, 각 창의 기능을 정확하게 짚고 넘어가는 것이 좋다. 주로 사용하게 될 기능은 다음 네 가지다.

  • 인스펙터 (Inspector)

  • 라이브러리 (Library)

  • 문서 창 (Document)

  • 연결 패널 (Connection panel)

 

간단히 각각의 기능을 알아보자.

2.4.1 인스펙터

Figure13.png

<그림 2-13> 인스펙터 창의 4가지 탭

인스펙터는 현재 선택된 객체의 속성을 편집하는데 사용된다. 다음 네 개의 탭으로 구성된다.

 

  • 속성 창

    첫 번째 탭은 속성 창(Attribute)으로 선택한 컨트롤의 속성을 편집할 수 있다. 예를 들어 버튼의 배경색을 설정하거나, 이미지 뷰의 배경 그림을 선택하는 등의 작업을 할 수 있다.

  • 연결 창

    객체와 객체, 액션과 이벤트를 연결할 수 있다. 아웃렛을 연결하거나, 버튼이나 뷰에서 발생하는 이벤트를 알맞은 핸들러로 연결하는데 사용된다. 뒤에서 설명할 연결 패널과 같은 역할을 한다.

  • 크기 조절

    사용자가 아이폰을 가로로 좋으면 일반적으로 현재 화면도 가로형에 맞게 변환되며, 자동으로 크기도 조절되는 것을 봤을 것이다. 이 탭에서는 화면의 형태가 변함에 따라 각각의 요소들의 크기와 위치를 자동으로 변경시키도록 설정할 수 있다. 뒤에서 실습해 본다.

  • 아이덴티티(Identity)

    현재 선택된 객체의 클래스 명을 확인할 수 있다. 또한 시작 장애우를 위한 문자 및 소리 정보를 설정할 수 있다.

 

2.4.2 라이브러리

XIB 문서에 추가할 수 있는 객체를 모두 보여준다. 화면에 보이는 컨트롤이나 뷰는 물론이고 보이지 않는 일반 객체도 추가할 수 있다.

Figure14.png

<그림 2-14> 라이브러리

문서에 추가할 객체를 선택한 후 마우스로 문서 창이나 화면에 끌어다 놓으면 객체가 새롭게 추가된다. 여기에는 화면을 이루는 뷰는 물론이고 NSObject를 상속받은 일반 객체도 추가할 수 있다.

2.4.3 문서

Figure15.png

<그림 2-15> 문서 창

문서 창은 작업 중인 XIB 파일에 포함된 모든 객체를 계층화해서 보여준다. Files OwnerXIB 파일로 생성되는 최상위 객체를 가리킨다. 그림 2-15를 보면 HelloViewController 클래스가 최상위 객체인 것을 알 수 있다. First Responder는 현재 화면의 최상위에 위치해서 사용자의 이벤트를 받게 되는 객체를 가리키는 가상 객체다. Files Owner가 사용하거나 포함할 모든 객체를 이 창에서 관리하고 추가할 수 있다.

2.4.4 연결 패널

마지막으로 연결 패널을 알아보자. 연결 패널은 그림 2-16처럼 어떤 객체를 선택하고 마우스 오른쪽 버튼을 누르면 동적으로 보이는 창이다.

2-022.jpg

<그림 2-16> 연결 패널

연결 패널은 이름에서도 알 수 있듯이 객체와 객체 또는 이벤트와 액션을 연결하는데 사용된다. 연결 패널은 아웃렛이나 이벤트 핸들러, 또는 델리게이트를 서로 연결하는데 사용된다. (참고로 방금 전에 본 인스펙터의 연결 창에서도 같은 일을 할 수 있다.)

인터페이스 빌더와 Xcode는 서로 긴밀하게 연결되어 있어서Xcode에서 코드를 수정하면 곧바로 인터페이스 빌더에도 반영 된다. 또한 인터페이스 빌더는 구성한 인터페이스를 외부 클래스 파일로 내보내는 기능도 갖고 있다.

2.5 도움말 접근하기

효율적인 개발 환경에서 가장 중요한 요소는 바로 도움말이다. 리눅스/유닉스 개발자라면 반드시 필요한 것이 man 페이지다. 또한 MSDN없는 윈도 개발자는 상상할 수 없다. 아무리 실력이 뛰어나고 머리가 좋은 개발자라 하더라도 개발에 필요한 API와 프로그래밍 기법을 모두 기억할 수는 없다. 그렇기 때문에 도움말에 빨리 접근해서 필요한 정보를 찾을 수 있는 환경이 꼭 필요하다. Xcode 개발 환경은 도움말에 접근할 수 있는 두 가지 기능을 지원한다.

 

  • 빠른 도움말(Quick Help)

    간략하게 API 용법을 참고할 수 있는데, 편집기에서 커서의 위치에 따라 자동으로 문맥을 감지해서 검색한다.

  • 개발자 문서 (Developer Documentation)

    시스템에 설치되어 있는 도움말을 검색하고 참조할 수 있다.

 

2.5.1. 빠른 도움말

빠른 도움말(Quick Help)의 가장 큰 의미는 바로 소스 코드를 편집하는 상태에서 동적으로 도움말을 볼 수 있다는 점이다. 간편하게 참고하는 데는 도움이 될 수 있지만, 상세한 설명은 개발자 문서를 봐야한다.

Xcode를 실행하고 Help 메뉴에서 Quick Help를 누르거나 Control + Command + ? 단축키를 누르면 그림 2-17과 같은 창이 나타난다.

Figure17.png

<그림 2-17> 빠른 도움말

소스 코드 창 옆에 위치하기 때문에, 소스 코드를 편집하면서 같이 사용할 수 있다. 그림 2-17은 소스 코드 상에서addSubView 메서드를 선택했을 때의 모습이다. 메서드의 역할과 관련 예제, 그리고 사용 가능한 iOS SDK버전 등을 확인할 수 있다.

이 책은 C 함수를 함수라고 부르고, Objective-C 클래스의 함수를 메서드라고 구분해서 부르겠다. 그리고 Objective-C 객체에 메서드를 호출하는 과정은 ‘객체에 메시지를 보낸다’라고 표현하는 것이 맞지만, 편의상 메서드를 호출한다는 표현을 사용했다.

 

2.5.2. 개발자문서

개발자 문서는 개발을 진행하면서 가장 많이 참고 할 텐데, 메뉴에서 Help -> Developer Documentation을 선택하면 볼 수 있다. 단축키는 Option(Alt) + Command + ?를 누르면 된다.

도움말 창이 이미 실행되어 있을 때 검색어를 입력하는 상자로 이동하려면 같은 단축키 Option(Alt) + Command + ?를 누르면 된다. 이 단축키를 활용하면 검색어를 입력할 때마다 마우스로 매번 검색어 입력 상자를 선택하지 않아도 된다.

도움말 창은 그림 2-18과 같은 화면으로 구성되어 있다.

Figure18.png

<그림 2-18> 도움말 창

화면 왼편에 있는 항목은 검색된 결과를 보여준다. 가장 연관성이 높은 항목이 위에 위치한다. 가장 먼저 API 즉 메서드 목록에서 일치하는 이름을 위에 보여준다. 그 후에 전체 문서에서 해당 내용을 설명하고 있는 문서를 찾아서 보여준다. 위 경우 addSubView을 검색했고 이름이 일치하는 메서드 두 개를 위에 보여 주고 관련 문서가 그 이후에 나타나는 것을 알 수 있다.

툴바에서는 검색 방법과 검색 대상을 지정할 수 있다. 기본적인 검색을 위해서는 단순히 검색어 입력창에 검색할 단어를 입력하면 된다. 하지만 검색 대상이 너무 많거나, 불필요한 검색 결과가 많다면 다음과 같이 검색할 대상을 선택해서 검색 범위를 좁혀야 한다.

맨 왼 편의 Contain / Prefix / Exact 는 각각 단어를 검색할 때 그 단어가 포함된 모든 항목을 검색할지, 그 단어로 시작하는 항목을 검색할지 또는 정확히 일치하는 경우만 검색할 지를 결정한다.

그 다음에는 검색에 사용할 문서 세트를 선택할 수 있는데, 설치된 모든 문서에서 검색하거나, 선택된 세트(예를 들어 iOS 4.1 문서)에서만검색하게 할 수 있다. 이는 맥 OS X를 위한 API를 검색 대상에서 제외하고 싶을 때 유용한다. 이전 iOS SDK 문서를 참고하고 싶다면 설정 메뉴에 들어가서 문서 세트를 추가할 수 있다. Command + , 키를 눌러 설정(Preference)에 들어간 후 맨 뒤의 Documentation 탭을 보면 현재 사용되는 문서 세트를 볼 수 있고, 다운로드 되지 않은 세트를 받을 수도 있다 (그림 2-20참고).

그 다음으로 그림 2-19의 All Languages 항목을 눌러 대상 언어를 선택할 수 있다. Objective-C를 선택하면Objective-C에 해당하는 내용만, C를 선택하면C 언어에 해당하는 내용만 검색할 수 있다.

그 외에 Bookmarks 버튼을 이용하면 현재 보는 문서를 북마크 할 수 있다. 자주 사용되는 문서 예를 들어 자주 사용되는 표 등을 저장해 두면 편리하다.

Figure19.png

<그림 2-19> 툴바

Figure20.png

<그림 2-20> 문서 세트 추가하기

위 검색 방법에 덧붙여서 논리 연산자, 와일드카드 등의 고급 검색 기능도 이용할 수 있다. 어떤 것들이 있는지 알아보자.

2.5.3 고급 검색

검색할 때 단어가 어렴풋이 기억나는 경우가 있다. 이때 연산자를 이용하면 쉽게 검색할 수 있다. 사용할 수 있는 연산자는 표 2-2와 같다.

연산자

의미

!

NOT

view & (!window)

&

AND

video & audio

|

OR

video | audio

( )

식을 묶음

(video & audio) | (NSURL)

+

해당 구문이 있어야

+NSString

해당 구문이 없어야

–NSMutableString

“”

공백이 있는 단어를 묶을

“UIView class” | “UIWindow class”

*

모든 문자에 대응

CFMutable*Ref* -*Array

< 2-2> 고급 검색 연산자

원래 와일드카드 검색에는 *과 ?를 이용한다. * 문자는 없거나 하나 이상의 모든 문자를 의미하고, ? 문자는 임의의 문자 하나를 나타낸다. 하지만 Xcode의 문서 검색에서는 * 만을 사용할 수 있으니 주의하자. 표에서 사용한 다음 표현은 CFMutable로 시작하고 그 사이에 Ref가 포함된 경우를 검색하되, Array로 끝나는 경우는 제외시킨다.

  1. CFMutable*Ref* -*Array

2.5.4. 편집기의문자열을도움말창에서바로검색하기

소스 코드를 열심히 입력하다가, 급하게 도움말을 검색해야 할 때, 매번 메뉴를 눌러서 도움말 창을 실행시킨 후에 입력 창에 원하는 문자를 입력하는 방식은 너무 느리고 소모적이다. 좋은 개발 툴은 동선이 짧아야 한다. 즉 원하는 작업을 최대한 빨리 진행할 수 있어야 한다. Xcode 편집기에서는 아주 간단하게 커서 위치에 있는 코드를 도움말로 검색할 수 있다. 옵션(Option)키를 누른 상태에서 원하는 단어를 더블 클릭하면 된다. 또한 Command 키를 누른 채로 단어를 더블클릭하면 그 심볼이 정의된 헤더 파일로 이동한다. 다른 단축키는 부록으로 제공하는 Xcode 단축키를 참고하자.

  • Option + 더블클릭

    선택한 단어를 빠른 도움말에서 검색

  • Command + 더블클릭

    선택한 단어가 정의되어 있는 헤더 파일 열기

  • Option + Command + ?

    개발자 문서의 검색어 입력창으로 이동

 

2.5.5 도움말 문서의 형태

도움말에서 가장 많이 접하게 될 문서는 클래스 레퍼런스 매뉴얼이다. 클래스 레퍼런스는 선택한 클래스가 어떤 메서드를 가지고 있고, 어떤 인자를 받는지 자세히 설명 되어 있는 문서다. 이 문서들은 모두 형식이 같기 때문에, 구조를 알아두면 필요한 내용을 찾기가 쉽다.

그림 2-21을 보자. 테스트로 UITextField 클래스 문서를 열었다. 클래스 이름 바로 아래에 박스 형태로 제공되는 정보는 다음과 같다.

2-027.jpg

<그림 2-21> 클래스 레퍼런스의 구조

 

  • Inherits from

    상속 관계를 보여준다. 왼쪽부터 바로 상위 부모가 나열된다. 최상위에는 항상 NSObject가 있다.

  • Conforms to

    중요한 부분으로, 이 클래스가 구현하고 있는 프로토콜을 보여준다. 프로토콜을 구현한다는 의미의 용어로 Conform이 사용된다는 점을 기억해 두자. (번역어로 ‘따르다’를 선택했다.)

  • Framework

    이 클래스가 소속되어 있는 프레임워크를 보여준다. 만약 프로젝트에 프레임워크가 등록되어 있지 않다면, 이 정보를 이용해서 별도로 등록해야 한다. 그러지 않으면 컴파일시 에러가 발생한다.

  • Availability

    이 클래스를 사용할 수 있는 iOS SDK 버전. 만약 4.1으로 되어 있다면 iOS 4.1 이상부터 사용 가능하다는 의미다.

  • Declared in

    클래스 헤더가 정의되어 있는 파일명.

  • Related sample code

    이 클래스를 활용하는 샘플 코드를 보여준다.

 

이제부터는 문서 본문이 시작되는데, 본문의 구조도 항상 같다. 다음을 보자.

  • Overview

    클래스에 대한 소개. 구현할 때 주의할 점이나, 가장 많이 사용되는 사용법을 설명한다.

  • Tasks

    클래스 내의 관련 메서드와 속성을 그룹으로 보여준다. 그림 2-22과 같이 프로토콜을 설명할 경우 optional method라는 표현은 해당 메서드를 반드시 구현할 필요는 없다는 뜻이다.

  • Properties

    클래스가 제공하는 프로퍼티를 보여준다. 읽기 전용으로 사용되는지 등의 속성을 파악할 수 있다.

  • Instance Methods

    클래스가 제공하는 메서드의 세부 설명.

  • Constants

    클래스가 선언하는 상수 값들.

  • Notification

    이 클래스가 만들어 내는 통보 메시지 정보.

2-028.jpg

<그림 2-22> 프로토콜의 optional method 표시

2.6 아이폰 레퍼런스 프로젝트

지금까지 설명한 개발 툴을 이용해서 예제를 하나 만들어 보자. 아이폰 관련 참고 사이트를 버튼으로 연결 시켜주는 간단한 예제다. 하나씩 직접 따라 하면서 감을 읽히는 것이 목적이기 때문에 꼭 직접 따라해 보자.

Figure23.png

<그림 2-23> 예제 애플리케이션

2.6.1 프로젝트 생성

아이폰 애플리케이션을 만들려면 먼저 프로젝트를 생성해야 한다. Xcode를 실행하고 File 메뉴의 New Project를 선택하자.

View-based Application을 선택하고, Choose… 버튼을 누른다. 프로젝트 이름을 iPhoneRef라고 입력하고 Save 버튼을 누르면 프로젝트가 만들어진다.

Figure24.png

<그림 2-24> 프로젝트 템플릿 결정

프로젝트의 그룹 및 파일 목록 창에서 맨 아래 NIB Files에 있는 iPhoneRefViewController.xib 파일을 더블 클릭하자. 그림 2-25처럼 인터페이스 빌더가 실행된다.

2-031.jpg

<그림 2-25> 인터페이스 빌더

2.6.2 인터페이스 빌더로 화면 디자인하기

인터페이스 빌더에서 애플리케이션의 화면을 구성해 보자. 라이브러리(Library) 창에서 Label 컨트롤을 선택한 후 뷰에 끌어다 놓는다. (찾기 힘들다면 라이브러리 창의 맨 아래 검색창에서Label을 입력하자.)

2-032.jpg

<그림 2-26> 라벨을 하나 끌어다 놓는다.

라벨을 더블 클릭해서 ‘아이폰 참고 링크’ 라고 입력한다. 그리고 그림 2-27과 같이 라이브러리에서 Round Rect Button을 다섯 개 추가하자. 마지막으로 라벨 하나와 그 밑으로 버튼을 아랫부분에 추가하자. 각 버튼의 이름은 그림 2-27과 같이 입력해 준다. 버튼의 이름은 라벨과 마찬가지로 더블 클릭하면 변경할 수 있다.

Figure27.png

<그림 2-27> 완성된 화면 디자인

기본적인 화면 구성은 끝났다. 이제 각 버튼이 눌리면 실행할 메서드(Action)를 설정하자. 인터페이스 빌더의 iPhoneRefViewController.xib라는 제목의 창에서 Files Owner를 선택한다. 이어서 라이브러리 창에서 인스펙터 창에서 맨 오른쪽 탭을 선택해서 Identity 속성을 보자. Class Identity 항목에 iPhoneRefViewController가 입력되어 있다. 옆의 화살표를 클릭하자. 이 화살표를 클릭하면 라이브러리의 Classes 탭에 현재 클래스를 선택해 준다. 그 후에 그림 2-28과 같이 Actions 항목을 선택하자. 복잡해 보이지만 크게보면 iPhoneRefViewController 클래스에 Action을 추가하기 위한 동작에 불과하다. (iOS 3.2부터 UI가 이렇게 변경되었다. 이전에는 모두 인스펙터 창의 Class Identity 탭에 같이 있었다.)

그림 2-28과 같이 라이브러리의 Classes 탭의 아래 부분에 있는 + 버튼을 눌러서 항목을 추가하자.

Figure28.png

<그림 2-28> iPhoneRefViewController 클래스에 액션 추가하기

onIPhoneDevCenter라는 이름의 Action을 추가하자. 같은 방식으로 그림 2-29와 같이 항목 다섯 개를 더 추가해 보자.

2-035.jpg

<그림 2-29> 추가된 액션들

뷰의 첫 번째 버튼에서 마우스 오른쪽 버튼을 누르자. 그러면 바로 오른편에 검은색 연결 패널이 나타난다. 이 항목에서 Touch Up Inside를 찾자. 항목을 찾았다면 오른편에 동그란 표시를 클릭해서iPhoneRefViewController.xib 문서 창의 Files Owner로 마우스를 끌어다 놓자. 그러면 또 다시 작은 크기의 연결 패널이 보일 것이다. 이 팝업에는 방금 전에 Class Actions에 추가한 것들이 목록으로 나오는 것을 알 수 있다. onIPhoneDevCenter를 선택하자.

2-036.jpg

<그림 2-30> 이벤트와 액션 연결하기

나머지 버튼도 같은 방식으로 연결하자. 두 번째 버튼부터 순서대로 onIPhoneForum, onIPhoneDevSDK, onMacbugi, onMacLove, onInsight와 연결한다.

 

컨트롤 키를 누른 상태로 버튼을 드래그해서 File’s Owner에 놓아도 같은 효과를 볼 수 있다.

 

지금까지 작업은 사용자가 손가락으로 버튼을 선택한 후 그 버튼위에서 손을 떼었을 때 지정한 Action이 호출되도록 한 것이다. 그런데 아직까지 코드는 전혀 작성하지 않았다. 더군다나 메서드 선언조차 하지 않았다. 두가지 방법이 있다. 첫째는 Xcode로 돌아가서 소스와 헤더 파일에 Action 메서드를 선언하고 구현하는 것이다. 다른 방법은 인터페이스 빌더에 설정한 정보를 통해서 자동으로 코드를 생성하게 할 수 있다. 예제에서는 두 번째 방법을 선택해 보자. Files Owner가 선택된 상태에서 File 메뉴의 Write Class Files …를 선택한다.

2-037.jpg

<그림 2-31> 클래스 파일 내보내기

선택한 후에 파일 이름을 iPhoneRefViewController로 그대로 두고 저장을 누른다. 그러면 그림 2-32처럼 이미 있는 파일이라는 경고와 함께 덮어씌울지(Replace) 아니면 병합(Merge)을 진행할지를 묻는다. 여기서는 기존에 작업한 내용이 전혀 없기 때문에 Replace를 누른다.

2-038.jpg

<그림 2-32> 클래스 파일 저장하기

이렇게 하면 인터페이스 빌더가 각 Action에 대한 메서드를 모두 선언해 준다. 우리는 메서드의 내용만 입력하면 된다.

2.6.3 코드 입력하기

Xcode에서 인터페이스 빌더가 새로 생성해 준 클래스 파일인 iPhoneRefViewController.h 파일을 보자.

  1. <소스: iPhoneRefViewController.h>

  2. 01: #import <UIKit/UIKit.h>

  3. 02: #import <Foundation/Foundation.h>

  4. 03:

  5. 04: @interface iPhoneRefViewController : UIViewController {

  6. 05:

  7. 06: }

  8. 07: – (IBAction)onIPhoneDevCenter:(id)sender;

  9. 08: – (IBAction)onIPhoneDevSDK:(id)sender;

  10. 09: – (IBAction)onIPhoneForum:(id)sender;

  11. 10: – (IBAction)onInsight:(id)sender;

  12. 11: – (IBAction)onMacLove:(id)sender;

  13. 12: – (IBAction)onMacbugi:(id)sender;

  14. 13: @end

헤더 파일에는 -(IBAction)으로 시작하는 행이 여섯 개 있다. 모두 우리가 인터페이스 빌더에서 Action으로 추가한 이름들이다.

 

IBAction은 자바나 Cvoid와 동일하다. void를 사용하지 않고 IBAction을 사용하는 이유는 인터페이스 빌더가 코드를 분석할 때 IBAction이라는 리턴 타입을 가지는 메서드는 이벤트를 처리할 수 있는 대상으로 인식하기 때문이다.

마찬가지로 IBOutlet 매크로도 있다. 아래 코드를 보면 알겠지만 IBOutlet은 아무 의미도 없다. 오직 인터페이스 빌더에서 인식할 수 있게 멤버 변수 앞에 붙이는 것이다. IBAction이 이벤트 핸들러를 위한 표시라면, IBOutlet은 인터페이스 빌더가 생성하는 객체를 Xcode에서 접근할 수 있게 객체의 포인터를 연결하는 데 이용된다.

  1. <소스: <UINibDeclaration.h> >

  2. 01: #ifndef IBOutlet

  3. 02: #define IBOutlet

  4. 03: #endif

  5. 04:

  6. 05: #ifndef IBAction

  7. 06: #define IBAction void

  8. 07: #endif

 

이제 직접 수정할 파일인 iPhoneRefViewController.m을 보자.

  1. <소스: iPhoneRefViewController.m>

  2. 01: #import “iPhoneRefViewController.h”

  3. 02:

  4. 03: @implementation iPhoneRefViewController

  5. 04: – (IBAction)onIPhoneDevCenter:(id)sender {

  6. 05:[[UIApplication sharedApplication] openURL:

  7. [NSURL URLWithString:@”http://developer.apple.com/iphone/”]];

  8. 06: }

  9. 07:

  10. 08: – (IBAction)onIPhoneDevSDK:(id)sender {

  11. 09:[[UIApplication sharedApplication] openURL:

  12. [NSURL URLWithString:@”http://www.iphonedevsdk.com/forum/”]];

  13. 10: }

  14. 11:

  15. 12: – (IBAction)onIPhoneForum:(id)sender {

  16. 13:[[UIApplication sharedApplication] openURL:

  17. [NSURL URLWithString:@”http://developer.apple.com/devforums/”]];

  18. 14: }

  19. 15:

  20. 16: – (IBAction)onInsight:(id)sender {

  21. 17:[[UIApplication sharedApplication]

  22. openURL:[NSURL URLWithString:@”http://www.insightbook.co.kr/”]];

  23. 18: }

  24. 19:

  25. 20: – (IBAction)onMacLove:(id)sender {

  26. 21:[[UIApplication sharedApplication]

  27. openURL:[NSURL URLWithString:@”http://maclove.pe.kr”]];

  28. 22: }

  29. 23:

  30. 24: – (IBAction)onMacbugi:(id)sender {

  31. 25:[[UIApplication sharedApplication]

  32. openURL:[NSURL URLWithString:@”http://cafe.naver.com/mcbugi.cafe”]];

  33. 26: }

  34. 27: @end

굵은 글씨로 표시된 부분이 새롭게 작성한 부분이다. 이 코드는 특정 URL을 사파리 웹 브라우저에서 열어주는 일을 한다. 코드를 올바로 입력했다면 Xcode 툴바의 Build & Go를 눌러, 시뮬레이터상에서 애플리케이션이 구동되는 것을 확인하자.

2-039.jpg

<그림 2-33> 완성된 예제

버튼을 누르면 해당 홈페이지로 이동하는 것을 확인할 수 있다. 방금 설명했듯이 아이폰이나 아이팟 터치가 없더라도 테스트를 해 볼 수 있는 것은 아이폰 시뮬레이터 덕분이다. 다음 절에서는 아이폰 시뮬레이터에 대해서 알아보자. 디바이스에서 실행시키는 방법은 15장을 참고하기 바란다.

2.7. 아이폰 시뮬레이터

아이폰 애플리케이션은 아이폰에서 작동한다. 하지만 프로그램 개발 과정에서는 매번 아이폰에서 테스트를 해보기가 매우 번거롭다.

그 이유 중 하나는 외부 기기에 USB로 다운로드 되는 과정을 거치기 때문에 프로그램이 실행 되기까지 상대적으로 많은 시간이 걸린다는 것이다. 코드를 수정할 때마다 곧바로 작성한 내용을 확인하는 방식에 익숙한 개발자들은 빠른 속도로 진행하기가 어렵다고 느낄 수도 있다.

또한 실제 아이폰이 없는 경우도 생각해 볼 수 있다. 설령 실제 장치가 있다고 하더라도 애플 홈페이지에서 일정 금액을 내고 개발자 프로그램에 가입한 다음에야, 장치에서 프로그램을 테스트 해 볼 수 있다. (실제 장치에서 테스트하기 위한 설정은 15장에서 설명한다.)

이와 같은 이유로 개발을 진행하면서는 아이폰 시뮬레이터를 주로 사용할 것이다. 아이폰 시뮬레이터는 실제 장치와는 분명히 다르지만 동작을 시험해 보는 데는 큰 무리가 없다. 한가지 주의 할 점은 아이폰 시뮬레이터는 빠른 CPU를 가진 데스크톱 환경에서 실행되기 때문에, 실제 장치보다 훨씬 좋은 조건에서 동작된다는 것이다. 실제 개발 과정에서 주기적으로 실제 장치에 다운로드 하여 실행을 시켜보면서 동작을 확인해야 나중에 난감한 상황이 발생하지 않는다.

아이폰 시뮬레이터가 실행되는 모습은 실제 아이폰과 완전히 똑같다. 이제 시뮬레이터를 조작하는 방법을 알아보자. 아이폰 시뮬레이터의 메뉴를 이용해서 다음 동작을 실험해 볼 수 있다.

  • 기기 변경 (Device)

    아이폰, 아이폰 4, 아이패드를 각각 실험해 볼 수 있다.

  • 버전 변경 (Version)

    시뮬레이터에서 동작하는 iOS 버전을 변경할 수 있다. 애플리케이션이 하위 버전 아이폰에서도 동작하는지 확인할 수 있다.

  • 좌/우로 회전시키기(Rotate Left/Right)

    아이폰을 왼쪽 또는 오른쪽으로 회전시킨다. 아이폰의 회전에 따른 동작을 실험할 수 있다.

  • 흔들기 동작(Shake Gesture)

    iOS 3.0 부터는 흔들기 동작을 하나의 이벤트로 인식한다.

  • 홈 버튼 / 잠금 버튼 (Home / Lock)

    홈 버튼과 잠금 버튼을 누른 것과 같다. 홈 버튼은 동작중인 애플리케이션을 종료 시키거나 백그라운드로 보내고, 잠금 버튼은 화면을 잠근다(그림 2-35).

  • 메모리 경고(Simulate Memory Warning)

    시스템 메모리가 부족한 상황인 것처럼 만든다. 애플리케이션이 메모리 부족 경고에 어떻게 행동할 지를 시험할 수 있다.

  • 통화 상태를 상태 표시줄에 표시하기

    아이폰의 경우 전화 통화 중에 애플리케이션을 실행시키면 통화 중이라는 표시로 상태 표시줄이 두 배 정도 두꺼워진다(그림 2-36). 이러한 상황을 시험해 볼 수 있다. 화면이 아래로 밀려도 UI가 깨지지 않는지 확인할 수 있다.

  • 외장 키보드 실험

    화면 키보드가 아닌 외부 키보드를 사용할 때 실험할 수 있다. 화면 키보드의 경우 화면의 아래 절반을 키보드가 가리지만, 외부 키보드를 사용할 때는 화면 아래 부분이 노출된다.

  • TV 출력

    외부 TV 출력을 시험해 볼 수 있다.

Figure34.png

<그림 2-34> 아이폰 시뮬레이터의 하드웨어 메뉴

Figure35.png

<그림 2-35> 화면을 잠근 경우 ()

Figure36.png

<그림 2-36> 통화 중에 애플리케이션이 실행된 경우 ()

2.7.1 터치 조작

시뮬레이터에서는 다음 동작들을 시험해 볼 수 있다.

  • 누르기(Touch)

    마우스를 누르면, 실제 아이폰의 화면을 손가락 하나로 누른 것과 같은 효과를 낼 수 있다.

  • 두드림(Double Tapping)

    더블클릭하면 화면을 두드리는 효과를 볼 수 있다.

  • 닦아내기(Swipe)

    한 지점에서 마우스를 누른 채 원하는 방향으로 일정하게 드래그한 후 마우스 버튼을 땐다.

  • 멀티 터치(두 손가락)

    옵션 키를 누른 상태에서 마우스를 화면 위에 가져가면 그림 2-37의 우측과 같이 원형 마크 두 개가 표시되어 손가락 두 개를 나타낸다. 마우스를 누르면 손을 가져다 대는 것이고 마우스를 움직이면 대칭 방향으로 손가락이 멀어지거나 가까워진다. (직접 해보자. 계속하다보면 쉽게 익숙해지고 조작도 정교하게 할 수 있다.)

 

 

2-043.jpg

<그림 2-37> 시뮬레이터 상에서 멀티 터치

2.7.2 리셋하기

Xcode에서 애플리케이션을 실행시키면 먼저 아이폰에 설치되는 과정이 실행된다. 그런데 개발을 계속 진행하다 보면 여러 애플리케이션이 계속 추가되기 때문에 시뮬레이터가 복잡해진다. 또한 애플리케이션들이 만들어내는 프로파일이나 기타 정보들이 누적되어, 시스템이 상당히 지저분해진다.

이때 아이폰 시뮬레이터를 초기 상태로 만들려면 iPhone Simulator 메뉴의 Reset Content and Settings … 메뉴를 선택하면 된다.

2.8 정리

2장은 iOS SDK를 설치해서 개발 환경을 갖추는 과정을 설명했다. 그리고 자주 사용하는 툴인 Xcode와 인터페이스 빌더의 기초적인 사용법을 공부했다. 예제를 통해서 어떤 방식으로 개발을 진행하는지 대략적으로 이해했을 것이다. 이제 개발 환경을 갖추었으니 3장부터는 실제 개발에 필요한 기술들을 하나씩 공부하자.

2.8.1 참고 사이트

예제에서도 몇몇 사이트를 소개했지만, 개발을 진행하면서 참고할만한 사이트를 다음과 같이 정리해 보았다.

 

  • 애플 개발자 홈페이지

    http://developer.apple.com/iphone/index.action

    아이폰 관련 문서와 SDK를 다운받을 수 있다. 가장 많이 드나들게 될 것이다.

  • 애플 개발자 포럼

    https://devforums.apple.com/community/iphone

    아이폰 개발자 프로그램에 유료로 등록해야 접근할 수 있지만, 애플 개발자들이 직접 답변을 달아주기 때문에 가장 신뢰할 수 있다.

  • iPhone Dev SDK 포럼

    http://www.iphonedevsdk.com/forum/

    외국 사이트로, 상당히 활성화되어 있고 활발하게 문답이 이루어진다.

  • iPhoneDevBook 포럼

    http://iphonedevbook.com/forum/

    아이폰 서적인 Beginning iPhone Development에서 운영하는 포럼

  • Learn Cocoa

    http://cocoadevcentral.com/

    아이폰이나 맥의 기본 프레임워크인 코코아에 대한 강의나 관련 글들을 볼 수 있다. 정리가 아주 잘 되어 있으니 한번 들러 보자.

  • 저자 블로그

    http://maclove.pe.kr

    이 책에 관련된 예제와 정오표를 확인 할 수 있다.

  • OSXDEV

    http://osxdev.org/

    국내 맥 개발 관련 포럼이다. 위키와 포럼을 운영하고 있다.