Xcode4 부록 A Xcode 4.1에서 바뀐 내용 이번 장에서는 맥 OSX 10.7 라이언과 함께 발표된 Xcode 4.1에서 새롭게 추가된 기 능과 변경된 기능을 정리하려고 한다. 우선 가장 먼저 알아둬야 할 사항은 ios 개발을 위한 기본 컴파일러가 LLVM- GCC 4.2로 바뀌었다는 점이다. LLVM-GCC 4.2 컴파일러는 Xcode 4.0의 기본 컴파 일러였던 GCC 4.2와 그대로 호환되면서도, GCC 컴파일러보다 좀더 최적화된 효율 적인 코드를 생성한다. A.1 새로운 기능 Xcode 4.1이 라이언과 함께 발표되면서 자연스럽게 전체화면 기능이 추가되었다. 맥 OS 10.7에서 Xcode 4.1을 쓰고 있다면 전체화면 모드를 꼭 사용해보길 권장한 다. 그러면 Xcode 4가 왜 여러 창을 띄우기보다 단일 창으로 구성됐는지 이해할 수 있을 것이다. 프로젝트 현재화(Project Modernization) Xcode 4에서 프로젝트를 열었을 때, 프로젝트 설정 값들 중에서 변경해야 할 사항 이 있는지 검토하는 기능이다. Xcode 4 이전 버전에서 만들었던 프로젝트가 최신 SDK 버전과 얼마나 호환하는지 검증하는 데 유용하다. 이슈 내비게이터를 선택하고 프로젝트 설정을 변경해야 하는 것이 있는지 확인하 거나 프로젝트 내비게이터에서 맨 위의 프로젝트를 선택하고 편집(Editor) 메뉴에서 부록 A Xcode 4.1에서 바뀐 내용 383
매력적인 맥/iOS 개발 환경 그림 A-1 변경 사항 확인창 Validate Setting... 항목을 고르면 된다. 프로젝트 편집기를 선택했을 때 화면 아 래쪽에 있는 동일한 Validate Settings... 버튼을 클릭해도 된다. 이슈 내비게이터 목록에서 변경할 이슈를 클릭하면, 관련된 항목들을 전부 혹은 일부만 수정할 수 있도록 그림 A-1과 같은 다이얼로그 화면이 표시된다. 변경할 항목을 바꾸거나 혹은 전혀 바꾸지 않더라도 일단 Perform Changes 버튼을 클릭하면 더이상 경고는 표시되지 않는다. 만약 다시 검사를 하고 싶다면, 위에서 설명한 것처럼 프로젝트 편집기나 Editor 메뉴에서 Validate Settings... 항 목을 선택해야 한다. 선처리기 / 기계어 출력 Xcode 4.1에서는 Product 메뉴에 Generate Output 서브 항목이 추가되어, 이 메뉴 로 선처리기(Preprocessed)가 변경한 내용이나 기계어 출력을 확인할 수 있다. 선처리기는 #include나 #import, #define, #ifdef 같이 소스 코드에서 파운드(#) 글 자로 시작하는 지시어들을 수행하고 변경해서 컴파일러로 전달하는 코드를 만든 다. 선처리기가 제대로 처리해서 소스 코드의 로직이 확실하게 만들어졌는지 확인 하는 편이 컴파일 문제를 디버깅하기 원하는 개발자들에게 편리할 것이다. 기계어 출력은 선처리기의 출력을 컴파일러가 컴파일해서 만들어 내는 인스트럭 384
Xcode4 그림 A-2 보조 화면의 Preprocess / Assembly 카테고리 션 세트를 의미한다. 따라서 기계어 출력을 살펴봄으로써 CPU 명령어인 인스트럭 션들이 어떤 형태와 순서로 만들어지는지 공부할 수 있고, 더 좋은 코드 패턴이나 컴파일러의 버그를 찾아내는 용도로도 활용할 수 있다. 사용법은 Product > Generate Output 메뉴에서 선택하는 방법도 있지만, 그림 A-2처럼 보조 화면(Assistant editor)에서 먼저 선택된 파일에 대한 Counterparts 대 신에 새로운 카테고리 형태로 선택할 수도 있다. 프로젝트와 워크스페이스 닫기 단축키 Xcode 4.0에서는 프로젝트나 워크스페이스를 닫을 수 있는 단축키가 없었다. 그 래서 옵션키를 누른 상태에서 워크스페이스 창 좌측 상단 구석의 닫기를 클릭하면, 모든 탭과 창, 프로젝트가 닫혀버리고, 다시 열었을 때는 작업 중이던 창과 탭은 열 리지 않았다. 이러한 불편을 없애고자 Xcode 4.1에서는 커맨드-옵션-W 조합키를 누르면 프 로젝트나 워크스페이스가 닫힌다. 워크스페이스를 닫으면 열려 있던 모든 창과 탭 이 닫히면서 프로젝트나 워크스페이스도 함께 닫히지만, 프로그래을 다시 열면 작 업하던 창의 설정이 그대로 되살아 난다. 바로 이 기능 때문에 Xcode 4.1부터는 Xcode 4.0과 단축키가 조금 달라졌다. 부록 A Xcode 4.1에서 바뀐 내용 385
매력적인 맥/iOS 개발 환경 인터페이스 빌더 플러그인 지원 Xcode 3에서 만들어진 인터페이스 빌더 플러그인을 사용한다면, 이제 Xcode 4에 서도 기존 프로젝트를 빌드하고 실행할 수 있으며 Xcode 4에서 수정할 수 있도록 NIB 파일을 업데이트할 수도 있다. 하지만 Xcode 4는 인터페이스 빌더3 플러그인을 제한적으로만 지원한다. 특히 인터페이스 빌더 플러그인이 종속성(dependency)을 가지고 있으면, NIB 파일을 수 정할 수가 없다. 이렇게 종속성을 가진 NIB 파일을 열 경우에는 해당 파일을 업데이 트하라고 권장하며, 여기에 동의한다고 선택하면 Xcode가 플러그인의 커스텀 객체 를 가장 유사한 AppKit 클래스로 변환할 것이다. 이 변환에 실패한 경우에는 에러 메시지를 표시한다. 이렇게 되면 인터페이스 빌더3로 해당 플러그인의 종송석을 제 거해야만 Xcode 4에서 사용할 수 있다는 점을 주의한다. A.2 변경된 기능 앞에서 알아본 것처럼 새로운 기능들도 있지만, 이미 Xcode 4.0에 있던 기능의 일부 만 변경되기도 했다. 사용자 정의 동작 규칙(Behaviors) 동작 규칙은 14.3절 동작 규칙 설정 에서 설명한 것처럼, 다양한 이벤트가 발생할 때 동작할 규칙을 미리 지정해 놓은 것이다. Xcode 4.1에서는 기존 동작 규칙에 추 가적으로 내비게이터, 유틸리티 영역, 툴바 보이기와 감추기, 전체화면 모드 등이 추 가되었다. 이번에 추가된 것을 포함하여 다양한 동작 규칙들을 활용하면, 정말 많 은 상황에서 원하는 동작을 하는 변화무쌍한 개발 환경을 만들 수 있을 것이다. 또한 사용자가 동작 규칙을 추가할 수도 있다. 동작 규칙 설정 화면 아래쪽에 있 는 추가(+) 버튼을 클릭하면, 그림 A-3처럼 새로운 규칙을 추가할 수 있고 해당 규 칙에 단축키를 지정할 수도 있다. 이 기능을 활용하면 원하는 화면 구성이나 사용 자만의 스크립트에 단축키를 지정해서 필요할 때마다 실행할 수 있다. 그리고 이렇 게 만들어진 동작 규칙은 Xcode 메뉴 항목의 Behaviors 메뉴 아래 추가된다. 386
Xcode4 그림 A-3 나만의 동작 규칙 단, 사용자 정의 동작 규칙에 단축키를 지정할 때는 키 바인트 탭을 살펴보고 잘 쓰지 않는 조합을 찾아야 한다. 그렇지 않으면 동작 규칙을 만들 때 시행착오를 많 이 거치게 될 것이다. 스킴 전 후처리 액션에서 빌드 설정 변경 가끔씩 빌든 단계의 셸 스크립트가 하는 것처럼, 어떤 상황의 직전이나 직후에 특정 한 타켓의 빌드 설정 값을 변경해야 하는 경우가 있다. 이런 경우에, 스킴 편집기의 전 후처리 설정 화면에서 팝업 메뉴를 띄우고 전 후처리(pre-/post-action) 스크립 트를 선택하면, 타깃의 빌드 설정을 선택할 수 있다. 디버거 디스어셈블리 디버거 디스어셈블리는 디버깅할 때 보이는 화면을 지정하는 기능이다. 즉 디버깅 화면에서 소스 코드만 볼 것인지, 디스어셈블리만 볼 것인지 혹은 소스 코드와 디 스어셈블리를 모두 볼 것인지 선택할 수 있다. 특히 디스어셈블리에서는 프로그램 실행 중에 디버거가 인스트럭션들을 어셈블리 언어로 표시해준다. 디스어셈블리를 활용하면 브레이크포인트에 멈췄을 때 다른 관점에서 생각해 볼 수 있는 기회를 얻 을 수 있다. 그리고 소스 코드와 디스어셈블리를 함께 본다면, 자신이 작성한 코드 가 실행될 때 소스 코드가 어떤 기계어로 어떻게 변경되었는지 보여주기 때문에 기 계어를 이해하기가 좀더 쉬울 것이다. 디스어셈블리 기능을 사용하기 위해서는 Product 메뉴의 Debug Workflow에서 디스어셈블리 표시 옵션을 선택하면 된다. 만약 소스 코드와 함께 보려면 보조 화 면에서 디스어셈블리 카테고리를 선택하면 된다. 스냅샷 병합 복구(In-place Restoration) Xcode 4.0에서 지원하는 스냅샷 기능에는 현재 프로젝트 내용에 옛 스냅샷을 병 합할 방법이 없었다. 그래서 특정 파일을 예전 스냅샷 내용으로 복구하고 싶을 때 부록 A Xcode 4.1에서 바뀐 내용 387
매력적인 맥/iOS 개발 환경 는, 현재 버전의 파일을 지워버리고 이전 버전의 스냅샷에서 옮겨야만 했다. 하지만 Xcode 4.1부터는 이럴 필요가 없다. 자동적으로 현재 버전에 병합해서 복구하는 기 능이 추가됐기 때문이다. File 메뉴에서 스냅샷 복구 항목을 선택하면, 현재 버전과 스냅샷에 저장된 버전 의 차이점을 보여주는 미리 보기 화면이 나타난다. 이 화면에서 복구 버튼을 선택하 면 현재 버전으로 우선 새로운 스냅샷을 만들어 놓고, 현재 버전의 프로젝트에 스 냅샷 버전이 병합된다. 만약 현재 프로젝트에 병합하는 것이 아니라 새로운 위치에 스냅샷을 복원하고 싶다면, 서랍장(Organizer) 창의 프로젝트 탭에서 원하는 스냅샷을 선택하고 창 아 래에 있는 Export Snapshot 버튼을 클릭하면 된다. 저장소 내의 프로젝트 내부 파일 이제 SCM 커밋과 업데이트 작업중 상세 정보를 확인할 때, 스킴 설정이나 화면 설정 과 같은 프로젝트 내부 파일을 볼 수 있다. 따라서 소스 파일의 버전을 관리하듯이 프로젝트 내부 파일의 버전도 동일한 방식으로 관리할 수 있게 되었다. GIT 원격 관리 Xcode 4.1부터는 GIT 원격 저장소를 관리할 수 있다. 또한 Push나 Pull 명령에서 원 하는 원격 저장소를 선택할 수도 있다. 따라서 GIT 원격 저장소를 사용하는 경우에 도 Xcode를 이용한 소스 관리가 좀더 편리해졌다. A.3 라이언(맥 OSX 10.7) 기능 Xcode 4.1 버전은 라이언에 맞춰서 개발된 버전이고, 라이언용 SDK를 포함하는 정 식 버전이기 때문에 맥 OSX 10.7용 맥 앱을 개발하기 위한 기능들도 추가되었다. 자동 레이아웃(Autolayout) 맥 OSX 10.7부터는 창 화면의 모서리 어디서든지 창 크기를 변경할 수 있으며, 전체 화면으로 전환하도록 만들 수도 있다. 자동 레이아웃 기능은 이렇게 화면 구성이 변경될 때 각 객체들을 자동적으로 배치하는 기능이다. Xcode 4.1에 내장된 인터페이스 빌더는 앱킷의 자동 레이아웃 기능을 지원한 다. UI 화면에서 기존의 자동 리사이즈 마스크를 대체하는 각 객체들의 제약사항 388
Xcode4 (constraint)을 지정하면 된다. 인터페이스 빌더에서 뷰나 컨트롤을 움직이거나 크기 를 바꾸거나 속성을 변경하면, 자동적으로 새로운 레이아웃에 대한 제약사항을 추 가하거나 제거한다. 그리고 이렇게 생성된 제약사항은 앱이 실행되는 동안에 뷰나 컨트롤의 속성이 바뀌면 같은 방식으로 동작한다. 제약사항을 수동으로 추가하고 싶을 때는, 하나의 뷰나 여러 뷰를 선택하고 Edit 메뉴에서 Add Constraint 항목을 클릭하면 된다. 주의할 사항은 자동 레이아웃은 반드시 맥 OS X 10.7, 라이언 이후에만 사용 가능하다는 점이다. 맥 OS X 10.6용 Xcode 4.1에서는 사용할 수 없다. 자동 레이아웃은 NIB 파일 단위로 활성화 여부를 설정할 수 있는데, 각 NIB 파일 의 파일 인스펙터 Autolayout 체크박스를 통해서 끄고 켤 수 있다. 자동 레이아웃 옵 션을 처음 선택하는 경우에는 자동적으로 배포 타깃(deployment target)을 맥 OS X 10.7 이상으로 선택한다. 그리고 맥 OS X 10.6 이전 버전을 위해 만들어진 NIB 파일의 경우에는 자동 레이아웃 옵션을 켤 때 자동적으로 제약사항을 추가하게 된다. 사용자 제약사항은 지울 수 있지만, 자동 제약사항은 삭제할 수가 없다. 따라서 자동 제약사항을 지우려고 하지 말고, 자신만의 제약사항을 만들어서 사용하는 편 이 좋다. 맥 OS X 앱 샌드박스 앱 샌드박스는 앱과 시스템 사이의 상호 연동을 강제로 제한하는 기능이다. 샌드박 스에서 작동하는 앱은 시스템 하드웨어에 접근하는 데 제약이 있기 때문에 사용자 에게 더 안전하다. 예를 들어 자신의 앱이 네트워크에 접근할 필요가 없다면, 앱의 샌드박스에서 네트워크 접근을 막도록 설정한다. 이렇게 하면, 앱을 해킹한 해커가 인터넷에 접속하거나 이메일을 보내는 등의 행위를 막을 수 있다. ios 플랫폼에서 제공해왔던 기능 자격증(entitlement)을 이제 맥 OS X 라이언에서 지원하는 것이다. Xcode 4.1에서는 프로젝트 편집기 화면에서 맥 OS X 앱의 자격증 을 개개의 타깃별로 직접 관리할 수 있다. 그리고 ios처럼 프로젝트 템플릿 파일로 인증된 자격증(entitlement) 파일을 만들 수도 있다. 앱의 샌드박스 기능을 활성화할 때, 기존에 갖고 있는 자격증 파일을 선택할 수도 있다. 만약 없으면, 프로젝트명과 동일한 이름의 자격증 파일을 생성한다. 자격증 파 일은 Xcode에 내장된 Property List 편집기를 활용해서 보거나 편집할 수도 있다. 부록 A Xcode 4.1에서 바뀐 내용 389
Xcode4 부록 B Xcode 4.2에서 바뀐 내용 이번 장에서는 ios5 SDK가 포함된 Xcode 4.2 버전의 변경 사항을 알아보겠다. Xcode 4.0에는 GCC 컴파일러가, Xcode 4.1에서는 LLVM-GCC 컴파일러가 기본 컴 파일러로 내장되어 있었지만, Xcode 4.2부터는 GCC 컴파일러는 아예 내장되지 않 고 LLVM 컴파일러가 기본 컴파일러로 지정된다. LLVM 컴파일러에 대해서는 20장 에서 좀더 자세히 다루고 있다. 그 중에서도 Objective-C 언어를 위한 ARC 기능과 새로운 C++ 표준 라이브러리 C++0x 등을 지원하는 LLVM 3.0 컴파일러가 기본 컴 파일러로 사용된다. 그리고 ios 프로젝트들도 LLDB 기능을 사용해서 디버깅이 가 능해졌다. B.1 ARC(Automatic Reference Counting) 20.5절 LLVM 활용 사례 에서 이미 ARC에 대해서 언급했지만, LLVM 3.0 컴파일러 가 Xcode 4.2에 추가되면서 Objective-C 객체의 자동화된 메모리 관리 기법인 ARC 가 지원되기 시작했다. ARC 기반으로 프로그램을 작성하면 메모리 누수 걱정을 줄 이면서도 더 쉽게 코딩할 수 있다. Xcode 4.2에서 제공하는 마이그레이션 기법을 사 용해서 변경해야 하는 코드가 있는지 미리 확인하고, ARC가 새로운 코드로 재작성 해 준다. 우선 모든 변경 사항을 확인하기 위해서, 환경 설정의 일반 탭에서 Continue building after errors 항목을 선택하고 Edit > Refactor > Convert to Objective-C 메 뉴를 선택한다. 그러면 변경할 모든 타킷들에 대해 LLVM 컴파일러를 사용하도록 부록 B Xcode 4.2에서 바뀐 내용 391
매력적인 맥/iOS 개발 환경 변경하고, ARC를 사용할 경우 바뀌어야 할 사항들을 검사한다. 변경할 사항에 대해 이슈가 있다면 이슈 내비게이터에서 확인하여 수정하고, 다 시 ARC 변환 메뉴를 선택하는 식으로 반복해서 수행하면 된다. 빌드가 정상적으로 변환 가능하다고 판단하면, 나중에 필요할 수도 있으니까 현재 버전을 스냅샷으로 찍으라고 요청하기도 한다. 그리고 미리 보기 화면을 통해서 ARC 방식으로 변경될 코드를 다시 한 번 확인한 후, ARC를 이용한 코드로 변환해준다. B.2 위치 정보 시뮬레이션(Location Simulation) 기존 Xcode 4.0과 4.1에서는 앱의 현재 위치 정보만 시뮬레이션할 수 있었다. 하지 만 Xcode 4.2부터는 코어 로케이션(Core Location)을 사용하는 ios 앱에서 현재 위 치가 아닌 곳도 시뮬레이션할 수 있다. 위치를 지정하려면 스킴 편집기에서 실행 액 션(Run Action)을 선택하고 옵션(Options) 탭을 선택하면 된다. 그림 B-1과 같은 옵 션 화면이 나타나면 기본 위치 정보를 지정하면 된다. 그림 B-1 위치 정보 시뮬레이션 코어 로케이션을 사용하는 ios 5.0 앱을 디버깅하는 동안에는 디버그 바에 동일 한 위치 정보를 선택할 수 있는 선택 메뉴가 제공된다. 392
Xcode4 B.3 앱 데이터 관리(Application Data Management) 위에서 설명했던 위치 정보와 함께 그림 B-1에서 Application Data 항목을 선택하면, 시뮬레이터나 ios 디바이스에서 실행하는 도중에 사용할 앱 데이터 파일을 저장하 거나 복원하는 기능도 사용할 수 있다. B.4 추가 요소 다운로드(Downloading Components) Xcode 4.2는 맥 앱 스토어에서의 다운로드 시간과 설치 시간을 단축하기 위해서 용량을 줄이기 시작했다. 이전 버전의 시뮬레이터와 이전 버전의 디버깅 정보처럼 현재 버전과 관련이 없는 것들은 다운로드에서 제외된다. Xcode를 설치한 이후 에 환경 설정의 다운로드 항목에서 개발자 문서를 받았듯이, 그림 B-2의 추가 요소 (Components) 탭을 선택하면 이렇게 제외된 요소들을 선택적으로 다운로드할 수 있다. 그림 B-2 추가 요소 다운로드 B.5 스토리보딩 Xcode 4.2에서는 ios 5.0용 앱의 사용자 인터페이스를 디자인할 때 뷰 컨트롤러들 부록 B Xcode 4.2에서 바뀐 내용 393
매력적인 맥/iOS 개발 환경 그림 B-3 마스터-디테일 프로젝트 템플릿 의 스토리보드 작업을 할 수 있다. 스토리보드 기능을 사용해서 앱의 모든 화면들 을 지정할 수 있을 뿐만 아니라, 화면이나 컨트롤 사이의 트랜지션 효과도 설정할 수 있다. 이 모든 작업이 앱에 표시되는 과정과 동일하기 때문에, 복잡한 다단계 화 면을 가진 앱이라 하더라도 코드를 별로 작성하지 않고 손쉽게 만들 수 있다. 이 책 그림 B-4 스토리보드 활성화 394
Xcode4 은 ios SDK에 대한 설명서는 아니기 때문에, 스토리보딩 기능에 대한 기본적인 사 용 방법만 알아보도록 하겠다. 스토리보드를 사용하려면 그림 B-3과 같이 프로젝트 템플릿에서 Master-Detail Application 템플릿을 선택하고, 그림 B-4처럼 Use Storyboard 체크박스를 선택해 서 스토리보드 기능을 활성화시켜야 한다. 스토리보드 기능을 추가하고 새로운 프로젝트를 만들면 MainStoryboard. storyboard라는 낯선 이름의 리소스 파일이 생성된다. 이 파일을 선택하면 그림 B-5처럼 스토리보드 디자인 화면이 표시될 것이다. 가장 좌측에 있는 Navigation Controller부터 시작해서 우측으로 화살표를 따라서 스토리보드가 진행되도록 구 성하면 된다. 기존 Navigation-based 앱과 다른 점은 RootViewController가 시작 점이 아니고, 컨테이너(Container) 역할을 담당하는 Navigation Controller라고 하 는 ViewContoller가 따로 존재한다는 점이다. AppDelegate에 존재하던 Navigation Controller까지 시각적으로 표시해서 모든 뷰와 뷰 컨트롤러 사이의 내비게이션을 스토리보드로 만들 수 있다. 그림 B-5 스토리보드 디자인 화면 새로운 뷰 컨트롤러나 객체를 스토리보드에 추가하려면 우측에 있는 객체 라이 브러리에서 해당하는 캔버스 빈 공간이나 뷰 컨트롤러 안에 드래그해서 놓으면 된 다. 각 뷰 컨트롤러들은 하나의 장면을 담당하게 된다. 아이폰에서는 각 장면이 한 화면을 구성하겠지만, 아이패드에서는 한 화면을 구성하기 위해 여러 장면을 합쳐 서 구성할 수도 있다. 부록 B Xcode 4.2에서 바뀐 내용 395
매력적인 맥/iOS 개발 환경 스토리보드에서 뷰 컨트롤러 사이에는 각 객체를 연결하는 선이 존재한다. 이 선 은 화면에 변화가 생겼을 때 다음 장면을 구성하는 뷰 컨트롤러로 전환된다는 의 미다. 원하는 뷰 컨트롤러에 버튼 같은 새로운 컨드롤러를 올려놓고, 새로운 뷰 컨 트롤러를 추가해서 컨트롤-드래그로 연결만 해주면 새로운 선을 연결할 수 있다. 물론 스토리보드 상의 뷰 컨트롤러의 모든 뷰에는 기존 화면 설계와 마찬가지로 컨트롤이나 뷰를 추가할 수 있다. 뷰 컨트롤러를 연결하는 선의 화살표는 특정 장면에서 다른 장면으로 넘어가는 세구에(segue)로 표현된다. 예를 들어 8장에서 만들었던 트위터 예제의 테이블 뷰에 서 어떤 셀을 선택했을 때, 다음 뷰로 넘어가면서 트위터 작성자의 정보를 보여준다 고 가정하자. 이때 다음 뷰로 넘어가는 트랜지션 효과를 세구에로 지정하게 된다. 세구에는 화살표를 선택한 후 우측의 속성 인스펙터(Attributes Inspector)에서 지정 하면 된다. 세구에 아이디를 설정해서 좀더 복잡한 화면 전환 작업을 하는 방법은 UIViewController 클래스 레퍼런스 문서를 참고하기 바란다. 간단하게 말해서 스토리보드는 앱의 모든 화면을 시각적으로 알기 쉽게 표현해 서, 모든 화면 사이의 흐름을 편리하게 작업하도록 만들어진 기능이다. 이때 사용 하는 디자인 캔버스에서는 전체 스토리보드를 보거나 일부만 선택해서 볼 수 있도 록 확대-축소 기능도 제공한다. 마지막으로 스토리보드 파일은 새로운 규격의 NIB 파일이므로 ios 5 이상에서만 인식하고 동작한다는 점을 주의하자. 따라서 스토리보드로 만들어진 앱은 ios 4.x 이전 버전에서는 동작하지 않고 당연히 맥용 앱에서도 사용할 수 없다. B.6 OpenGL ES 프레임 캡처(Frame Capture) Xcode 4.2에는 ios용 OpenGL ES 앱을 개발할 때 새로운 디버깅 기법이 도입되 었다. OpenGL ES 프레임 캡처 기능은 ios 5.0 이상의 디바이스에서 실행하는 모 든 OpenGL ES 앱에서 사용할 수 있다. OpenGL ES 앱을 디버그 모드로 실행하고 Product > Debug > Capture OpenGL ES Frame 메뉴를 선택하거나, 그림 B-6처럼 디버거 메뉴바에서 OpenGL ES Frame 버튼을 클릭하면 된다. 이 기능을 사용해서 분석할 수 있는 기능들은 다음과 같다. OpenGL ES 상태 정보 분석 뷰 텍스처나 셰이더 같은 OpenGL ES 객체 내부 분석 396
Xcode4 그림 B-6 OpenGL ES 캡처 그리는 함수의 단계별 진행과 변화를 관찰 각 단계별 상태와 이미지 구성 여부에 대한 프레임 단위 관찰 실제로 캡처 기능을 선택했을 때 화면은 그림 B-7과 같다. 좌측의 디버그 내비게 이터에는 현재 프레임과 관련된 모든 그리기 함수와 상태 정보가 표시된다. 프레임 과 연결된 버퍼의 이미지는 편집기 화면에 표시되고, 세부 상태는 디버그 화면에서 확인할 수 있다. 특히 디버거 바에 표시되는 시간축을 이동시키면 거의 모든 프레임을 그리는 함 수를 단계별로 디버깅할 수 있다. 그리고 캡처된 프레임 아래 빈 공간을 컨트롤-클 그림 B-7 OpenGL ES 프레임 캡처 화면 부록 B Xcode 4.2에서 바뀐 내용 397
매력적인 맥/iOS 개발 환경 그림 B-8 보조 화면 선택 메뉴 릭하면 해당하는 그리기 함수를 디버그 내비게이터에서 선택할 수 있다. 이 팝업 메 뉴에서 와이어 프레임 표시 여부를 선택할 수도 있다. 우측에 보이는 보조 화면에서는 캡처된 프레임과 연결된 객체들을 보여준다. 보 조 화면에 표시되는 객체들은 그림 B-8처럼 카테고리 메뉴에서 모든 객체, 연결된 객체나 스택 등을 선택할 수 있다. 만약 보조 화면을 두 개 열면 프레임의 객체 정보 와 스택 정보까지 동시에 볼 수도 있다. 보조 화면의 객체를 더블 클릭하면 해당 객체의 상세 정보를 확인할 수 있다. 예 를 들어 Vertex Buffer를 선택하면 그림 B-9처럼 16진수로 해당 버퍼 내용을 확인하 게 된다. 그림 B-9 Vertex Buffer를 선택한 화면 398