ios 7 App Development Essentials Korean Translation Copyright c 2014 by J-Pub. co. The Korean edition is published by arrangement with Neil Smyth through Agency One, Seoul. Copyright c 2013 Neil Smyth. All rights reserved. 이 책의 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 제이펍 출판사에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다. 초판 1쇄 발행 2014년 5월 14일 지은이 닐 스미스 옮긴이 황반석 펴낸이 장성두 펴낸곳 제이펍 출판신고 2009년 11월 10일 제406 2009 000087호 주소 경기도 파주시 문발로 141 뮤즈빌딩 403호 전화 070 8201 9010 / 팩스 02 6280 0405 홈페이지 www.jpub.kr / 이메일 jeipub@gmail.com 편집부 이민숙, 이 슬, 이주원 / 소통 기획팀 현지환 용지 신승지류유통 / 인쇄 한승인쇄 / 제본 광우제책사 ISBN 978 89 94506 92 0 (93000) 값 35,000원 이 책은 저작권법에 따라 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금지하며, 이 책 내용의 전부 또는 일부를 이용하려면 반드시 저작권자와 제이펍의 서면동의를 받아야 합니다. 잘못된 책은 구입하신 서점에서 바꾸어 드립니다. 은 독자 여러분의 아이디어와 원고 투고를 기다리고 있습니다. 책으로 펴내고자 하는 아이디어나 원고가 있으신 분께서는 책의 간단한 개요와 차례, 구성과 저(역)자 약력 등을 메일로 보내주세요. jeipub@gmail com
이 책에 기재한 회사명 및 제품명은 각 회사의 상표 및 등록명입니다. 이 책에서는 c, R, TM 등의 기호를 생략하고 있습니다. 이 책에서 사용하고 있는 실제 제품 버전은 독자의 학습 시점에 따라 책의 버전과 다를 수 있습니다. 책의 내용과 관련된 문의사항은 역자나 출판사로 연락주시기 바랍니다. 역자: http://cafe.naver.com/petersbook 혹은 naya.peter@gmail.com 출판사: jeipub@gmail.com
차 례 옮긴이 머리말 베타리더 후기 xxviii xxx CHAPTER 1 CHAPTER 2 CHAPTER 3 CHAPTER 4 이책에대하여 _ 1 1.1 처음 ios 개발을 하는 개발자를 위하여 2 1.2 ios 6 개발자를 위하여 3 1.3 예제 소스 코드 4 1.4 피드백 4 1.5 오탈자 5 Apple ios 개발자프로그램에 가입하기 _ 7 2.1 등록된 애플 개발자 7 2.2 Xcode와 ios 7 SDK 다운로드하기 8 2.3 ios 개발자 프로그램 8 2.4 언제 ios 개발자 프로그램에 가입할까? 9 2.5 ios 개발자 프로그램에 가입하기 9 2.6 요약 11 Xcode 5와 ios 7 SDK 설치하기 _ 13 3.1 여러분의 맥이 인텔 기반인지 PowerPC 기반인지 확인하기 13 3.2 Xcode 5와 ios 7 SDK 설치하기 14 3.3 Xcode 시작하기 14 간단한 ios 7앱만들기 _17 4.1 Xcode 5 시작하기 18 4.2 ios 앱 사용자 인터페이스 만들기 22 4.3 컴포넌트 속성 변경하기 25 4.4 사용자 인터페이스에 오브젝트 추가하기 26 4.5 Xcode 5에서 ios 7 앱 빌드하고 실행하기 27 4.6 빌드 에러 처리하기 28 4.7 서로 다른 화면 크기 테스트하기 28 4.8 여러 ios 버전에서 사용자 인터페이스 화면 테스트하기 28 4.9 애플리케이션 성능 모니터링하기 30 4.10 요약 31 차례 v
CHAPTER 5 CHAPTER 6 CHAPTER 7 CHAPTER 8 ios 7아키텍처와 SDK프레임워크 _33 5.1 iphone OS가 ios로 33 5.2 ios 7 아키텍처 개요 34 5.3 코코아 터치 계층 35 5.4 ios 미디어 계층 38 5.5 ios 코어 서비스 계층 40 5.6 파운데이션 프레임워크 42 5.7 ios 코어 OS 계층 43 Xcode 5로 ios 7기기에서 앱 테스트하기 _ 45 6.1 Apple ID로 Xcode 설정하기 46 6.2 인증서 서명 생성하기 47 6.3 개발자 포털에 기기 추가하기 49 6.4 등록된 기기에서 애플리케이션 실행하기 49 6.5 요약 50 오브젝티브 - C 프로그래밍 기초 _ 51 7.1 오브젝티브-C 데이터 타입 및 변수 51 7.2 오브젝티브-C 표현식 52 7.3 if와 else로 오브젝티브-C 흐름 제어하기 56 7.4 for 문을 이용한 반복 58 7.5 do와 while을 이용한 반복 58 7.6 오브젝티브-C do... while 반복 59 오브젝티브 - C로개발하는 객체지향 프로그래밍 기초 _ 61 8.1 객체란? 61 8.2 클래스란? 62 8.3 오브젝티브-C 클래스 인터페이스 선언 62 8.4 클래스에 인스턴스 변수 추가하기 63 8.5 클래스 메서드 정의하기 63 8.6 오브젝티브-C 클래스 구현 선언하기 65 8.7 클래스 인스턴스 선언 및 초기화하기 65 8.8 Automatic Reference Counting(ARC) 66 8.9 메서드 호출과 인스턴스 데이터 접근하기 67 8.10 오브젝티브-C 그리고 도트 표기법 67 8.11 변수가 저장되는 방법 68 8.12 인다이렉션의 개요 69 8.13 인다이렉션과 객체 71 8.14 인다이렉션과 객체 복사하기 72 8.15 프로그램 영역 만들기 72 8.16 하나로 합치기 73 8.17 객체지향 오브젝티브 - C 코드 구조잡기 74 vi 핵심만 골라 배우는 ios 7 프로그래밍
CHAPTER 9 CHAPTER 10 CHAPTER 11 CHAPTER 12 CHAPTER 13 CHAPTER 14 최신 오브젝티브 - C의 기초 _ 77 9.1 디폴트 프로퍼티 신서사이즈 77 9.2 메서드 순서 79 9.3 NSNumber 문자 79 9.4 배열 문자 80 9.5 딕셔너리 문자 81 9.6 요약 82 ios 7애플리케이션개발아키텍처개요 _83 10.1 Model View Controller(MVC) 83 10.2 타깃 - 액션 패턴, IBOutlet과 IBAction 84 10.3 서브클래싱 85 10.4 델리게이션 86 10.5 요약 86 상호작용하는 ios 7 앱 만들기 _ 87 11.1 새 프로젝트 만들기 87 11.2 사용자 인터페이스 만들기 88 11.3 예제 애플리케이션 빌드하고 실행하기 90 11.4 액션과 아웃렛 추가하기 90 11.5 완성된 애플리케이션을 빌드하고 실행하기 96 11.6 요약 97 키보드를 감추는 ios 7 코드 만들기 _ 99 12.1 예제 앱 만들기 99 12.2 사용자가 리턴키를 터치할 때 키보드 감추기 100 12.3 사용자가 백그라운드를 터치했을 때 키보드 감추기 102 12.4 요약 103 ios 7뷰와윈도우,뷰계층 이해하기 _ 105 13.1 뷰에 대해 105 13.2 UIWindow 클래스 106 13.3 뷰 계층구조 106 13.4 뷰 타입 108 13.5 요약 109 ios 7의 자동 레이아웃 소개 _ 111 14.1 자동 레이아웃의 개요 112 14.2 정렬 114 14.3 고유한 콘텐츠 사이즈 114 14.4 콘텐츠 허깅 우선순위와 압축 제한 우선순위 114 14.5 컨스트레인트를 만드는 세 가지 방법 115 차례 vii
14.6 컨스트레인트에 대한 상세 내용 115 14.7 요약 117 CHAPTER 15 CHAPTER 16 CHAPTER 17 CHAPTER 18 CHAPTER 19 인터페이스 빌더에서 ios 7자동레이아웃 컨스트레인트로 작업하기 _119 15.1 자동 레이아웃의 간단한 예제 119 15.2 인터페이스 빌더에서 자동 레이아웃 켜고 끄기 120 15.3 인터페이스 빌더의 자동 레이아웃 기능들 125 15.4 인터페이스 빌더에서 새로운 컨스트레인트 생성하기 132 15.5 자동 레이아웃 문제 해결하기 133 15.6 요약 135 ios 7자동레이아웃예제 _137 16.1 프로젝트 준비하기 137 16.2 사용자 인터페이스 설계하기 137 16.3 자동 레이아웃 컨스트레인트 추가하기 139 16.4 컨스트레인트 우선순위 조절하기 141 16.5 애플리케이션 테스트하기 144 16.6 요약 144 코드에서 ios 7자동레이아웃 컨스트레인트 구현하기 _ 145 17.1 코드에서 컨스트레인트 생성하기 145 17.2 컨스트레인트를 뷰에 추가하기 147 17.3 자동 리사이징 끄기 148 17.4 예제 애플리케이션 149 17.5 뷰 생성하기 149 17.6 컨스트레인트 생성하기와 추가하기 150 17.7 컨스트레인트 제거하기 151 17.8 요약 152 ios 7에서교차계층구조 자동레이아웃컨스트레인트 구현하기 _ 153 18.1 예제 애플리케이션 153 18.2 아웃렛 구축하기 155 18.3 이전 컨스트레인트를 제거하는 코드 작성하기 156 18.4 교차 계층구조 컨스트레인트 추가하기 157 18.5 애플리케이션 테스트하기 157 18.6 요약 157 ios 7자동레이아웃 시각적 형식 언어 이해하기 _ 159 19.1 시각적 형식 언어 소개 159 19.2 시각적 형식 언어 예제 160 19.3 constraintswithvisualformat 메서드 이용하기 161 19.4 요약 163 viii 핵심만 골라 배우는 ios 7 프로그래밍
CHAPTER 20 CHAPTER 21 CHAPTER 22 CHAPTER 23 Xcode 5에서 스토리보드 사용하기 _ 165 20.1 스토리보드 예제 프로젝트 만들기 166 20.2 스토리보드 접근하기 166 20.3 스토리보드에 Scenes 추가하기 168 20.4 스토리보드 Segues 구성하기 169 20.5 스토리보드 전환 구성하기 170 20.6 Scene과 뷰 컨트롤러 연결하기 171 20.7 화면들 사이의 데이터 전달 172 20.8 스토리보드 Segue 되돌리기 174 20.9 프로그램으로 스토리보드 Segue 호출하기 175 20.10 요약 176 Xcode 5의스토리보드를이용한 ios 7탭바애플리케이션만들기 _177 21.1 탭 바 개요 177 21.2 멀티뷰 애플리케이션의 뷰 컨트롤러 이해하기 178 21.3 탭 바 예제 애플리케이션 설정하기 178 21.4 프로젝트 파일 살펴보기 179 21.5 최초의 뷰 컨트롤러 이름 바꾸기 179 21.6 두 번째 콘텐츠 뷰를 위한 뷰 컨트롤러 추가하기 179 21.7 탭 바 컨트롤러를 스토리보드에 추가하기 180 21.8 두 번째 뷰 컨트롤러를 스토리보드에 추가하기 181 21.9 뷰 컨트롤러 사용자 인터페이스 설계하기 183 21.10 탭 바 아이템 설정하기 184 21.11 애플리케이션 빌드하고 실행하기 185 21.12 요약 185 Xcode 5스토리보드와 ios 7테이블뷰의개요 _187 22.1 테이블 뷰의 개요 188 22.2 정적 테이블 뷰 vs. 동적 테이블 뷰 188 22.3 테이블 뷰 델리게이트와 데이터소스 188 22.4 테이블 뷰 스타일 189 22.5 테이블 뷰 셀 스타일 190 22.6 테이블 뷰 셀 재사용 190 22.7 요약 192 프로토타입테이블뷰셀이있는 동적테이블뷰를만들기위하여 Xcode 5스토리보드이용하기 _193 23.1 예제 프로젝트 생성하기 193 23.2 스토리보드에 테이블 뷰 컨트롤러 추가하기 194 23.3 UITableViewController와 UITableViewCell 하위 클래스 생성하기 195 23.4 셀 재사용 식별자 선언하기 196 23.5 스토리보드 UITableView 프로토타입 셀 설계하기 197 23.6 CarTableViewCell 클래스 수정하기 198 차례 ix
23.7 테이블 뷰 데이터소스 생성하기 199 23.8 이미지 파일 다운로드하여 추가하기 202 23.9 애플리케이션 컴파일하고 실행하기 203 23.10 요약 204 CHAPTER 24 CHAPTER 25 CHAPTER 26 CHAPTER 27 Xcode 5에서스토리보드를이용한 ios 7 테이블뷰내비게이션구현하기 _205 24.1 내비게이션 컨트롤러 이해하기 205 24.2 스토리보드에 새로운 화면 추가하기 206 24.3 내비게이션 컨트롤러 추가하기 207 24.4 스토리보드 Segue 구축하기 208 24.5 CarDetailViewController 클래스 수정하기 209 24.6 prepareforsegue를 이용한 스토리보드 화면 사이에 데이터 전달하기 211 24.7 애플리케이션 테스트하기 212 24.8 요약 213 Xcode 5스토리보드를이용한 정적 테이블 뷰 만들기 _ 215 25.1 정적 테이블 프로젝트의 개요 215 25.2 프로젝트 생성하기 216 25.3 테이블 뷰 컨트롤러 추가하기 216 25.4 테이블 뷰 콘텐츠 타입 변경하기 217 25.5 정적 테이블 설계하기 217 25.6 테이블 셀에 항목 추가하기 218 25.7 StaticTableViewController 클래스 수정하기 220 25.8 애플리케이션 빌드하고 실행하기 220 25.9 요약 221 아이패드 ios 7 스플릿뷰와 팝오버 예제 _ 223 26.1 Split View와 Popover의 개요 223 26.2 아이패드 스플릿 뷰와 팝오버 예제 프로젝트에 대하여 224 26.3 프로젝트 생성하기 224 26.4 프로젝트 다시 살펴보기 225 26.5 마스터 뷰 항목 구성하기 226 26.6 디테일 뷰 컨트롤러 구성하기 228 26.7 마스터 뷰에 선택된 것과 디테일 뷰 연결하기 229 26.8 팝오버 구현 230 26.9 애플리케이션 테스트하기 231 26.10 요약 232 UIPageViewController를이용한 페이지 기반의 ios 7애플리케이션구현하기 _233 27.1 UIPageViewController 클래스 233 27.2 UIPageViewController 데이터소스 234 x 핵심만 골라 배우는 ios 7 프로그래밍
27.3 내비게이션 방향 234 27.4 스파인 위치 235 27.5 UIPageViewController 델리게이트 프로토콜 235 27.6 요약 236 CHAPTER 28 CHAPTER 29 CHAPTER 30 CHAPTER 31 ios 7 UIPageViewController 예제 애플리케이션 _ 237 28.1 Xcode 페이지 기반 애플리케이션 템플릿 237 28.2 프로젝트 만들기 238 28.3 콘텐트 뷰 컨트롤러 추가하기 238 28.4 데이터 모델 만들기 240 28.5 UIPageViewController 초기화하기 244 28.6 UIPageViewController 애플리케이션 실행하기 246 28.7 요약 246 ios 7 UIPickerView와 UIDatePicker컴포넌트사용하기 _247 29.1 DatePicker와 PickerView 컴포넌트 247 29.2 DatePicker 예제 248 29.3 사용자 인터페이스 디자인하기 248 29.4 Date Picker 예제 기능 구현하기 249 29.5 Date Picker 애플리케이션 빌드 및 실행하기 250 ios 7 UIPickerView예제 _253 30.1 ios 7 PickerView 프로젝트 만들기 253 30.2 UIPickerView 델리게이트와 데이터소스 253 30.3 PickerViewController.h 파일 254 30.4 사용자 인터페이스 설계하기 255 30.5 배열 초기화하기 256 30.6 데이터소스 프로토콜 구현하기 257 30.7 델리게이트 프로토콜 구현하기 258 30.8 키보드 감추기 258 30.9 애플리케이션 테스트하기 259 ios 7에서 디렉터리 다루기 _ 261 31.1 애플리케이션 Documents 디렉터리 262 31.2 오브젝티브-C NSFileManager, NSFileHandle과 NSData 클래스 262 31.3 오브젝티브-C의 경로명 이해하기 263 31.4 NSFileManager 인스턴스 객체에 대한 참조체 얻기 263 31.5 현재 작업 디렉터리 확인하기 263 31.6 Documents 디렉터리 확인하기 264 31.7 Temporary 디렉터리 확인하기 265 31.8 디렉터리 변경하기 265 31.9 새로운 디렉터리 만들기 266 차례 xi
31.10 디렉터리 삭제하기 267 31.11 디렉터리 내용 목록 표시하기 268 31.12 파일이나 디렉터리 속성 구하기 268 CHAPTER 32 CHAPTER 33 CHAPTER 34 ios 7에서 파일 다루기 _ 271 32.1 NSFileManager 인스턴스 만들기 271 32.2 파일이 존재하는지 확인하기 272 32.3 두 파일의 내용 비교하기 272 32.4 파일의 Readable/Writable/Executable/Deletable 상태 확인하기 272 32.5 파일 옮기기와 이름 바꾸기 273 32.6 파일 복사하기 273 32.7 파일 제거하기 274 32.8 Symbolic Link 만들기 274 32.9 NSFileManager로 파일 읽고 쓰기 274 32.10 NSFileHandle 클래스로 파일 작업하기 275 32.11 NSFileHandle 객체 만들기 275 32.12 NSFileHandle 파일 Offsets과 Seeking 276 32.13 파일에서 데이터 읽기 277 32.14 파일에 데이터 쓰기 277 32.15 파일 자르기 278 32.16 요약 278 ios 7디렉터리관리및 파일 입출력 예제 _ 279 33.1 예제 애플리케이션 279 33.2 애플리케이션 프로젝트 설정하기 279 33.3 사용자 인터페이스 설계하기 280 33.4 애플리케이션 시작 시 데이터 파일 체크하기 281 33.5 액션 메서드 구현하기 282 33.6 예제 빌드 및 실행하기 282 ios 7앱에서 icloud저장소사용할준비하기 _285 34.1 icloud란? 285 34.2 icloud Data Storage 서비스 286 34.3 icloud 저장소를 사용할 애플리케이션 준비하기 286 34.4 ios 7 애플리케이션을 위해 icloud 지원 활성화하기 287 34.5 icloud Entitlements 파일 확인하기 287 34.6 Entitlements 파일 직접 생성하기 288 34.7 다중 유비쿼티 컨테이너 접근하기 289 34.8 유비쿼티 컨테이너 URL 정의하기 290 34.9 요약 290 xii 핵심만 골라 배우는 ios 7 프로그래밍
CHAPTER 35 CHAPTER 36 CHAPTER 37 ios 7 UIDocument클래스로 파일 관리하기 _ 291 35.1 UIDocument 클래스 291 35.2 UIDocument 클래스 서브클래싱 292 35.3 충돌 해결과 도큐먼트 상태 292 35.4 UIDocument 예제 애플리케이션 293 35.5 UIDocument 하위 클래스 만들기 293 35.6 사용자 인터페이스 디자인하기 294 35.7 애플리케이션 데이터 구조 구현하기 295 35.8 contentsfortype 메서드 구현하기 295 35.9 loadfromcontents 메서드 구현하기 296 35.10 앱 시작 시 도큐먼트 로드하기 296 35.11 도큐먼트 콘텐트 저장하기 299 35.12 애플리케이션 테스트하기 300 35.13 요약 300 ios 7 애플리케이션에서 icloud저장소사용하기 _301 36.1 icloud 사용 가이드라인 301 36.2 icloud 접근을 위해 icloudstore 애플리케이션 준비하기 302 36.3 뷰 컨트롤러 구성하기 303 36.4 viewdidload 메서드 구현하기 303 36.5 metadataquerydidfinishgathering 메서드 구현하기 306 36.6 savedocument 메서드 구현하기 308 36.7 icloud Document와 Data Storage 활성화하기 309 36.8 icloud 애플리케이션 실행하기 310 36.9 icloud 기반 도큐먼트 리뷰 및 삭제하기 310 36.10 Xcode 디버깅 디버그 내비게이터에서 icloud 활성화 확인하기 310 36.11 로컬 파일을 어디서나 사용할 수 있게 만들기 311 36.12 요약 312 icloud를이용한 ios 7 Key-Value Data 동기화하기 _ 313 37.1 icloud Key-Value Data 저장소 313 37.2 애플리케이션 사이 데이터 공유하기 314 37.3 데이터 저장소 제약점 315 37.4 충돌 해결 315 37.5 Key-Value 변경 시 노티피케이션 받기 315 37.6 icloud Key-Value 데이터 저장소 예제 315 37.7 icloud Key-Value 데이터 저장소를 위해 애플리케이션 활성화하기 316 37.8 사용자 인터페이스 구현하기 317 37.9 뷰 컨트롤러 구현하기 318 37.10 viewdidload 메서드 수정하기 318 37.11 노티피케이션 메서드 구현하기 319 37.12 savekey 메서드 구현하기 319 37.13 애플리케이션 테스트하기 320 차례 xiii
CHAPTER 38 CHAPTER 39 CHAPTER 40 CHAPTER 41 아카이빙을이용한 ios 7데이터영구저장 _321 38.1 아카이빙의 개요 321 38.2 아카이빙 예제 애플리케이션 322 38.3 사용자 인터페이스 설계하기 323 38.4 시작 시 아카이브 파일 존재 확인하기 324 38.5 액션 메서드에서 객체 데이터 아카이빙하기 325 38.6 애플리케이션 테스트하기 326 38.7 요약 326 SQLite를사용한 ios 7데이터베이스구현 _327 39.1 SQLite란? 327 39.2 구조적 질의 언어(SQL) 328 39.3 맥 OS X에서 SQLite 사용하기 328 39.4 SQLite 연동을 위한 ios 애플리케이션 프로젝트 준비하기 330 39.5 주요 SQLite 기능들 331 39.6 SQLite 데이터베이스 선언하기 332 39.7 데이터베이스 열기 및 생성하기 332 39.8 SQL 문 준비 및 실행하기 333 39.9 데이터베이스 테이블 생성하기 333 39.10 데이터베이스 테이블에서 데이터 가져오기 334 39.11 SQLite 데이터베이스 닫기 335 39.12 요약 335 SQLite기반 ios 7애플리케이션예제 _337 40.1 SQLite ios 애플리케이션 예제에 대해 337 40.2 SQLite 애플리케이션 프로젝트 준비 및 생성하기 337 40.3 sqlite3.h 임포트와 데이터베이스 참조 선언하기 338 40.4 사용자 인터페이스 설계하기 338 40.5 데이터베이스와 테이블 만들기 340 40.6 SQLite 데이터베이스에 데이터를 저장하는 코드 구현하기 341 40.7 SQLite 데이터베이스에서 데이터를 가져오는 코드 구현하기 342 40.8 애플리케이션 빌드 및 실행하기 343 40.9 요약 344 코어데이터를이용한 ios 7데이터베이스작업 _345 41.1 코어 데이터 스택 345 41.2 매니지드 객체 346 41.3 매니지드 객체 콘텍스트 346 41.4 매니지드 객체 모델 347 41.5 영구 저장소 코디네이터 348 41.6 영구 객체 저장소 348 41.7 엔티티 디스크립션 정의 348 41.8 매니지드 객체 콘텍스트 얻기 350 xiv 핵심만 골라 배우는 ios 7 프로그래밍
41.9 엔티티 디스크립션 얻기 350 41.10 매니지드 객체 만들기 350 41.11 매니지드 객체 속성 읽기 및 쓰기 351 41.12 매니지드 객체 구해오기 351 41.13 조건에 따른 매니지드 객체 가져오기 352 41.14 요약 352 CHAPTER 42 CHAPTER 43 CHAPTER 44 CHAPTER 45 ios 7코어데이터튜토리얼 _353 42.1 ios 코어 데이터 예제 애플리케이션 353 42.2 코어 데이터 기반의 ios 애플리케이션 만들기 353 42.3 엔티티 디스크립션 만들기 354 42.4 프로젝트에 스토리보드 추가하기 355 42.5 뷰 컨트롤러 추가하기 356 42.6 사용자 인터페이스 설계하기 357 42.7 코어 데이터를 이용하여 영구 저장소에 데이터 저장하기 359 42.8 코어 데이터를 이용하여 영구 저장소에서 데이터 가져오기 359 42.9 예제 애플리케이션 빌드 및 실행하기 360 42.10 요약 361 ios 7 멀티터치, 탭과 제스처에 대해 _ 363 43.1 리스펀더 체인 363 43.2 다음 리스펀더로 이벤트 전달하기 364 43.3 제스처 365 43.4 탭 365 43.5 터치 365 43.6 터치 노티피케이션 메서드 365 43.7 요약 366 ios 7터치,멀티터치와탭 예제 애플리케이션 _ 367 44.1 ios 7 탭과 터치 예제 애플리케이션 367 44.2 ios 터치 프로젝트 만들기 368 44.3 사용자 인터페이스 설계하기 368 44.4 뷰에서 멀티터치 활성화하기 369 44.5 touchesbegan 메서드 구현하기 369 44.6 touchesmoved 메서드 구현하기 370 44.7 touchesended 메서드 구현하기 370 44.8 터치의 좌표 구하기 371 44.9 터치 예제 애플리케이션 빌드 및 실행하기 371 ios 7터치스크린 제스처 감지하기 _ 373 45.1 ios 7 제스처 예제 애플리케이션 373 45.2 예제 프로젝트 만들기 373 45.3 사용자 인터페이스 설계하기 374 차례 xv
45.4 touchesbegan 메서드 구현하기 375 45.5 touchesmoved 메서드 구현하기 375 45.6 touchesended 메서드 구현하기 376 45.7 제스처 예제 빌드 및 실행하기 376 45.8 요약 376 CHAPTER 46 CHAPTER 47 CHAPTER 48 CHAPTER 49 ios 7 Gesture Recognizers를통한 제스처 식별하기 _ 377 46.1 UIGestureRecognizer 클래스 377 46.2 인식기 액션 메시지 378 46.3 불연속 및 연속된 제스처 379 46.4 제스처에서 데이터 얻기 379 46.5 탭 제스처 인식하기 379 46.6 핀치 제스처 인식하기 380 46.7 회전 제스처 인식하기 380 46.8 팬과 드래깅 제스처 인식하기 380 46.9 스와이프 제스처 인식하기 381 46.10 롱 터치(터치와 홀드) 제스처 인식하기 381 46.11 요약 382 ios 7제스처인식튜토리얼 _383 47.1 제스처 인식 프로젝트 만들기 383 47.2 사용자 인터페이스 설계하기 383 47.3 액션 메서드 구현하기 385 47.4 제스처 인식 애플리케이션 테스트하기 386 ios 7컬렉션뷰와 플로우 레이아웃의 개요 _ 387 48.1 컬렉션 뷰의 개요 388 48.2 UICollectionView 클래스 389 48.3 UICollectionViewCell 클래스 390 48.4 UICollectionReusableView 클래스 391 48.5 UICollectionViewFlowLayout 클래스 391 48.6 UICollectionViewLayoutAttributes 클래스 391 48.7 UICollectionViewDataSource 프로토콜 392 48.8 UICollectionViewDelegate 프로토콜 393 48.9 UICollectionViewDelegateFlowLayout 프로토콜 394 48.10 셀과 뷰 재사용 395 48.11 요약 397 ios 7스토리보드기반의 컬렉션 뷰 튜토리얼 _ 399 49.1 컬렉션 뷰 예제 프로젝트 생성하기 399 49.2 템플릿 뷰 컨트롤러 제거하기 399 49.3 컬렉션 뷰 컨트롤러를 스토리보드에 추가하기 400 49.4 프로젝트에 컬렉션 뷰 셀 클래스 추가하기 401 xvi 핵심만 골라 배우는 ios 7 프로그래밍
49.5 셀 프로토타입 설계하기 402 49.6 데이터 모델 구현하기 404 49.7 데이터 소스 구현하기 405 49.8 애플리케이션 테스트하기 407 49.9 셀 항목에 대한 크기 설정하기 408 49.10 스크롤 방향 변경하기 409 49.11 추가적인 뷰 구현하기 411 49.12 추가적인 뷰 프로토콜 메서드 구현하기 412 49.13 컬렉션 뷰 항목 삭제하기 413 49.14 요약 414 CHAPTER 50 CHAPTER 51 CHAPTER 52 ios 7컬렉션뷰플로우레이아웃의 하위 클래스 만들기와 확장하기 _ 415 50.1 예제 레이아웃 클래스에 대하여 416 50.2 UICollectionViewFlowLayout 클래스의 하위 클래스 만들기 416 50.3 새로운 레이아웃 클래스 확장하기 416 50.4 layoutattributesforitematindexpath 메서드 구현하기 417 50.5 layoutattributesforelementsinrect 메서드 구현하기 418 50.6 modifylayoutattributes 메서드 구현하기 419 50.7 새로운 레이아웃과 핀치 제스처 인식기 추가하기 420 50.8 핀치 인식기 구현하기 421 50.9 이미지 잘림 피하기 423 50.10 애플리케이션 테스트하기 423 50.11 요약 424 코어 그래픽스로 ios 7 2D그래픽그리기 _425 51.1 코어 그래픽스와 쿼츠 2D 소개 425 51.2 drawrect 메서드 426 51.3 점, 좌표와 픽셀 426 51.4 그래픽 콘텍스트 427 51.5 쿼츠 2D에서 색 작업하기 427 51.6 요약 428 코어 그래픽스와 코어이미지를사용하는 ios 7그래픽튜토리얼 _429 52.1 ios 드로잉 예제 애플리케이션 429 52.2 새로운 프로젝트 만들기 429 52.3 UIView의 하위 클래스 만들기 430 52.4 UIView 서브클래스에 drawrect 메서드 위치시키기 430 52.5 선 그리기 431 52.6 경로 그리기 434 52.7 사각형 그리기 435 52.8 타원 및 원 그리기 436 52.9 색으로 경로 채우기 437 52.10 호 그리기 439 차례 xvii
52.11 3차 베지어 곡선 그리기 440 52.12 2차 베지어 곡선 그리기 441 52.13 점선 그리기 442 52.14 그림자 그리기 443 52.15 그라데이션 그리기 444 52.16 그래픽 콘텍스트에 이미지 그리기 448 52.17 코어 이미지 프레임워크를 통한 이미지 필터링 450 52.18 요약 452 CHAPTER 53 CHAPTER 54 CHAPTER 55 코어애니메이션을이용한 ios 7 애니메이션 기초 _ 453 53.1 UIView 코어 애니메이션 블록 453 53.2 애니메이션 커브 이해하기 454 53.3 애니메이션 종료 시 노티피케이션 받기 455 53.4 아핀 변환 수행하기 455 53.5 동시에 수행되는 변환 456 53.6 애니메이션 예제 애플리케이션 만들기 456 53.7 인터페이스 파일 구현하기 456 53.8 UIView에서 그리기 457 53.9 화면 터치 인식 및 애니메이션 수행하기 457 53.10 애니메이션 애플리케이션 빌드 및 실행하기 459 53.11 요약 460 ios 7 UIKit다이나믹스개요 _461 54.1 UIKit 다이나믹스 이해하기 461 54.2 UIKit 다이나믹스 아키텍처 462 54.3 ios 7 애플리케이션에서 UIKit 다이나믹스 구현하기 464 54.4 다이나믹스 애니메이터 초기화 464 54.5 중력 동작 설정하기 465 54.6 충돌 동작 설정하기 466 54.7 결부 동작 설정하기 468 54.8 스냅 동작 설정하기 470 54.9 푸시 동작 설정하기 470 54.10 UIDynamicItemBehavior 클래스 472 54.11 커스텀 동작을 생성하기 위하여 동작들 결합하기 473 54.12 요약 474 ios 7 UIKit다이나믹스튜토리얼 _475 55.1 UIKit 다이나믹스 예제 프로젝트 생성하기 475 55.2 다이나믹스 항목 추가하기 475 55.3 다이나믹스 애니메이터 인스턴스 생성하기 477 55.4 뷰에 중력 추가하기 478 55.5 충돌 동작 구현하기 479 55.6 앵커 포인트에 뷰 붙이기 480 xviii 핵심만 골라 배우는 ios 7 프로그래밍
55.7 두 개의 뷰 사이에 스프링 연결 구현하기 483 55.8 요약 484 CHAPTER 56 CHAPTER 57 CHAPTER 58 CHAPTER 59 ios 7스프라이트킷 프로그래밍 개요 _ 485 56.1 스프라이트 킷이란? 485 56.2 스프라이트 킷 게임의 핵심 요소들 486 56.3 스프라이트 킷 게임 계층구조 예제 489 56.4 스프라이트 킷 게임 렌더링 루프 490 56.5 요약 491 ios 7스프라이트킷 게임 튜토리얼 _ 493 57.1 스프라이트 킷 데모 게임에 대하여 493 57.2 SpriteKitDemo 프로젝트 생성하기 495 57.3 SpriteKit 게임 템플릿 프로젝트 리뷰하기 495 57.4 게임 화면 클래스 생성하기 497 57.5 환영 화면 구현하기 498 57.6 궁사 화면으로 전환하기 500 57.7 궁사 화면 준비하기 502 57.8 텍스처 아틀라스 추가하기 503 57.9 아틀라스에서 텍스처 얻기 504 57.10 애니메이션 텍스처 아틀라스 준비하기 506 57.11 궁사 스프라이트 노드 애니메이션하기 507 57.12 화살 스프라이트 노드 생성하기 508 57.13 화살 쏘기 509 57.14 공 스프라이트 노드 추가하기 509 57.15 요약 512 ios 7 스프라이트킷 충돌 핸들링 튜토리얼 _ 513 58.1 카테고리 비트 마스크 정의하기 513 58.2 카테고리 마스크를 스프라이트 노드에 할당하기 514 58.3 충돌과 접촉 마스크 구성하기 515 58.4 접촉 델리게이트 구현하기 516 58.5 노드들 간에 물리 연결 구현하기 518 58.6 게임 오버 519 58.7 요약 521 ios 7스프라이트킷 파티클 이미터 튜토리얼 _ 523 59.1 파티클 이미터란? 523 59.2 파티클 이미터 편집기 524 59.3 SKEmitterNode 클래스 524 59.4 파티클 이미터 편집기 사용하기 525 59.5 파티클 이미터 노드 프로퍼티들 527 59.6 파티클 이미터 편집기 경험해보기 529 차례 xix
59.7 파티클 이미터 효과를 이용하여 공 터트리기 530 59.8 터지는 파티클 이미터 효과 추가하기 532 59.9 요약 534 CHAPTER 60 CHAPTER 61 CHAPTER 62 CHAPTER 63 ios 7앱에iAd연동하기 _535 60.1 ios 광고 옵션들 536 60.2 애플리케이션 내에서 iad 실행할 준비하기 536 60.3 iad 광고 형식 536 60.4 iad 아이폰 예제 애플리케이션 만들기 540 60.5 Xcode 프로젝트에 iad 프레임워크 추가하기 541 60.6 배너 광고 활성화하기 541 60.7 중간 사각 광고 추가하기 542 60.8 삽입 광고 구현하기 544 60.9 iad 테스트 설정하기 546 60.10 iad 가동 준비하기 547 60.11 요약 547 ios 7멀티태스킹, 백그라운드전송서비스, 그리고 패칭 _ 549 61.1 ios 애플리케이션 상태 이해하기 549 61.2 멀티태스킹 애플리케이션의 생명주기에 대한 개념 550 61.3 멀티태스킹 지원 체크하기 552 61.4 ios 애플리케이션을 위한 멀티태스킹 활성화하기 552 61.5 지원되는 백그라운드 실행의 형태 553 61.6 백그라운드 패치의 개요 554 61.7 원격 노티피케이션의 개요 556 61.8 로컬 노티피케이션의 개요 557 61.9 백그라운드 전송 서비스의 개요 557 61.10 백그라운드 실행 규칙 558 61.11 요약 558 ios 7백그라운드 전송 서비스 튜토리얼 _ 559 62.1 예제 프로젝트 생성하기 559 62.2 handleeventsforbackgroundurlsession 메서드 560 62.3 사용자 인터페이스 설계하기 560 62.4 뷰 컨트롤러 구성하기 561 62.5 세션 델리게이트 메서드 구현하기 563 62.6 애플리케이션 테스트하기 565 62.7 요약 566 ios 7로컬노티피케이션 예약하기 _ 567 63.1 로컬 노티피케이션 앱 프로젝트 만들기 568 63.2 프로젝트에 사운드 파일 추가하기 568 63.3 애플리케이션 델리게이트 메서드 위치시키기 568 xx 핵심만 골라 배우는 ios 7 프로그래밍
63.4 로컬 노티피케이션 예약하기 569 63.5 애플리케이션 테스트하기 569 63.6 예약된 노티피케이션 취소하기 570 63.7 즉시 로컬 노티피케이션 호출하기 570 63.8 요약 571 CHAPTER 64 CHAPTER 65 CHAPTER 66 CHAPTER 67 ios 7애플리케이션 상태 보존과 복원의 개요 _ 573 64.1 보존과 복원 절차 574 64.2 보존과 복원 선택하기 575 64.3 복원 식별자 할당하기 575 64.4 UIKit의 디폴트 보존 기능들 576 64.5 추가적인 상태 정보 저장하기와 복원하기 576 64.6 복원 절차 이해하기 577 64.7 일반적인 애플리케이션 상태 저장하기 579 64.8 요약 580 ios 7상태보존과 복원 튜토리얼 _ 581 65.1 예제 애플리케이션 생성하기 581 65.2 상태 보존이 없는 애플리케이션 만들기 581 65.3 상태 보존 적용하기 582 65.4 복원 식별자 설정하기 583 65.5 뷰 컨트롤러 상태를 인코딩하기와 디코딩하기 584 65.6 스토리보드에 내비게이션 컨트롤러 추가하기 586 65.7 세 번째 뷰 컨트롤러 추가하기 587 65.8 복원 클래스 생성하기 590 65.9 요약 591 MKMapItem을이용하여 ios 7애플리케이션과지도통합하기 _593 66.1 MKMapItem과 MKPlacemark 클래스 594 66.2 순방향 및 역방향 지오코딩에 대한 소개 594 66.3 MKPlacemark 인스턴스 생성하기 596 66.4 MKMapItem으로 작업하기 597 66.5 MKMapItem 옵션들과 턴 방식 길찾기 활성화하기 598 66.6 상세 항목을 MKMapItem에 추가하기 600 66.7 요약 601 ios 7 MKMapItem 애플리케이션 예제 _ 603 67.1 MapItem 프로젝트 생성하기 603 67.2 사용자 인터페이스 설계하기 603 67.3 순방향 지오코딩을 이용하여 목적지 변환하기 605 67.4 지도 실행하기 606 67.5 애플리케이션 빌드하고 실행하기 607 67.6 요약 608 차례 xxi
CHAPTER 68 CHAPTER 69 CHAPTER 70 CHAPTER 71 ios 7코어로케이션프레임워크를 이용하여 위치 정보 얻기 _ 609 68.1 코어 로케이션의 기초 609 68.2 로케이션 정확도 설정하기 610 68.3 거리 필터 구성하기 610 68.4 로케이션 매니저 델리게이트 611 68.5 CLLocation 오브젝트에서 위치 정보 얻기 611 68.6 거리 계산하기 612 68.7 위치 정보와 멀티태스킹 612 68.8 요약 613 ios 7로케이션 예제애플리케이션 _615 69.1 ios 7 로케이션 예제 애플리케이션 만들기 615 69.2 사용자 인터페이스 설계하기 615 69.3 CLLocationManager 객체 레이블 만들기 617 69.4 액션 메서드 구현하기 618 69.5 애플리케이션 델리게이트 메서드 구현하기 618 69.6 로케이션 애플리케이션 빌드 및 실행하기 619 MapKit과 MKMapView클래스를이용하여 ios 7에서지도다루기 _621 70.1 MapKit 프레임워크에 대해 621 70.2 Map Regions 이해하기 622 70.3 MKMapView 튜토리얼 622 70.4 지도 프로젝트 만들기 622 70.5 Xcode 프로젝트에 MapKit 프레임워크 추가하기 623 70.6 내비게이션 컨트롤러 추가하기 623 70.7 MKMapView 인스턴스와 툴바 생성하기 624 70.8 맵 뷰 설정하기 626 70.9 MapView 영역 변경하기 626 70.10 지도 형식 변경하기 627 70.11 아이폰 MapView 애플리케이션 테스트하기 627 70.12 사용자 이동에 따른 맵 뷰 업데이트하기 628 70.13 요약 629 ios 7에서 MapKit로컬검색 사용하기 _ 631 71.1 ios 7 로컬 검색 개요 631 71.2 MapSample 애플리케이션에 로컬 검색 추가하기 633 71.3 로컬 검색 텍스트 필드 추가하기 633 71.4 로컬 검색 수행하기 635 71.5 애플리케이션 테스트하기 636 71.6 요약 637 xxii 핵심만 골라 배우는 ios 7 프로그래밍
CHAPTER 72 CHAPTER 73 ios 7맵길찾기와경로를얻기위하여MKDirectrions이용하기 _639 72.1 MKDirections 개요 639 72.2 MapSample 애플리케이션에 길찾기와 경로 추가하기 641 72.3 프로젝트에 새로운 클래스 추가하기 641 72.4 결과 테이블 뷰 구성하기 642 72.5 결과 테이블 뷰 segue 구현하기 645 72.6 경로 화면 추가하기 646 72.7 경로와 방향 얻기 648 72.8 경로 segue 구축하기 649 72.9 애플리케이션 테스트하기 650 72.10 요약 651 날짜와위치를기반으로한 미리알림을만들기위하여 ios 7 Event Kit이용하기 _653 73.1 Event Kit 프레임워크의 개요 653 73.2 EKEventStore 클래스 654 73.3 데이터베이스에 있는 캘린더 접근하기 656 73.4 현재 미리 알림 접근하기 657 73.5 미리 알림 생성하기 657 73.6 알람 생성하기 658 73.7 예제 프로젝트 생성하기 658 73.8 날짜/시간 기반의 미리 알림 화면을 위한 사용자 인터페이스 설계하기 658 73.9 미리 알림 코드 구현하기 660 73.10 키보드 숨기기 661 73.11 위치 기반 미리 알림 뷰 설계하기 662 73.12 위치 기반 미리 알림 생성하기 662 73.13 애플리케이션 테스트하기 665 73.14 요약 666 CHAPTER 74 CHAPTER 75 ios 7카메라와 포토 라이브러리 접근하기 _ 667 74.1 ios 6 UIImagePickerController 클래스 667 74.2 UIImagePickerController 인스턴스 만들고 구성하기 668 74.3 UIImagePickerController 델리게이트 구성하기 669 74.4 기기의 지원 기능 확인하기 670 74.5 무비와 이미지 저장하기 671 74.6 요약 672 ios 7카메라 예제 애플리케이션 _ 673 75.1 예제 애플리케이션에 대하여 673 75.2 카메라 프로젝트 만들기 674 75.3 사용자 인터페이스 설계하기 674 75.4 액션 메서드 구현하기 676 차례 xxiii
75.5 델리게이트 메서드 구현하기 678 75.6 애플리케이션 빌드 및 실행하기 679 CHAPTER 76 CHAPTER 77 CHAPTER 78 CHAPTER 79 ios 7 애플리케이션에서 비디오 재생하기 _ 681 76.1 MPMoviePlayerController 클래스 개요 681 76.2 지원하는 비디오 포맷 682 76.3 ios 무비 플레이어 예제 애플리케이션 682 76.4 사용자 인터페이스 설계하기 682 76.5 MoviePlayer 인스턴스 선언하기 682 76.6 액션 메서드 구현하기 683 76.7 타깃-액션 노티피케이션 메서드 684 76.8 애플리케이션 빌드 및 실행하기 684 AVAudioPlayer를 이용하여 ios 7에서 오디오 재생하기 _ 685 77.1 지원하는 오디오 포맷 685 77.2 재생 노티피케이션 받기 686 77.3 재생 모니터링 및 제어하기 686 77.4 오디오 예제 애플리케이션 만들기 687 77.5 프로젝트 리소스에 오디오 파일 추가하기 687 77.6 사용자 인터페이스 설계하기 688 77.7 액션 메서드 구현하기 689 77.8 AVAudioPlayer 객체 만들고 초기화하기 689 77.9 AVAudioPlayerDelegate 프로토콜 메서드 구현하기 690 77.10 애플리케이션 빌드 및 실행하기 691 AVAudioRecorder로 ios 7에서 오디오 녹음하기 _ 693 78.1 AVAudioRecorder 튜토리얼의 개요 693 78.2 녹음 프로젝트 만들기 694 78.3 사용자 인터페이스 설계하기 694 78.4 AVAudioRecorder 인스턴스 생성하기 695 78.5 액션 메서드 구현하기 697 78.6 델리게이트 메서드 구현하기 698 78.7 애플리케이션 테스트하기 698 트위터와페이스북을 ios 7애플리케이션에통합하기 _699 79.1 UIActivityController 클래스 699 79.2 Social Framework 700 79.3 Accounts Framework 700 79.4 UIActivityViewController 클래스 이용하기 702 79.5 SLComposeViewController 클래스 이용하기 703 79.6 요약 705 xxiv 핵심만 골라 배우는 ios 7 프로그래밍
CHAPTER 80 CHAPTER 81 CHAPTER 82 CHAPTER 83 CHAPTER 84 UIActivityViewController를 이용한 ios 7페이스북통합튜토리얼 _707 80.1 페이스북 소셜 앱 생성하기 707 80.2 사용자 인터페이스 설계하기 707 80.3 아웃렛과 액션 생성하기 709 80.4 selectimage와 델리게이트 메서드 구현하기 710 80.5 키보드 감추기 711 80.6 페이스북에 메시지 포스팅하기 711 80.7 소셜 애플리케이션 실행하기 712 80.8 요약 713 SLRequest를이용한 ios 7페이스북과트위터통합 _715 81.1 SLRequest와 Account Framework 716 81.2 SLRequest를 이용한 트위터 통합 716 81.3 SLRequest를 이용한 페이스북 통합 719 81.4 요약 721 SLRequest를이용한 ios 7트위터통합튜토리얼 _723 82.1 TwitterApp 프로젝트 생성하기 723 82.2 사용자 인터페이스 설계하기 723 82.3 인터페이스 파일 수정하기 725 82.4 트위터 API 접근하기 726 82.5 gettimeline 메서드 호출하기 728 82.6 Table View 델리게이트 메서드 729 82.7 애플리케이션 빌드하기와 실행하기 730 82.8 요약 730 SKStoreProductViewController 클래스로 판매하기 _ 731 83.1 SKStoreProductViewController 클래스 732 83.2 예제 프로젝트 생성하기 733 83.3 사용자 인터페이스 생성하기 733 83.4 스토어 킷 제품 뷰 컨트롤러 표시하기 734 83.5 델리게이트 메서드 구현하기 735 83.6 Store Kit Framework를 Build Phases에 추가하기 736 83.7 애플리케이션 테스트하기 736 83.8 요약 737 ios 7 애플리케이션에 앱 내 결제 구축하기 _ 739 84.1 앱 내 결제 옵션들 739 84.2 앱 스토어가 호스팅하도록 콘텐츠 업로드하기 740 84.3 앱 내 결제 아이템 구성하기 741 84.4 제품 요청 전송하기 741 84.5 Payment Queue 접근하기 742 차례 xxv
84.6 트랜잭션 감시자 객체 743 84.7 결제 시작하기 743 84.8 트랜잭션 처리 743 84.9 트랜잭션 복원 745 84.10 앱 내 결제 테스트 746 84.11 요약 746 CHAPTER 85 CHAPTER 86 CHAPTER 87 앱내결제를위한 ios 7애플리케이션준비하기 _747 85.1 예제 애플리케이션에 대하여 747 85.2 Xcode 프로젝트 생성하기 748 85.3 앱 내 결제를 위한 App ID 등록하고 활성화하기 748 85.4 itunes Connect에서 애플리케이션 설정하기 749 85.5 앱 내 결제 아이템 생성하기 750 85.6 요약 751 ios 7앱내결제튜토리얼 _753 86.1 애플리케이션 사용자 인터페이스 753 86.2 스토리보드 설계하기 754 86.3 결제 뷰 컨트롤러 생성하기 755 86.4 InAppDemoViewController 클래스 완성하기 756 86.5 PurchaseViewController 클래스 완성하기 758 86.6 애플리케이션 테스트하기 761 86.7 문제 해결 762 86.8 요약 762 ios 7앱내결제를위하여 앱스토어가호스팅하는 콘텐츠 구성하고 생성하기 _ 763 87.1 앱 내 결제에서 호스팅된 콘텐츠를 위한 애플리케이션 구성하기 763 87.2 콘텐츠 패키지를 호스팅하는 앱 내 결제 해부하기 764 87.3 콘텐츠 패키지를 호스팅하는 앱 내 결제 생성하기 765 87.4 호스팅될 콘텐츠 패키지 아카이빙하기 766 87.5 호스팅될 콘텐츠 패키지 검증하기 766 87.6 호스팅될 콘텐츠 패키지 업로드하기 767 87.7 요약 768 CHAPTER 88 앱 스토어에 ios 7애플리케이션제출및준비하기 _769 88.1 ios 배포 인증서 검증하기 769 88.2 애플리케이션에 아이콘과 스플래시 이미지 추가하기 771 88.3 32비트 아키텍처와 64비트 아키텍처 773 88.4 배포를 위해 애플리케이션 아카이브하기 773 88.5 itunes Connect에서 애플리케이션 설정하기 774 88.6 애플리케이션 검증하기와 제출하기 776 xxvi 핵심만 골라 배우는 ios 7 프로그래밍
CHAPTER 89 iad워크벤치를이용하여 ios앱홍보하기 _777 89.1 iad 워크벤치 개요 777 89.2 새로운 iad 광고 생성하기 779 89.3 광고 대상 지정하기 780 89.4 배너 설계하기 782 89.5 요약 783 찾아보기 784 차례 xxvii
옮 긴 이 머 리말 ios 7, 어쩌면 스티브 잡스 이후에 이뤄진 가장 놀랍고 대대적인 변화라고 생각될 정도 로 완전히 바뀌었습니다. 새로워진 화면과 사용자 인터페이스 그리고 기능들, 여러분은 어떠셨나요? 이를 두고 사람들의 갑론을박이 시작되었고, 눈에 보이는 디자인에 대한 이 야기들이 많아졌고, 개발자 그룹들은 달라진 기능들과 없어진 기능들에 대한 질문과 답 변들이 지금까지도 줄을 잇고 있습니다. 결론부터 말하자면, ios 7은 정말로 많은 것들 을 우리에게 가져다주었고, 사용자들에게는 편의성과 일관성을 더해 주었고, 개발자들 에게는 더 많은 것들을 할 수 있게 해주었습니다. 이 책은 ios 7의 모든 내용을 다루고 있습니다. 단지 새로워진 내용만을 설명하는 것이 아니라 예전부터 바탕이 되어 왔던 ios의 구조와 Xcode의 설치를 비롯한 환경 설정까지 (심지어는 애플 계정에 대한 내용까지) 애플리케이션을 개발하는 기술 외에 필요한 모든 내 용을 언급하고 있습니다. 물론, ios 7에 추가된 내용도 다룹니다. 예를 들면, 스프라이 트 킷 기반의 2D 게임 개발, 로컬 맵 검색, UIKit 다이나믹스를 이용한 사용자 인터페이 스 애니메이션과 같은 ios 7의 새로운 기능들도 설명하고 있습니다. 이 책은 여러분이 만들고 싶어하는 앱을 실제로 구현하는 방법을 알려줄 것입니다. 저는 이 책이야말로 아 이폰과 아이패드 애플리케이션을 개발하는 이들이 가장 쉽게 배울 수 있는, 가장 잘 정 리된 책이라고 생각합니다. ios 애플리케이션 개발을 처음 시작하는 입문자들은 물론이 며, 최신 버전의 새로워진 기능들을 익히고자 하는 경험 있는 개발자들에게도 적합한 내용으로 구성되었습니다. 특히, 배운 내용이 실제로 어떻게 구현되고 동작하는지 확인 할 수 있는 예제 프로그램이 모두 있어서 독자 여러분이 직접 확인하고 느낄 수 있도록 되어 있습니다. xxviii 핵심만 골라 배우는 ios 7 프로그래밍
개인적으로 이 책은 저의 열 번째 번역서입니다. 그래서 이 책 번역을 시작할 때부터 매 우 특별한 의미가 있었고, 많은 애정을 가지고 작업한 책입니다. 한 문장 한 문장을 읽고 또 읽어가며 각각의 문장이 독자의 입장에서 어떻게 받아들여질지를 생각하면서 작업했 습니다. 그럼에도 불구하고 저 역시 부족한 사람이라 실수와 모자람이 있을 것입니다. 그 러한 아쉬움을 조금이나마 채우고 인터넷 카페(http://cafe.naver.com/petersbook)를 운영하고 있습니다. 이곳에서 질문과 답변, 예제 코드, 그리고 오탈자에 대한 정보를 공유하도록 하겠습니다. Amazing grace! 부족한 저를 이끄시며 갈 길을 알려주시는 하나님께 가장 먼저 감사 와 찬양을 드립니다. 항상 저를 믿고 응원해 주시는 부모님들께 감사를 드리며, 특히 곁 에서 이해와 지원을 아끼지 않고 응원과 격려를 해주는 최고의 아내(강승희)에게 고마움 과 사랑의 마음을 전합니다. 지금도 세상을 깜짝 놀라게 하려고 힘쓰는 트렌디앱(http:// www.trendyapp.co.kr) 모두에게도 감사와 격려를 보냅니다. 여러분! 잠자는 이 세상을 우 리가 깨울 것이라 믿어요. 이 책이 나오기까지 처음부터 끝까지 힘쓰는 제이펍 에게 감 사를 드립니다. 역자의 어눌한 문장을 세련되고 멋진 문구로 바꿔주는 마법 같은 제이펍 의 능력에 놀라지 않을 수 없습니다. 여러분이 저의 번역 초안을 본다면 제이펍 이 얼마 나 대단하고 놀라운 능력을 지닌 출판사인지 아실 수 있을 것입니다. 최고의 편집과 열 정으로 좋은 책들을 세상에 알리고자 하는 그들의 노력에 존경과 감사의 마음을 전합니 다. 저의 마지막 감사는, 언제나 늘 내 아버지입니다. 아버지! 사랑합니다. 황반석 옮긴이 머리말 xxix
베 타 리 더 후 기 초심자가 읽기에 좋은 책입니다. 각 챕터가 간결하고, 내용의 호흡이 짧아서 쉽게 질리 지 않고 꾸준히 따라가기 좋습니다. :) 좋은 책을 출간 전에 볼 수 있게 해주셔서 감사 합니다! ios 입문자와 이전 버전 경험자 모두를 아우를 수 있는 방대한 내용과 친절한 설명으로 이루어져 있는 책이라 읽는 내내 별다른 어려움 없이 빠르게 내용을 익힐 수 있었습니 다. 챕터 수가 많아서 내심 걱정을 했지만, 책을 따라 앱을 만들어가다 보니 그리 많지는 않았다는 느낌입니다. 또한, 최신 ios 7의 내용을 충실히 다루고 있어서 이전 버전으로 개발했던 개발자들에게도 충분히 도움될 것으로 생각합니다. 이제는 좋은 앱을 개발하 는 일만 남은 것 같네요. 그동안 웹 개발만 하면서 접해 보지 못했던 ios를 이 책을 통해서 접하게 되었네요. 하 하! 우선, 이 책 한 권에 방대한 내용이 담겨 있다는 것에 무척 놀랐습니다. 책의 구성도 개인적으로 선호하는 설명 후 따라 하기 방식이라 마음에 들었고요. 한 장 한 장 읽으면 서 적당한 분량으로 나뉜 챕터와 충실한 예제에 아, 정말 좋은 책이구나! 라는 생각이 들었습니다. 정식 책이 나오면 다시 열심히 읽고 공부해서 저도 앱 개발을 제대로 해보렵 니다. 하하하! xxx 핵심만 골라 배우는 ios 7 프로그래밍
MortzBeat ios 7 출시에 맞춰 개정된 책! 처음 ios를 개발하는 사람이라면 이 책 한 권으로도 개발 에 문제없을 정도로, 꼭 필요한 부분만 추려 풍부한 코드와 함께 잘 설명되어 있습니다. 개발하는 앱의 기능에 따라 필요한 부분만 참조하더라도 매우 유용할 것 같습니다. ios 앱 개발에 익숙하지 않다면 반드시 옆에 두고 참고하기를 추천합니다. ios 5 시절, 이 책의 이전 버전의 책이 한 ios 개발자를 살린 일화가 있습니다. 바로 저 의 이야기입니다. 그런데 개정판의 베타 리딩을 하게 되다니 감회가 정말 새로웠습니다. 궁금한 하나하나 작은 부분까지 상세하게 알려주는, 매력이 넘치는 책입니다. 다시 보니 정말 반갑고, ios 앱 개발자라면 누구에게나 권하고 싶은 책입니다. Beta Readers... 제이펍은 책에 대한 애정과 기술에 대한 열정이 뜨거운 베타 리더들로 하여금 출간되는 모든 서적에 사전 검증을 시행하고 있습니다. 베타리더 후기 xxxi
C H A P T E R 1 이책에대하여 2007년 첫 번째 아이폰이 출시될 때, 당시의 기존 단말기 제조사들은 아이폰을 잠재적인 위협으로 전혀 생각하지 않았다. 마찬가지로, 3년 후에 아이패드가 출시될 때도 개인용 컴 퓨터 업계의 거인들은 아이패드에 대해 조금도 신경쓰지 않았다. 그 당시, 태블릿은 데스 크톱 PC와 노트북 시장과는 완전히 다른 시장을 타깃으로 하는, 그저 거대한 스마트폰이 라고 여겨졌다. 그래서 만약 태블릿이 성공하게 된다면, 델(Dell)과 HP와 같은 회사들의 태 블릿에서 실행되는 태블릿용 윈도우즈 버전으로 마이크로소프트가 그 시장을 지배할 것이 라고 다들 예상했었다. 시간이 흐른 지금, 2013년 여름의 몇몇 헤드라인 뉴스들을 살펴보자. 블랙베리, 스마트폰 시장에서 몇 년간의 경쟁 끝에 매각되다 _ 가디언 블랙베리, 근로자의 최대 40% 해고 _ 월 스트리트 저널 마이크로소프트 태블릿에 9억 달러 쓰다 _ 월 스트리트 저널 마이크로소프트의 최고경영자 스티브 발머, 12개월 내에 은퇴한다 _ BBC 뉴스 마이크로소프트, 노키아 휴대전화 사업 인수 _ 블룸버그 델, PC 판매 부진으로 72% 수익 감소 _ 뉴욕 타임즈 HP, 계속된 PC 판매 부진으로 점유율 감소 _ 벤처비트 1
불과 얼마 전까지는 위에서 언급된 회사들의 시장 점유율과 변화에 대하여 이러한 뉴스 헤 드라인이 나올 것이라고는 상상도 할 수 없었다. 그런데 앞의 헤드라인들에서 특히 주목해 야 할 게 있다. 이러한 뉴스를 시작하게 된 사건들을 거슬러 올라가다 보면 하나의 원인으 로 귀결될 수 있다는 것이다. 그것은 태블릿과 스마트폰의 지속적인 성공이다. 하지만 앞의 헤드라인에서 언급했던 회사들의 진짜 문제는 대부분의 태블릿과 스마트폰이 마이크로소 프트나 노키아, 또는 블랙베리의 운영체제에서 동작하지 않는다는 것이다. 대부분의 태블 릿과 스마트폰은 이들 운영체제 대신에 ios나 안드로이드에서 동작하고 있다. 2013년 6월까지 애플은 ios 기반의 아이폰과 아이패드를 전 세계에 약 4억 개 이상 팔았 다. 중요한 것은 최근 몇 년 동안 기술은 급박하게 바뀌어 왔다는 것이고, 여러분이 아직 ios 앱을 만들어보지 않았다면 어서 시작해야 한다는 것이다. 이 책의 목적은 여러분이 ios 개발의 일반적인 것과 ios 7 SDK의 새로운 기능들을 빠르게 배우도록 하는 것이다. 이 책은 여러분이 ios 개발을 처음이든, 아니면 ios 6로 작업한 경험이 있으며 ios 7의 새 로운 기능을 빠르게 습득하고자 하든지에 따라 활용 방법이 크게 달라질 것이다. 하지만 이 책은 양쪽 모두를 대상으로 하고 있으니 안심해도 좋다. 1.1 ios 만일 여러분이 ios 개발에 완전 처음이라면, 이 책의 전체 내용이 여러분에게 필요하다. 기초부터 시작하는 이 책은 ios 개발환경을 구축하는 데 필요한 전반적인 내용을 제공하 며, ios 애플리케이션과 사용자 인터페이스 설계에 관하여 자세히 살펴본 다음, ios 7의 아 키텍처와 오브젝티브 C 프로그래밍에 관해 소개한다. 또한, 파일 핸들링, 데이터베이스 관 리, 앱 내 결제(In App Purchase), 그래픽 드로잉, 그리고 애니메이션을 다루며, 터치 스크린 핸들링, 제스처 인식, 멀티태스킹, iad 통합, 위치 관리, 로컬 노티피케이션, 카메라 접근, 그리고 비디오 및 오디오 재생에 관한 지원도 다룬다. 또한, 자동 레이아웃, 트위터 및 페이 스북 통합, 이벤트 미리 알림, 앱 내 결제 내용을 관리하는 앱 스토어, 컬렉션 뷰 등을 포 함한 다른 기능들도 다룬다. 게다가, 스프라이트 킷(Sprite Kit) 기반의 게임 개발과 로컬 맵 2 CHAPTER 1 이 책에 대하여
검색, 그리고 UIKit 다이나믹스를 이용한 사용자 인터페이스 애니메이션을 포함한 ios 7의 새로운 기능들도 다룬다. 따라서 이 책의 목표는 여러분의 ios 7용 앱을 만드는 데 필요한 기술들을 가르치는 것이 다. 필자는 여러분이 ios 7 SDK와 Xcode를 다운로드한 상태이며, 인텔 기반의 맥과 함께 개발하려는 어떤 아이디어를 가지고 있어서 시작할 준비가 되었다고 가정할 것이다. 1.2 ios 6 만일 여러분이 핵심만 골라 배우는 ios 6 프로그래밍 (제이펍) 책을 이미 읽었거나 ios 6 SDK에 대한 경험이 있다면, ios 7의 새로운 내용들을 바로 읽어보고 싶을 것이다. ios 7과 Xcode 5의 도입으로 인한 변경 사항들과 특징들을 반영하기 위하여 이 책의 모든 내용이 업데이트되었다. 이전 버전의 책에 포함되지 않았거나 ios 7과 Xcode 5에 대해 다 시 집필된 장들은 다음과 같다. Xcode 5로 ios 7 장치에서 앱 테스트하기(6장) 인터페이스 빌더에서 ios 7 자동 레이아웃 컨스트레인트로 작업하기(15장) ios 7 자동 레이아웃 예제(16장) ios 7 UIKit 다이나믹스 개요(54장) ios 7 UIKit 다이나믹스 튜토리얼(55장) ios 7 스프라이트 킷 프로그래밍 개요(56장) ios 7 스프라이트 킷 게임 튜토리얼(57장) ios 7 스프라이트 킷 충돌 핸들링 튜토리얼(58장) ios 7 스프라이트 킷 파티클 이미터 튜토리얼(59장) ios 7 앱에 iad 연동하기(60장) ios 7 멀티태스킹, 백그라운드 전송 서비스, 그리고 패칭(61장) ios 7 백그라운드 전송 서비스 튜토리얼(62장) ios 7에서 MapKit 로컬 검색 사용하기(71장) ios 7 맵 길찾기와 경로를 얻기 위하여 MKDirections 이용하기(72장) 앱 스토어에 ios 7 애플리케이션 제출 및 준비하기(88장) 1.2 ios 6 개발자를 위하여 3
iad 워크벤치를 이용하여 ios 앱 홍보하기(89장) 또한, 다음의 내용들이 변경되었다. 모든 프로비저닝 예제들은 Xcode 5의 새로운 Capabilities 설정 패널을 사용하도록 업데 이트되었다. 모든 예제 코드는 32비트와 64비트 CPU 아키텍처와의 호환성을 위해 수정되었다. 26장 아이패드 ios 7 스플릿 뷰와 팝오버 예제 는 NIB 파일이 아닌 스토리보드를 사용 하기 위해서 다시 작성하였다. 4장 간단한 ios 7 앱 생성하기 는 새로운 Preview Assistant와 Xcode 5의 성능 모니터링 기능을 다루기 위하여 업데이트되었다. 52장 코어 그래픽스와 코어 이미지를 사용하는 ios 7 그래픽 튜토리얼 은 그림자나 그라데 이션과 같은 것들을 다루기 위하여 내용이 확장되었다. 53장 코어 애니메이션을 이용한 ios 7 애니메이션의 기초 도 애니메이션 블록 메서드 방 식을 사용하여 사용자 인터페이스 객체가 애니메이션되도록 업데이트되었다. 1.3 이 책에서 사용하는 소스 코드와 Xcode 프로젝트 파일은 다음의 URL에서 다운로드받을 수 있다. URL http://www.ebookfrenzy.com/direct/ios7/ 1.4 이 책을 선택한 것에 대해 독자들이 만족하기를 바란다. 혹시 이 책에 대해 언급할 사항, 질문 등이 있으면 feedback@ebookfrenzy.com(저자) 혹은 naya.peter@gmail.com(역자)으로 연락 하길 바란다. 4 CHAPTER 1 이 책에 대하여
1.5 이 책 내용의 정확성을 위해 많은 노력을 했지만, 다양하고 복잡한 주제들을 다루는 책은 몇몇 오류와 실수가 있을 수 있다. 이 책에 대해 알려진 모든 오탈자들과 그 해결책들은 다 음의 URL에서 설명한다. URL http://www.ebookfrenzy.com/errata/ios7.html 혹시 여러분이 위의 URL에 있지 않은 에러를 발견했다면, 우리의 기술 지원팀의 이메일 주 소인 feedback@ebookfrenzy.com으로 보내주길 바란다. 번역서에 대한 오탈자는 역자의 인터넷 카페(http://cafe.naver.com/petersbook)에서 확인할 수 있다. 1.5 오탈자 5
C H A P T E R 2 Apple ios 개발자프로그램에 가입하기 ios 7 기반의 아이폰 애플리케이션 개발의 첫 번째 단계는 등록된 애플 개발자(Registered Apple Developer)와 ios 개발자 프로그램 회원(iOS Developer Program Member)의 차이점에 대 하여 확실히 이해하는 것이다. 차이점에 관해 이해를 하고 나면 비용을 지불하고 ios 개발 자 프로그램에 가입 여부를 결정할 수 있다. 이번 장에서는 두 가지 차이점과 비용, 혜택 등에 관해 정리해보고 각각 등록하는 과정을 알아보기로 하자. 2.1 등록된 애플 개발자가 되는 데 필요한 비용은 없다. 다음의 웹 페이지를 방문하여 등록 절 차를 시작하면 된다. URL http://developer.apple.com/programs/register/ 아이튠즈나 애플 스토어에서 사용하는 애플 ID가 있으면 등록을 위해 사용할 수 있다. 등록 과정이 완료되면 온라인 문서나 튜토리얼과 같은 개발자 자료에 접근할 수 있다. 또 한, 등록된 개발자는 이전 버전의 ios SDK와 Xcode 개발환경을 다운로드받을 수 있다. 7
2.2 Xcode ios 7 SDK 최신 ios SDK와 Xcode 버전은 맥용 앱 스토어(App Store)에서 무료로 다운로드받을 수 있 다. Xcode가 무료이기 때문에 ios 개발자 프로그램으로 업그레이드할 것인지, 아니면 그대 로 등록된 애플 개발자로 남아 있을지에 대한 질문을 다시 받게 된다. 따라서 ios 개발자 프로그램이 주는 혜택을 이해하는 것이 중요하다. 2.3 ios ios 개발자 프로그램의 멤버십은 현재 1년에 99달러다. 앞에서 설명했듯이, 멤버십은 최신 버전의 ios SDK와 Xcode 개발환경을 다운로드받을 수 있다. 하지만 멤버십이 주는 혜택은 등록된 애플 개발자 수준을 훨씬 뛰어 넘는다. 그중 한 가지 혜택은 개발자 프로그램을 통해 실제 기기에서 애플리케이션을 테스트할 수 있는 프로비저닝 프로파일과 인증서를 만들 수 있다는 점이다. Xcode에 디바이스 시뮬레 이터가 있어서 대부분의 테스트를 수행할 수 있지만, 위치 추적 및 디바이스의 움직임과 같은 특정 기능들은 실제 기기에서만 테스트할 수 있다. 그리고 중요한 점은 아이클라우드 (icloud) 접근과 미리 알림(Reminders), 그리고 앱 내 결제 관련한 애플리케이션은 실제 기기 에서만 테스트할 수 있다는 것이다. 또한, ios 개발자 프로그램 멤버는 ios SDK 관련된 모든 종류의 지침서나 사용 지침서에 접근할 수 있으며, 더 중요한 것은 1년에 단 두 번의 문의만 무료로 할 수 있긴 하지만 애플 의 ios 기술 지원 엔지니어에게 기술 문의를 할 수 있다는 점이다. 가장 중요한 점은 ios 개발자 프로그램 멤버만이 앱 스토어를 통한 애플리케이션 판매 및 배포를 할 수 있다는 점이다. 따라서 앱 스토어에 애플리케이션을 올리려면 어느 시점에서는 개발자 프로그램 멤버에 가 입해야 한다. 이제는 언제 가입을 해야 하는가가 문제다. 8 CHAPTER 2 Apple ios 개발자 프로그램에 가입하기
2.4 ios ios 개발자 프로그램 멤버십이 여러 가지 혜택을 제공하며, 특히 애플리케이션을 판매하기 위해서는 필수적이라는 것이 분명해졌다. 그럼, 지금 가입할지 아니면 나중에 가입할지는 개인적인 상황에 따라 다를 것이다. 만약 여러분이 ios 애플리케이션 개발에 관해 공부를 하는 첫 단계이거나 아직까지 멋진 아이디어가 없다면, 등록된 애플 개발자 패키지가 제공 하는 것이면 충분하다. 개발 관련 기술을 습득하고 애플리케이션 개발에 관한 아이디어를 충분히 가다듬은 후에 개발자 프로그램에 가입해도 늦지 않다. 반면에 조만간 프로그램 개발이 끝나고 배포를 계획하고 있거나 실제 기기에서 테스트해야 하는 기능이 있다면 개발자 프로그램에 가입해야 한다. 2.5 ios 만약 지금 여러분이 속한 회사에서 사용할 ios 애플리케이션을 개발하려고 하는 것이라 면, 회사가 이미 멤버십 가입을 했는지 확인하는 것이 필요하다. 가입이 되어 있다면, 회사 의 프로그램 관리자에게 연락하여 개발 팀원으로 참여할 수 있도록 ios 개발자 프로그램 멤버 센터의 초대장을 요청하자. 이 과정이 진행되면 멤버십을 활성화시킬 수 있는 링크가 포함된 You Have Been Invited to Join an Apple Developer Program 이라는 제목의 이메 일을 애플로부터 받을 것이다. 여러분의 회사가 개발자 프로그램 멤버십 가입을 하지 않았 다면 다음의 링크를 통해 가입할 수 있다. URL http://developer.apple.com/programs/ios/ 가입 옵션은 기업과 개인 두 가지 방법이 있다. 개인으로 가입하려면 신분을 증명하기 위 한 신용카드 정보를 제공해야 한다. 기업으로 가입하려면 사업자등록증 및 법인에 대한 정 보를 제공할 수 있는 권한이 있어야 한다. 개인용 멤버 등록은 보통 24시간 이내에 애플로부터 활성화(activation) 이메일이 올 것이다. 기업용 멤버 등록은 추가적인 확인사항이 많기 때문에 훨씬 긴 시간이 필요하며, 경우에 따라 수주 또는 수개월이 걸릴 수도 있다. 2.5 ios 개발자 프로그램에 가입하기 9
기다리는 동안에도 아래 URL을 통해 애플 ID와 암호를 사용하여 로그인하면, 제한적이긴 하지만 자료 접근이 가능하다. URL http://developer.apple.com/membercenter 로그인한 후 화면 상단의 Your Account 탭을 선택하면 개발자 프로그램 가입 상태가 Enrollment Pending 으로 보일 것이다. 2 1 활성화 이메일을 받은 후에 멤버 센터에 접속하면, 그림 2 2와 같은 다양한 형태의 자료에 접근이 가능하다. 2 2 10 CHAPTER 2 Apple ios 개발자 프로그램에 가입하기
2.6 ios 7 애플리케이션 개발 초기 단계에서 중요한 점인 등록된 애플 개발자 및 ios 개발자 프로그램 멤버십 가입 시점에 대해 알아보았다. 이 장에서는 두 가지 프로그램의 개략적인 차이와 개발자 프로그램에 대해 주의해야 할 점 및 등록 과정에 대해 간략하게 알아보았 다. 다음 단계에서는 ios 7 SDK 및 Xcode 5 개발환경을 다운로드받고 설치하는 방법에 대 해 알아보자. 2.6 요약 11
C H A P T E R 3 Xcode 5와 ios 7 SDK 설치하기 모든 아이폰 앱은 ios SDK와 Xcode 5.x 개발환경으로 개발된다. ios SDK에는 5장 ios 7 아키텍처와 프레임워크 에서 살펴볼 여러 가지 개발 프레임워크가 포함되어 있다. Xcode 5는 통합 개발환경(IDE, Integrated Development Environment)으로 코딩, 컴파일, 테스트 및 디버그 를 할 수 있다. 또한, Xcode 5에는 인터페이스 빌더(Interface Builder)라는 기능이 있어 UIKit 프레임워크가 제공하는 컴포넌트들을 이용하여 애플리케이션의 사용자 인터페이스 부분 을 그래픽적으로 설계할 수 있도록 해준다. 이번 장에서는 ios 7 SDK와 Xcode 5를 맥 OS X에 설치하는 방법에 대해 살펴볼 것이다. 3.1 PowerPC 오직 인텔(Intel) 기반의 맥 OS X 시스템에서만 ios 애플리케이션을 개발할 수 있다. 만약에 이전의 PowerPC 기반 맥을 가지고 있다면, 아이폰 앱 개발을 위해서 최신의 시스템을 구입 해야 한다. 어떤 프로세서를 사용하고 있는지 확실하지 않다면, 화면의 왼쪽 상단에 있는 애플 메뉴에서 이 맥킨토시에 관하여(About This Mac) 를 선택한다. 화면에 표시되는 대화상 자에서 프로세서(Processor) 로 시작되는 항목을 보자. 그림 3 1은 인텔 기반의 시스템이라 는 것을 보여주고 있다. 13
대화상자에 표시되는 항목이 인텔 기반의 프로세서가 아니라면, 아쉽게도 ios 앱 개발을 할 수 없는 시스템이다. 게다가, ios 7 SDK와 Xcode 5 환경은 10.8 또는 그 이후의 맥 OS X 버전이 필요하다. 만약 이 매킨토시에 관하여(About This Mac) 대화상자의 맥 OS X 버전이 10.8보다 최신이 아니라 면 소프트웨어 업데이트...(Software Update...) 항목을 선택하여 운영체제를 업그레이드한다. 3 1 3.2 Xcode 5 ios 7 SDK 최신 Xcode와 ios SDK를 얻는 최고의 방법은 애플 맥 앱 스토어(Apple Mac App Store)에서 다운로드하는 것이다. 여러분의 맥 OS X 시스템에 있는 앱 스토어(App Store)를 실행하고, 검색 박스에 Xcode를 입력한 다음, 무료(Free) 버튼을 클릭하여 설치를 시작하자. 인터넷 속도에 따라 다르기는 하지만, 1.6GB가 넘는 크기 때문에 다운로드가 끝나기까지 는 제법 긴 시간이 걸릴 것이다. 3.3 Xcode SDK와 Xcode가 성공적으로 설치되었다면, 이제 ios 7 애플리케이션 예제를 작성할 수 있 다. Xcode를 실행하기 위해 파인더(Finder)를 열고 Xcode로 검색하자. 앞으로는 Xcode를 자 14 CHAPTER 3 Xcode 5와 ios 7 SDK 설치하기
주 사용할 것이므로, 더 편하게 실행할 수 있도록 아이콘을 독(dock)에 드래그 앤 드롭하자. Xcode 아이콘을 클릭하여 Xcode를 실행시킨다. 맨 처음 실행되는 Xcode는 추가적인 컴포 넌트들을 설치하기 위한 작업을 하게 된다. 그 단계를 따라 진행하다 보면 여러분의 사용 자명(username)과 패스워드(password)를 입력해야 한다. Xcode를 처음 실행시키면 Welcome 화면이 표시된다. 3 2 ios 7 SDK를 설치하고 Xcode 5의 실행에 성공하였다면, 4장 간단한 ios 7 앱 만들기 를 진 행할 수 있다. 3.3 Xcode 시작하기 15
C H A P T E R 4 간단한 ios 7앱만들기 프로그래밍 관련 책에서 간단한 예제로 시작하는 것은 일반적인 방법이다. 많은 책들이 이 러한 방법으로 설명을 시작하지만, 최근 일부 책들은 이러한 방법을 따르고 있지 않다. 그 러나 이는 간단한 예제로 개발을 시작하는 방법의 좋은 점을 간과하고 있는 것이다. 좋은 점 중 한 가지는 간단한 예제를 실행해봄으로써 복잡한 프로그램을 개발하기 전에 여러분 들의 개발환경이 제대로 설치되고 동작하는지를 매우 간단하게 확인할 수 있다는 점이다. 두 번째는 초기 단계의 작은 성공이 배움의 과정에서 의지를 북돋울 수 있다는 점이다. 독 자를 혼동스럽게 만드는 복잡한 예제는 기반에 깔려 있는 기술을 이해하는 데 시간이 오 래 걸리기 때문에 실제로 얻는 것이 거의 없는 경우가 많다. 따라서 이 책은 전통에 따라 매우 간단한 예제로 시작한다. 우리는 프로그래밍 세계에서 유명한 전통이라고 할 수 있는 Hello World 로 시작할 것이다. Hello World 예제는 C 프 로그래밍 언어를 만든 브라이언 커니핸(Brian Kernighan)과 데니스 리치(Dennis Richie)가 쓴 C 언어 프로그래밍(C Programming Language) 이라는 책에서 처음 사용되었다. ios 7 프로 그램 개발에 사용되는 오브젝티브 C도 C 언어에 기원을 두므로 이 예제를 사용하는 것이 이상한 일은 아닐 것이다. 17
4.1 Xcode 5 이 책에서 사용하는 모든 예제는 Xcode 5 개발환경을 기반으로 한다. 최신 ios SDK와 Xcode가 설치되어 있지 않다면, 3장 Xcode 5와 ios 7 SDK 설치하기 를 참고하길 바란다. 설치가 완료되었다고 가정하고, 앞 장에서 이미 만들어 놓은 독(dock)의 Xcode 아이콘을 실 행하거나 파인더(Finder)에서 Xcode를 실행하자. Xcode를 처음 실행할 때와 이후라도 show this window when Xcode launches 옵션을 끄지 않으면, 그림 4 1의 화면이 디폴트로 표시된다. 4 1 만약 이 화면이 보이지 않는다면, Window Welcome to Xcode 옵션을 선택하면 화면에 표시될 것이다. 이 화면에서 Create a new Xcode project 옵션을 선택한다. 그러면 개발 하고자 하는 프로젝트의 타입과 일치하는 템플릿(template)을 선택할 수 있는, New Project 패널을 가진 Xcode 5 프로젝트 윈도우가 표시될 것이다. 18 CHAPTER 4 간단한 ios 7 앱 만들기
4 2 이 화면의 왼편에는 맥 OS X 및 ios 기반의 기기 등 대상 플랫폼을 선택할 수 있는 옵션이 있다. ios 밑의 Application을 선택한다. 그럼, 다음과 같은 템플릿들이 화면에 표시될 것이다. Master Detail Application 리스트 기반의 애플리케이션을 생성하기 위해서 사용된 다. 마스터 리스트의 항목을 선택하면 해당 항목에 대한 디테일 뷰가 표시된다. Back 버튼을 선택하면 다시 리스트가 표시된다. 어쩌면 여러분은 헤드라인 리스트에 있는 항목을 선택하면 그에 해당하는 뉴스 기사의 내용이 표시되는 뉴스 애플리케이션들에 서 이와 비슷한 기술이 사용된 것을 보았을 것이다. 아이패드 기반의 애플리케이션에 서 사용될 경우, 이 템플릿은 기본적인 스플릿 뷰(split view) 구성을 구현한다. OpenGL Game OpenGL ES 프레임워크는 고급 그래픽 및 애니메이션 기능을 개발하 기 위한 API를 제공한다. OpenGL ES Game 템플릿은 그래픽을 그리고 조작하기 위한 OpenGL ES 뷰와 타이머 객체를 가진 기본 애플리케이션을 생성한다. Page Based Application 화면을 넘기는 것 같은 효과를 지원하는 뷰를 가진 페이지 뷰 컨트롤러 애플리케이션을 생성한다. 4.1 Xcode 5 시작하기 19
Tabbed Application 탭 바(tab bar)를 가진 템플릿 애플리케이션을 생성한다. 보통 탭 바는 기기의 하단에 위치하며, 각 항목이 선택될 때마다 서로 다른 화면이 표시된다. 예를 들어, 아이폰에 내장된 전화(Phone) 애플리케이션의 사용자 인터페이스는 사용자 가 즐겨찾기와 연락처, 키패드, 그리고 음성사서함 간의 이동을 할 수 있도록 탭 바를 사용한다. Utility Application 아이폰 프로젝트에서 이 옵션은 양면을 가진 뷰로 구성된 탬플릿 을 생성한다. 정보(Info) 버튼을 터치하면 두 번째 화면으로 뒤집힌다. 아이패드 프로젝 트에서는 생성된 정보(Info) 버튼이 터치되면 두 번째 뷰가 팝오버(popover)로 표시된다. Single View Application 하나의 뷰와 뷰 컨트롤러를 가진 애플리케이션을 위한 기본 템플릿을 생성한다. Empty Application 가장 기본적인 템플릿으로, 하나의 윈도우와 델리게이트만 생성 한다. 만약 위에서 설명한 여러 가지 템플릿들 중에서 여러분의 요구사항에 적합한 것 이 없다면, 이 템플릿을 선택하면 된다. SpriteKit Game 2D 게임 개발을 위하여 스프라이트 킷 프레임워크(Sprite Kit Framework)를 활용하도록 구성된 프로젝트를 만든다. 간단한 예제를 위해서 Single View Application 템플릿을 선택하고 Next를 클릭하여 프로 젝트 옵션 설정 화면으로 이동한다. 그림 4 3에서 애플리케이션의 Product Name을 입력하며, 여기서는 HelloWorld 를 입력한 다. 회사 식별자는 일반적으로 여러분의 회사 웹 사이트 URL을 역순으로 쓴 것(예를 들어, com.mycompany 처럼)을 사용한다. Company Identifier는 보통 회사 웹 사이트 URL의 역순 을 사용한다. 즉, com.mycompany 형식이 된다. 이것은 실제 아이폰 또는 아이패드 기기에 서 애플리케이션을 테스트하기 위해 필요한 프로비저닝 프로파일과 인증서를 생성하는 데 사용된다(자세한 사항은 6장 Xcode 5로 ios 7 기기에서 앱 테스트하기 에서 알아보자). Class Prefix 에 입력된 HelloWorld 는 Xcode에서 만들어지는 클래스의 접두사로 사용된다. iphone이 Devices 메뉴에서 선택되어 있는지 확인한 다음에 Next 버튼을 클릭하자. 다음 화면에서, 생성될 새로운 프로젝트를 어디에 위치할지 결정하고 Create를 클릭하자. 20 CHAPTER 4 간단한 ios 7 앱 만들기
4 3 새로운 프로젝트가 생성되면 그림 4 4와 같은 Xcode 화면이 표시된다. 4 4 4.1 Xcode 5 시작하기 21
이 시점에서 Xcode가 과연 우리를 위해 무엇을 해주었는지 확인해보자. 우선, 애플리케이 션 개발에 필요한 여러 파일을 생성해주었다. 이것들 중 일부는 애플리케이션이 동작하도 록 하는 코드를 입력할 오브젝티브 C 소스 코드 파일(.m 확장자를 가짐)이며, 나머지는 소 스 파일에 의해 포함되어 우리만의 선언과 정의를 넣게 될 헤더 파일이거나 인터페이스 파 일(.h)이다. 또한,.storyboard 파일은 우리가 생성할 사용자 인터페이스를 두기 위하여 인터 페이스 빌더(Interface Builder)에 의해 사용되는 저장 파일이다. 또한,.plist 확장자를 가진 파 일이 몇 개 보일 것이다. 이것은 Property List 파일로서 키 값 쌍(key/value pair)의 정보를 저 장하고 있다. 예를 들면, HelloWorld-info.plist 파일은 언어, 아이콘 파일, 실행 파일 이름 및 식별자들과 같은 항목들과 관련된 리소스 설정들을 담는다. 이들 파일은 메인 Xcode 프로젝트 윈도우의 왼편에 위치한 프로젝트 내비게이터(Project Navigator)에 표시된다. 이 패 널 상단의 툴바에는 빌드와 실행 히스토리, 브레이크포인트(breakpoints), 컴파일 에러 및 경 고와 같은 다른 정보들을 표시하는 옵션이 위치한다. 디폴트로, 가운데 화면은 애플리케이션 설정에 관한 일반적인(General) 요약을 표시한다. 여 기에는 프로젝트를 생성할 때 지정한 식별자와 대상 기기도 표시되며, 애플리케이션이 지 원하는 기기의 방향, 사용자가 클릭하는 데 사용되는 작은 아이콘, 애플리케이션 실행 시 화면에 표시되는 스플래시 화면 이미지(splash screen image) 등을 설정하는 옵션도 제공된다. General 화면뿐만 아니라 Capabilities와 Info, Build Settings, Build Phases, 그리고 Build Rules로 구성된 부가적인 설정들을 조회하고 수정하기 위한 탭들도 제공된다. 이 책을 진 행하면서 몇몇 설정에 대해서는 보다 자세하게 알아볼 것이다. 언제라도 프로젝트 설정 패 널로 돌아가려면, 왼쪽 패널에서 프로젝트 내비게이터를 선택하고 내비게이터 리스트의 가 장 위에 있는 항목(애플리케이션 이름)을 선택하면 된다. 내비게이터 패널의 목록에서 소스 파일이 선택되면, 가운데 패널에 그 파일의 내용이 표시 되며 편집도 가능하다. 새로운 편집창에 파일을 띄우고자 한다면 파일을 더블클릭한다. 4.2 ios ios 앱이 실행되는 환경의 특성상 ios 앱은 일반적으로 시각 지향적이다. 예를 들어, 모든 앱의 핵심 요소는 사용자들이 애플리케이션과 상호작용하고 피드백을 받게 될 사용자 인 22 CHAPTER 4 간단한 ios 7 앱 만들기
터페이스를 포함한다. 물론, 코드를 작성하여 사용자 인터페이스를 만들고 화면에 배치할 수 있지만, 이는 복잡하고 에러가 생길 확률이 높다. 그렇기 때문에 애플은 캔버스에 컴포 넌트들을 드래그 앤 드롭하고 컴포넌트의 모습과 동작에 대한 속성을 설정하여 사용자 인 터페이스를 시각적으로 만들 수 있게 해주는 인터페이스 빌더(Interface Builder)라는 툴을 제 공한다. 원래 인터페이스 빌더는 맥 OS X 애플리케이션을 위해 개발되었으나 ios 앱 사용 자 인터페이스를 설계할 수 있도록 업데이트되었다. 앞 절에서 설명했듯이, Xcode는 우리의 프로젝트에 대한 여러 파일들을 생성해주었다. 그 중 하나가.storyboard 확장자를 가진 파일이다. 이것은 인터페이스 빌더 스토리보드 저장 파일이며, 우리의 HelloWorld 프로젝트에 대한 파일은 Main.storyboard라는 이름으로 되어 있다. 이 파일을 인터페이스 빌더에 로드하려면 왼쪽에 있는 패널의 파일 목록에서 그 파 일을 선택하면 된다. 인터페이스 빌더는 그림 4 5와 같이 중앙 패널에 나타나게 될 것이다. 4 5 화면의 가운데 패널에 애플리케이션의 사용자 인터페이스가 표시된다. 처음에는 단 하나 의 UIView 객체만 포함하고 있다. 이 UIView 객체는 프로젝트를 생성하는 단계에서 Single 4.2 ios 앱 사용자 인터페이스 만들기 23
View Application 옵션을 선택했을 때 Xcode에 의하여 우리의 설계에 추가된 것이다. 나중 에 여러 사용자 인터페이스를 UIView 객체 위로 드래그 앤 드롭하여 HelloWorld의 사용자 인터페이스를 만들어 갈 것이다. 사용자 인터페이스를 설계한다는 것은 보통 여러 가지 컴 포넌트를 캔버스(canvas)에 드래그 앤 드롭하고 해당하는 프로퍼티를 설정하는 것이다. 객 체 및 프로퍼티 설정을 보기 위해서는 오른쪽 패널이 보여야 한다. Xcode 툴바의 View 영 역의 오른편 버튼을 다음과 같이 선택하자. 4 6 오른쪽 패널이 표시되면 그림 4 7과 같은 화면이 보일 것이다. 패널의 윗부분에는 버튼들이 있다. 이들 버튼을 선택하면 패널의 절반 윗부분에 표시되는 설정 화면들이 변경된다. 디폴트로 파일 인스펙터(File Inspector)가 표시된다. 이 외에 퀵 헬 프 인스펙터(Quick Help Inspector), 아이덴티티 인스펙터(Identity Inspector), 애트리뷰트 인스펙터 (Attributes Inspector), 사이즈 인스펙터(Size Inspector)와 커넥션 인스펙터(Connections Inspector) 옵션이 있다. 여기서 잠깐, 각 옵션이 제공하는 설정이 어떠한 것인지 살펴보도록 하자. 이 책을 진행하면서 이 옵션들을 자주 사용하게 될 것이다. 패널의 아랫부분은 디폴트로 파일 템플릿 라이브러리를 표시한다. 이 패널의 윗부분에는 다른 카테고리를 표시하기 위한 또 다른 툴바가 위치하고 있다. 이 툴바 옵션에는 타이핑 노력을 덜기 위해 자주 사용하는 소스 코드 조각(code snippet)과 오브젝트 라이브러리(Object Library), 그리고 미디어 라이브러리(Media Library) 등이 있다. 이번 예제에서는 오브젝트 라 이브러리가 필요하므로 3차원 형태의 정육면체 버튼을 선택한다. 이를 선택하면 사용자 인 터페이스를 만드는 데 사용되는 UI 컴포넌트들이 표시된다. 만약 표시되는 영역이 좁을 경 우, 이 툴바 위쪽의 가로선을 드래그하여 UI 컴포넌트가 표시되는 영역을 확장하자. 라이 브러리에 있는 항목들의 레이아웃은 패널 하단의 검색 박스 왼쪽에 위치한 옵션을 클릭하 여 한 줄에 객체의 설명과 함께 하나씩 표시되다가 설명 없이 여러 객체들이 표시되도록 바꿀 수도 있다. 24 CHAPTER 4 간단한 ios 7 앱 만들기
4 7 4.3 화면에서 View가 선택되면 프로퍼티 패널에서 View에 대한 속성을 변경할 수 있다. 뷰의 배경색을 바꿔보기로 하자. View가 선택되었고 오른쪽 패널에 Attribute Inspector가 표시되 었는지 확인하자(View Utilities Show Attribute Inspector). Background 레이블 옆의 흰색 으로 채워진 사각형을 클릭하여 Colors 대화상자를 연다. 색 선택 툴을 사용하여 좋아하 는 색을 선택하고 대화상자를 닫는다. 이제 뷰 윈도우가 흰색에서 새롭게 선택한 색으로 변경되었음을 확인할 수 있을 것이다. 4.3 컴포넌트 속성 변경하기 25
4.4 다음 단계로, Label 객체를 뷰에 추가한다. 라이브러리 패널에 있는 객체들의 목록을 스크롤하거나 그림 4 8처럼 패널 하단 의 검색 상자에 Label이라고 입력하자. 레이블 객체를 배치한 다음, 뷰의 중앙에 오도록 드래그하여 수직/수평 가이드라인이 표시되게 하자. 해당 위치에 놓으려 면 누르고 있는 마우스 버튼을 그 자리에서 뗀다. 4 8 레이블 주변의 리사이즈 마커를 이용하여, 권장하는 뷰의 경계를 나타내는 파란색 수직 점선이 나올 때까지 레이블의 왼편을 늘린 후 오른편을 뷰의 경계선까지 늘린다. 레이블 을 선택한 후 Attributes Inspector(View Utilities Show Attributes Inspector)의 중앙 정렬 (centered alignment)을 클릭하여 문자열이 화면의 중앙에 표시되도록 한다. 그리고 현재의 폰 트 속성을 클릭하여 좀 더 큰 Custom 폰트로 바꾼다(가령, 크기 24의 Georgia bold). 4 9 4 10 앞으로 배우겠지만, Autolayout 옵션으로 인하여 레이블의 크기를 조절할 때 화면이 이상하게 움직일 수 있다. 자세한 설 명은 나중에 나오므로 여기서는 레이블을 잘 조절하여 그림 4 10처럼 크기를 조절하자 26 CHAPTER 4 간단한 ios 7 앱 만들기
마지막으로, 현재 Label 로 되어 있는 레이블의 문자열 부분을 더블클릭하여 Hello World 라고 입력한다. 여기까지 이상 없이 진행하였다면 그림 4 10과 같은 화면이 표시될 것이다(물론, 색깔과 폰트는 여러분의 선택에 따라 다를 수 있다). 지금까지 만든 간단한 사용자 인터페이스를 저장해야 한다. 저장을 하기 위해 File Save 또는 Command + S 단축키를 사용한다. 4.5 Xcode 5 ios 7 앱이 실행되기 전에 반드시 컴파일을 해야 한다. 성공적 으로 컴파일되면 시뮬레이터나 실제 아이폰, 아이패드, 아이팟 터치 기기에서 실행해볼 수 있다. 실제 기기에서 앱을 테스트하기 위해서는 개발자 인증서와 프로비저닝 프로파일 등의 작업이 더 필요하며, 이는 6장 Xcode 5 로 ios 7 기기에서 앱 테스트하기 에서 자세히 알아보겠 다. 이번 장에서는 시뮬레이터에서 실행해보자. Xcode 5 프로젝트 윈도우의 왼쪽 상단 부분에 있는 메 뉴(검은 정사각형의 stop 버튼 오른편)가 iphone Retina (4-inch 64-bit)로 선택되었는지 확인하고, Run 버튼 ( play 버튼처럼 생긴 stop 버튼 옆에 있는 삼각형 버튼)을 클 릭하여 코드를 컴파일하고 시뮬레이터에서 앱을 실행 한다. Xcode 툴바의 중앙에 있는 작은 아이튠즈 스타 일의 윈도우에 빌드 과정이 표시된다. 빌드를 실패하게 하는 에러가 발생하면 이에 대한 정보도 표시될 것이 다. 빌드가 끝나면 시뮬레이터가 시작되고 HelloWorld 앱이 실행될 것이다. 4 11 4.5 Xcode 5에서 ios 7 앱 빌드하고 실행하기 27
4.6 이번 장에서 한 것은 실제로는 어떤 코드를 작성하거나 수정하지 않았기 때문에 에러가 생 기지는 않았을 것이다. 만약 실수로 어떠한 과정을 잘못 하였다면 빌드가 실패할 것이며, 이것은 Xcode 환경에서 빌드 에러에 대한 여러 정보를 살펴볼 기회를 갖게 될 것이다. 빌드가 실패한다면 Xcode 툴바의 상태 윈도우에 Build 와 함께 에러 및 경고 숫자가 표시 된다. 또한, 왼쪽 패널에는 에러 목록이 표시된다. 이 목록에서 에러를 선택하면 수정이 필 요한 코드로 화면이 이동한다. 4.7 아이폰 5 시리즈와 아이패드 미니와 같은 레티나 디스플레이의 출시로, 애플리케이션들은 이제 다양한 화면 크기와 해상도에서 동작할 수 있어야 한다. 이러한 종류의 디스플레이에서 애플리케이션이 어떻게 보이는지 테스트하기 위해서는 ios 시뮬레이터에 애플리케이션을 실행하고 Hardware Device 메뉴 옵션을 이용하여 각각의 디스플레이들로 전환하면 된다. 4.8 ios 다양한 디바이스에서 애플리케이션을 테스트할 뿐만 아니라, 여러 가지 ios 버전에서의 애 플리케이션 모양도 검증해야 한다. ios 버전 6 이전까지는 이것이 큰 문제가 되지 않았지 만, ios 7은 애플리케이션의 새로운 룩 앤 필(look and feel)을 도입하였기 때문에 문제가 될 수 있다. 많은 사용자 인터페이스 요소들이 이전 버전과는 매우 다른 모양과 크기를 갖게 되었다. 이러한 점을 고려하여 Xcode는 Preview 어시스턴트로 ios 7이나 그 이전 버전에서 나타나게 될 애플리케이션의 사용자 인터페이스를 미리 볼 수 있게 해준다. Main.storyboard 파일을 선택하여 스토리보드 캔버스가 표시되도록 하고, Xcode의 메뉴에 서 View Assistant Editor Show Assistant Editor를 선택하자. 그림 4 12처럼 스토리보 드 캔버스의 오른쪽에 새로운 패널이 나타날 것이다. 28 CHAPTER 4 간단한 ios 7 앱 만들기
4 12 화면에 나타난 어시스턴트 에디터 패널에서 패널 상단 툴바는 Manual이나 Automatic(턱 시도 아이콘으로 표시)으로 읽어들인 항목을 표시한다. 이 항목을 클릭하면 드롭 다운 메뉴 가 나타나는데, 거기서 Preview Main.storyboard(Preview) 메뉴를 선택하자. 그렇게 하 면 선택된 스토리보드 화면에 대한 사용자 인터페이스로 바뀔 것이다. 오른쪽 하단에 있 는 메뉴를 이용하여 ios 7.0 and Later를 ios 6.1 and Earlier로 변경해보자. 사용자 인터페 이스 상단의 상태 바(status bar)가 불투명한 형태로 바뀌게 된 것을 알게 될 것이다. 또한, 회전 버튼은 가로(landscape) 방향과 세로(portrait) 방향으로 전환하는 데 사용될 수 있으며, 사이즈 버튼은 ios 기기의 화면 크기를 바꾸는 데 사용된다. 이번 예제에서는 회전에 대 해 처리하지 않았으며, 이 문제는 나중에 자동 레이아웃(Auto Layout)을 설명할 때 살펴볼 것이다. 애플리케이션이 이전의 ios 버전들에서 동작해야 할 경우, preview 툴은 여러 SDK 설정을 이용하여 코드를 컴파일하거나 실행하지 않고서도 애플리케이션 모양을 테스트할 수 있도 록 해주는 메커니즘을 제공한다. 4.8 여러 ios 버전에서 사용자 인터페이스 화면 테스트하기 29
4.9 Xcode의 또 다른 유용한 기능은 실행 중인 애플리케이션 성능을 모니터링할 수 있게 해주 는 것이다. 이것은 Debug Navigator에 표시되는 것으로 확인할 수 있다. Xcode를 실행하면 왼쪽 패널은 디폴트로 프로젝트 내비게이터(project navigator)를 표시한다. 왼쪽 패널의 상단에는 여러 다른 옵션들이 있다. 왼쪽에서 여섯 번째에 있는 옵션이 디버그 내비게이터이며, 이를 선 택하면 그림 4 13과 같이 나온다. 이 패널은 현재 실 행 중인 애플리케이션 성능(예를 들어 메모리, CPU 사용, 4 13 icloud 스토리지 접근)에 대한 실시간 통계를 표시한다. 표시된 카테고리들 중에 하나를 선택하면, 메인 패널(그림 4 14)은 애플리케이션 성능에 대 한 특정 영역의 추가적인 정보를 제공하기 위해서 업데이트된다. 4 14 애플리케이션이 실행 중일 때는 그림 4 13처럼 나타나며, 애플리케이션을 실행하고 있지 않다면 No Debug Session이라고 만 표시된다 30 CHAPTER 4 간단한 ios 7 앱 만들기
더 많은 정보를 얻고 싶다면 패널의 우측 상단에 있는 Profile in Instruments 버튼을 클릭 하면 된다. 4.10 애플리케이션은 Xcode 개발환경에서 주로 생성된다. 이번 장에서는 Xcode 환경에 관한 기 본적인 개요를 설명하였고, 매우 간단한 예제 애플리케이션을 생성하였다. 또한, preview assistant를 이용하여 ios의 이전 버전에서 사용자 인터페이스 모양을 테스트하는 것도 살 펴보았으며, 여기서 우리는 ios 6와 ios 7 간의 사용자 인터페이스 모양이 크게 달라졌음 을 알 수 있었다. 마지막으로, Xcode 5에서 성능 모니터링 기능에 관해 간단히 살펴보았다. 4.10 요약 31