iphone ios 6 DEVELOPMENT ESSENTIALS Copyright c 2012 Neil Smyth. All rights reserved. Korean Translation Copyright c 2013 by J-Pub. co. The Korean edition is published by arrangement with Neil Smyth through Agency-One, Seoul. 이 책의 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 제이펍 출판사에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다. 초판 1쇄 발행 2013월 1월 31일 지은이 닐 스미스 옮긴이 황반석 펴낸이 장성두 펴낸곳 제이펍 출판신고 2009년 11월 10일 제406-2009-000087호 주소 경기도 파주시 문발동 파주출판도시 530 1 뮤즈빌딩 403호 전화 070 8201 9010 / 팩스 02 6280 0405 홈페이지 www.jpub.kr / 이메일 jeipub@gmail.com 편집부 이민숙, 이 슬 / 본문디자인 북아이 / 표지디자인 미디어픽스 용지 신승지류유통 / 인쇄 한승문화 / 제본 동호문화사 ISBN 978-89-94506-50-0 (93560) 값 33,000원 이 책은 저작권법에 따라 보호를 받는 저작물이므로 무단전재와 무단복제를 금지하며, 이 책 내용의 전부 또는 일부를 이용하려면 반드시 저작권자와 제이펍의 서면 동의를 받아야 합니다. 잘못된 책은 구입하신 서점에서 바꾸어 드립니다. 제이펍은 책에 관한 독자 여러분의 아이디어와 원고 투고를 기다리고 있습니다. 책으로 펴내고자 하는 아이디어나 원고가 있으신 분께서는 책에 대한 간단한 개요와 차례, 구성과 저(역)자 약력 등을 메일로 보내주세요. jeipub@gmail.com
iphone ios 6 Development Essentials 차 례 역자 머리말 ⅹⅹⅹ Chapter 1 이 책에 대하여 _ 1 1.1 처음 ios 개발을 하는 개발자를 위하여 1 1.2 ios 5 개발자를 위하여 2 1.3 예제 소스 코드 3 1.4 피드백 4 1.5 오탈자 4 Chapter 2 Apple ios 개발자 프로그램에 가입하기 _ 5 2.1 등록된 애플 개발자 5 2.2 Xcode와 ios 6 SDK 다운로드하기 6 2.3 ios 개발자 프로그램 6 2.4 언제 ios 개발자 프로그램에 가입할까? 7 2.5 ios 개발자 프로그램에 가입하기 7 2.6 요약 9 Chapter 3 Xcode 4와 ios 6 SDK 설치하기 _ 10 3.1 여러분의 맥이 Intel 기반인지 PowerPC 기반인지 확인하기 10 3.2 Xcode 4와 ios 6 SDK 설치하기 11 IV
차 례 V 3.3 Xcode 시작하기 12 Chapter 4 간단한 아이폰 ios 6 앱 만들기 _ 13 4.1 Xcode 4 시작하기 14 4.2 ios 앱 사용자 인터페이스 만들기 18 4.3 컴포넌트 프로퍼티 변경하기 21 4.4 사용자 인터페이스에 객체 추가하기 22 4.5 Xcode 4로 ios 앱 빌드하고 실행하기 23 4.6 빌드 에러 처리하기 25 4.7 서로 다른 화면 크기 테스트하기 25 Chapter 5 ios 6 아키텍처와 SDK 프레임워크 _ 26 5.1 iphone OS가 ios로 26 5.2 ios 6 아키텍처 개요 27 5.3 코코아 터치 계층 28 5.4 ios 미디어 계층 31 5.5 ios 코어 서비스 계층 35 5.6 파운데이션 프레임워크 36 5.7 ios 코어 OS 계층 38 Chapter 6 아이폰에서 ios 6 앱 테스트하기 - 개발자 인증서 및 프로비저닝 프로파일 _ 40 6.1 ios 개발 인증서 서명 요청 만들기 41 6.2 ios 개발 인증서 서명 요청 제출하기 43 6.3 ios 개발 인증서 설치하기 45 6.4 기기 할당하기 46 6.5 App ID 만들기 47 6.6 ios 개발 프로비저닝 프로파일 만들기 49 6.7 개발을 위해 아이폰 기기 활성화하기 50 6.8 앱에 App ID 연결하기 50 6.9 ios와 SDK 버전 호환성 51 6.10 앱을 기기에 설치하기 52 6.11 요약 52
VI 차 례 Chapter 7 오브젝티브-C 프로그래밍 기초 _ 53 7.1 오브젝티브-C 데이터 타입 및 변수 53 7.2 오브젝티브-C 표현식 54 7.3 if와 else로 오브젝티브-C 흐름 제어하기 59 7.4 for 문을 이용한 반복 61 7.5 do와 while을 이용한 반복 62 7.6 오브젝티브-C do... while 반복 62 Chapter 8 오브젝티브-C로 개발하는 객체지향 프로그래밍 기초 _ 63 8.1 객체란? 63 8.2 클래스란? 64 8.3 오브젝티브-C 클래스 인터페이스 선언 64 8.4 클래스에 인스턴스 변수 추가하기 65 8.5 클래스 메서드 정의하기 66 8.6 오브젝티브-C 클래스 구현 선언하기 67 8.7 클래스 인스턴스 선언 및 초기화하기 68 8.8 Automatic Reference Counting(ARC) 69 8.9 메서드 호출과 인스턴스 데이터 접근하기 70 8.10 오브젝티브-C 그리고 도트 표기법 71 8.11 변수가 저장되는 방법 72 8.12 인다이렉션의 개요 73 8.13 인다이렉션과 객체 75 8.14 인다이렉션과 객체 복사하기 76 8.15 프로그램 영역 만들기 77 8.16 하나로 합치기 78 8.17 객체지향 오브젝티브-C 코드 구조잡기 80 Chapter 9 최신 오브젝티브-C의 기초 _ 82 9.1 디폴트 프로퍼티 신서사이즈 82 9.2 메서드 순서 84 9.3 NSNumber 문자 85 9.4 배열 문자 86 9.5 딕셔너리 문자 87
차 례 VII 9.6 요약 88 Chapter 10 아이폰 ios 6 애플리케이션 개발 아키텍처 개요 _ 89 10.1 Model View Controller(MVC) 89 10.2 타깃-액션 패턴, IBOutlet과 IBAction 90 10.3 서브클래싱 91 10.4 델리게이션 92 10.5 요약 92 Chapter 11 상호작용하는 ios 6 아이폰 앱 만들기 _ 93 11.1 새 프로젝트 만들기 93 11.2 사용자 인터페이스 만들기 94 11.3 예제 애플리케이션 빌드하고 실행하기 96 11.4 액션과 아웃렛 추가하기 97 11.5 액션과 아웃렛을 사용자 인터페이스에 연결하기 101 11.6 완성된 애플리케이션 빌드 및 실행하기 105 11.7 요약 106 Chapter 12 아이폰 키보드를 감추는 ios 6 코드 만들기 _ 107 12.1 예제 앱 만들기 107 12.2 사용자가 리턴키를 터치할 때 키보드 감추기 108 12.3 사용자가 백그라운드를 터치했을 때 키보드 감추기 110 12.4 요약 112 Chapter 13 Xcode의 Assistant Editor를 이용하여 아웃렛과 액션 구축하기 _ 113 13.1 Assistant Editor 표시하기 114 13.2 Assistant Editor 사용하기 115 13.3 Assistant Editor를 이용하여 아웃렛 추가하기 116 13.4 Assistant Editor를 이용하여 액션 추가하기 118 13.5 요약 119
VIII 차 례 Chapter 14 아이폰 ios 6 뷰와 윈도우 그리고 뷰 계층 이해하기 _ 120 14.1 뷰에 대해 120 14.2 UIWindow 클래스 121 14.3 뷰 계층 구조 121 14.4 뷰 타입 124 14.5 요약 125 Chapter 15 ios 6의 자동 레이아웃 소개 _ 126 15.1 자동 레이아웃의 개요 127 15.2 정렬 128 15.3 고유한 콘텐츠 사이즈 129 15.4 콘텐츠 허깅 우선순위와 압축 제한 우선순위 129 15.5 컨스트레인트를 만드는 세 가지 방법 129 15.6 컨스트레인트에 대한 상세 내용 130 15.7 요약 132 Chapter 16 인터페이스 빌더에서 ios 6 자동 레이아웃 컨트레인트로 작업하기 _ 133 16.1 자동 레이아웃의 간단한 예제 133 16.2 인터페이스 빌더에서 자동 레이아웃 켜고 끄기 134 16.3 인터페이스 빌더의 자동 레이아웃 기능들 138 16.4 인터페이스 빌더에서 새로운 컨스트레인트 생성하기 143 16.5 요약 143 Chapter 17 아이폰 ios 6 자동 레이아웃 예제 _ 144 17.1 프로젝트 준비하기 144 17.2 사용자 인터페이스 설계하기 144 17.3 컨스트레인트 우선순위 조절하기 147 17.4 정렬과 폭 동등성 151 17.5 애플리케이션 테스트하기 153 17.6 요약 154
차 례 IX Chapter 18 코드에서 ios 6 자동 레이아웃 컨스트레인트를 코드로 구현하기 _ 155 18.1 코드에서 컨스트레인트 생성하기 155 18.2 컨스트레인트를 뷰에 추가하기 157 18.3 자동 리사이징 끄기 158 18.4 예제 애플리케이션 159 18.5 뷰 생성하기 159 18.6 컨스트레인트 생성하기와 추가하기 160 18.7 컨스트레인트 제거하기 162 18.8 요약 163 Chapter 19 ios 6에서 교차 계층 구조 자동 레이아웃 컨스트레인트 구현하기 _ 164 19.1 예제 애플리케이션 164 19.2 아웃렛 구축하기 166 19.3 이전 컨스트레인트를 제거하는 코드 작성하기 167 19.4 교차 계층 구조 컨스트레인트 추가하기 168 19.5 애플리케이션 테스트하기 168 19.6 요약 168 Chapter 20 ios 6 자동 레이아웃 시각적 형식 언어 이해하기 _ 169 20.1 시각적 형식 언어 소개 169 20.2 시각적 형식 언어 예제 170 20.3 constraintswithvisualformat: 메서드 이용하기 172 20.4 요약 174 Chapter 21 Xcode 스토리보딩 사용하기 _ 175 21.1 스토리보드 예제 프로젝트 만들기 176 21.2 스토리보드 접근하기 176 21.3 스토리보드에 Scenes 추가하기 178 21.4 스토리보드 Segues 구성하기 179 21.5 스토리보드 전환 구성하기 180 21.6 Scene과 뷰 컨트롤러 연결하기 181 21.7 Scene들 간의 데이터 전달 183
X 차 례 21.8 스토리보드 Segue 되돌리기 184 21.9 프로그램으로 스토리보드 Segue 호출하기 186 21.10 요약 186 Chapter 22 스토리보드를 이용한 ios 6 아이폰 탭 바 애플리케이션 만들기 _ 187 22.1 탭 바 개요 187 22.2 멀티뷰 애플리케이션의 뷰 컨트롤러 이해하기 188 22.3 탭 바 예제 애플리케이션 설정하기 188 22.4 프로젝트 파일 살펴보기 189 22.5 최초의 뷰 컨트롤러 이름 바꾸기 189 22.6 두 번째 콘텐츠 뷰를 위한 뷰 컨트롤러 추가하기 190 22.7 탭 바 컨트롤러를 스토리보드에 추가하기 190 22.8 두 번째 뷰 컨트롤러를 스토리보드에 추가하기 191 22.9 뷰 컨트롤러 사용자 인터페이스 설계하기 193 22.10 탭 바 아이템 설정하기 194 22.11 애플리케이션 빌드하고 실행하기 196 22.12 요약 196 Chapter 23 Xcode 스토리보드와 ios 6 테이블 뷰의 개요 _ 197 23.1 테이블 뷰의 개요 198 23.2 정적 테이블 뷰 vs 동적 테이블 뷰 198 23.3 테이블 뷰 델리게이트와 데이터소스 198 23.4 테이블 뷰 스타일 199 23.5 테이블 뷰 셀 스타일 200 23.6 테이블 뷰 셀 재사용 200 23.7 요약 202 Chapter 24 프로토타입 테이블 뷰 셀이 있는 동적 테이블 뷰를 만들기 위하여 Xcode 스토리보드 이용하기 _ 203 24.1 예제 프로젝트 생성하기 203 24.2 스토리보드에 테이블 뷰 컨트롤러 추가하기 204 24.3 UITableViewController와 UITableViewCell 하위 클래스 생성하기 205 24.4 셀 재사용 식별자 선언하기 207
차 례 XI 24.5 스토리보드 UITableView 프로토타입 셀 설계하기 208 24.6 CarTableViewCell 클래스 수정하기 209 24.7 테이블 뷰 데이터소스 생성하기 210 24.8 이미지 파일 다운로드하여 추가하기 214 24.9 애플리케이션 컴파일하고 실행하기 214 24.10 요약 215 Chapter 25 Xcode 스토리보드를 이용한 테이블 뷰 내비게이션 구현하기 _ 216 25.1 내비게이션 컨트롤러 이해하기 216 25.2 스토리보드에 새로운 화면 추가하기 217 25.3 내비게이션 컨트롤러 추가하기 218 25.4 스토리보드 Segue 구축하기 219 25.5 CarDetailViewController 클래스 수정하기 220 25.6 prepareforsegue:를 이용한 스토리보드 화면 간 데이터 전달하기 222 25.7 애플리케이션 테스트하기 224 25.8 요약 224 Chapter 26 Xcode 스토리보드를 이용한 정적 테이블 뷰 만들기 _ 225 26.1 정적 테이블 프로젝트의 개요 225 26.2 프로젝트 생성하기 226 26.3 테이블 뷰 컨트롤러 추가하기 226 26.4 테이블 뷰 콘텐츠 타입 변경하기 227 26.5 정적 테이블 설계하기 228 26.6 테이블 셀에 항목 추가하기 229 26.7 StaticTableViewController 클래스 수정하기 232 26.8 애플리케이션 빌드하고 실행하기 233 26.9 요약 234 Chapter 27 UIPageViewController를 이용한 페이지 기반의 ios 6 아이폰 애플리케이션 구현하기 _ 235 27.1 UIPageViewController 클래스 235 27.2 UIPageViewController DataSource 236 27.3 내비게이션 방향 237
XII 차 례 27.4 스파인 위치 237 27.5 UIPageViewController 델리게이트 프로토콜 238 27.6 요약 238 Chapter 28 ios 6 아이폰 UIPageViewController 예제 애플리케이션 _ 239 28.1 Xcode 페이지 기반 애플리케이션 템플릿 239 28.2 프로젝트 만들기 240 28.3 콘텐트 뷰 컨트롤러 추가하기 240 28.4 데이터 모델 만들기 242 28.5 UIPageViewController 초기화하기 247 28.6 UIPageViewController 애플리케이션 실행하기 249 28.7 요약 250 Chapter 29 UIPickerView와 UIDatePicker 컴포넌트 사용하기 _ 251 29.1 DatePicker와 PickerView 컴포넌트 251 29.2 DatePicker 예제 252 29.3 사용자 인터페이스 디자인하기 253 29.4 Date Picker 예제 기능 구현하기 254 29.5 아이폰 Date Picker 애플리케이션 빌드 및 실행하기 255 Chapter 30 ios 6 아이폰 UIPickerView 예제 _ 256 30.1 ios 6 PickerView 프로젝트 만들기 256 30.2 UIPickerView 델리게이트와 데이터소스 256 30.3 PickerViewController.h 파일 257 30.4 사용자 인터페이스 디자인하기 258 30.5 배열 초기화하기 259 30.6 데이터소스 프로토콜 구현하기 260 30.7 델리게이트 프로토콜 구현하기 261 30.8 키보드 감추기 262 30.9 애플리케이션 테스트하기 262 Chapter 31 ios 6에서 디렉터리 다루기 _ 263 31.1 애플리케이션 Documents 디렉터리 264
차 례 XIII 31.2 오브젝티브-C NSFileManager, NSFileHandle과 NSData 클래스 264 31.3 오브젝티브-C의 경로명 이해하기 265 31.4 NSFileManager 인스턴스 객체 만들기 265 31.5 현재 작업 디렉터리 확인하기 265 31.6 Documents 디렉터리 확인하기 266 31.7 Temporary 디렉터리 확인하기 267 31.8 디렉터리 변경하기 268 31.9 새로운 디렉터리 만들기 269 31.10 디렉터리 삭제하기 270 31.11 디렉터리 내용 목록 표시하기 271 31.12 파일이나 디렉터리 프로퍼티 구하기 271 Chapter 32 ios 6에서 아이폰 파일 다루기 _ 273 32.1 NSFileManager 인스턴스 만들기 273 32.2 파일이 존재하는지 확인하기 274 32.3 두 파일의 내용 비교하기 274 32.4 파일의 Readable/Writable/Executable/Deletable 상태 확인하기 275 32.5 파일 옮기기와 이름 바꾸기 276 32.6 파일 복사하기 276 32.7 파일 제거하기 277 32.8 Symbolic Link 만들기 277 32.9 NSFileManager로 파일 읽고 쓰기 278 32.10 NSFileHandle 클래스로 파일 작업하기 279 32.11 NSFileHandle 객체 만들기 279 32.12 NSFileHandle 파일 Offsets과 Seeking 279 32.13 파일에서 데이터 읽기 280 32.14 파일에 데이터 쓰기 281 32.15 파일 자르기 282 32.16 요약 282 Chapter 33 ios 6 아이폰 디렉터리 관리 및 파일 입출력 예제 _ 283 33.1 예제 아이폰 애플리케이션 283 33.2 애플리케이션 프로젝트 설정하기 283 33.3 사용자 인터페이스 디자인하기 284
XIV 차 례 33.4 애플리케이션 시작 시 데이터 파일 체크하기 285 33.5 액션 메서드 구현하기 286 33.6 예제 빌드 및 실행하기 287 Chapter 34 ios 6 앱에서 icloud Storage 사용 준비하기 _ 289 34.1 icloud란? 289 34.2 icloud Data Storage 서비스 290 34.3 icloud Storage를 사용하는 애플리케이션 준비하기 290 34.4 ios 6 icloud 활성화된 App ID 만들기 291 34.5 icloud 활성화된 프로비저닝 프로파일 생성 및 설치하기 292 34.6 icloud Entitlements 파일 생성하기 293 34.7 수작업으로 Entitlements 파일 생성하기 295 34.8 다중 Ubiquity Container 접근하기 296 34.9 Ubiquity Container URL 정의하기 296 34.10 요약 297 Chapter 35 ios 6 UIDocument 클래스로 파일 관리하기 _ 298 35.1 UIDocument 클래스 298 35.2 UIDocument 클래스 서브클래싱 299 35.3 충돌 해결과 도큐먼트 상태 299 35.4 UIDocument 예제 애플리케이션 300 35.5 UIDocument 하위 클래스 만들기 300 35.6 사용자 인터페이스 디자인하기 301 35.7 애플리케이션 데이터 구조 구현하기 302 35.8 contentsfortype 메서드 구현하기 303 35.9 loadfromcontents 메서드 구현하기 303 35.10 앱 시작 시 도큐먼트 로드하기 304 35.11 도큐먼트 콘텐트 저장하기 308 35.12 애플리케이션 테스트하기 309 35.13 요약 309 Chapter 36 ios 6 아이폰 애플리케이션에서 icloud 스토리지 사용하기 _ 310 36.1 icloud Usage 튜토리얼 310
차 례 XV 36.2 icloud 접근을 위해 icloudstore 애플리케이션 준비하기 311 36.3 뷰 컨트롤러 구성하기 312 36.4 viewdidload 메서드 구현하기 313 36.5 metadataquerydidfinishgathering: 메서드 구현하기 316 36.6 savedocument 메서드 구현하기 319 36.7 아이폰에서 icloud Document와 Data Storage 활성화하기 320 36.8 icloud 애플리케이션 실행하기 321 36.9 icloud 기반 도큐먼트 리뷰 및 삭제하기 321 36.10 로컬 파일을 어디서나 사용할 수 있게 만들기 322 36.11 요약 322 Chapter 37 icloud를 이용한 아이폰 ios 6 Key-Value Data 동기화하기 _ 323 37.1 icloud Key-Value Data Storage 323 37.2 애플리케이션 간 데이터 공유하기 325 37.3 Data Storage 제약점 325 37.4 충돌 해결 325 37.5 Key-Value 변경 시 노티피케이션 받기 325 37.6 icloud Key-Value Data Storage 예제 326 37.7 icloud Key Value Data Storage를 위해 애플리케이션 활성화하기 326 37.8 사용자 인터페이스 구현하기 327 37.9 뷰 컨트롤러 구현하기 328 37.10 viewdidload 메서드 수정하기 328 37.11 노티피케이션 메서드 구현하기 330 37.12 savedata 메서드 구현하기 330 37.13 애플리케이션 테스트하기 331 Chapter 38 아카이빙을 이용한 ios 6 아이폰 데이터 영구 저장 _ 332 38.1 아카이빙의 개요 332 38.2 아카이빙 예제 애플리케이션 333 38.3 사용자 인터페이스 설계하기 334 38.4 시작 시 아카이브 파일 존재 확인하기 335 38.5 액션 메서드에서 객체 데이터 아카이빙하기 337 38.6 애플리케이션 테스트하기 337 38.7 요약 338
XVI 차 례 Chapter 39 SQLite를 사용한 ios 6 아이폰 데이터베이스 구현 _ 339 39.1 SQLite란? 339 39.2 구조적 질의 언어(SQL) 340 39.3 맥 OS X에서 SQLite 사용하기 340 39.4 SQLite 연동을 위한 아이폰 애플리케이션 프로젝트 준비하기 343 39.5 주요 SQLite 기능들 344 39.6 SQLite 데이터베이스 선언하기 344 39.7 데이터베이스 열기 및 생성하기 345 39.8 SQL 문 준비 및 실행하기 346 39.9 데이터베이스 테이블 생성하기 347 39.10 데이터베이스 테이블에서 데이터 가져오기 347 39.11 SQLite 데이터베이스 닫기 348 39.12 요약 349 Chapter 40 SQLite 기반 ios 6 아이폰 애플리케이션 예제 _ 350 40.1 SQLite 아이폰 애플리케이션 예제에 대해 350 40.2 SQLite 애플리케이션 프로젝트 준비 및 생성하기 350 40.3 sqlite3.h 임포트 및 데이터베이스 참조 선언하기 351 40.4 사용자 인터페이스 설계하기 352 40.5 데이터베이스와 테이블 만들기 353 40.6 SQLite 데이터베이스에 데이터를 저장하는 코드 구현하기 355 40.7 SQLite 데이터베이스에서 데이터를 가져오는 코드 구현하기 356 40.8 애플리케이션 빌드 및 실행하기 358 40.9 요약 359 Chapter 41 코어 데이터를 이용한 ios 6 아이폰 데이터베이스 작업 _ 360 41.1 코어 데이터 스택 360 41.2 매니지드 객체 361 41.3 매니지드 객체 콘텍스트 362 41.4 매니지드 객체 모델 362 41.5 영구 저장소 코디네이터 363 41.6 영구 객체 저장소 363 41.7 엔티티 디스크립션 정의 363
차 례 XVII 41.8 매니지드 객체 콘텍스트 얻기 365 41.9 엔티티 디스크립션 얻기 365 41.10 매니지드 객체 만들기 366 41.11 매니지드 객체 프로퍼티 읽기 및 쓰기 366 41.12 매니지드 객체 구해오기 367 41.13 조건에 따른 매니지드 객체 가져오기 367 41.14 요약 368 Chapter 42 ios 6 아이폰 코어 데이터 튜토리얼 _ 369 42.1 아이폰 코어 데이터 예제 애플리케이션 369 42.2 코어 데이터 기반의 아이폰 애플리케이션 만들기 369 42.3 엔티티 디스크립션 만들기 370 42.4 뷰 컨트롤러 추가하기 371 42.5 사용자 인터페이스 설계하기 373 42.6 코어 데이터를 이용하여 영구 저장소에 데이터 저장하기 375 42.7 코어 데이터를 이용하여 영구 저장소에서 데이터 가져오기 376 42.8 예제 애플리케이션 빌드 및 실행하기 377 42.9 요약 378 Chapter 43 ios 6 아이폰 멀티터치, 탭과 제스처에 대해 _ 379 43.1 리스폰더 체인 379 43.2 다음 리스폰더로 이벤트 전달하기 380 43.3 제스처 381 43.4 탭 381 43.5 터치 381 43.6 터치 노티피케이션 메서드 381 43.7 요약 382 Chapter 44 ios 6 아이폰 터치, 멀티터치와 탭 예제 애플리케이션 _ 383 44.1 ios 6 아이폰 탭과 터치 예제 애플리케이션 383 44.2 ios 터치 프로젝트 만들기 384 44.3 사용자 인터페이스 디자인하기 384 44.4 뷰에서 멀티터치 활성화하기 385
XVIII 차 례 44.5 touchesbegan 메서드 구현하기 386 44.6 touchesmoved 메서드 구현하기 386 44.7 touchesended 메서드 구현하기 387 44.8 터치의 좌표 구하기 387 44.9 터치 예제 애플리케이션 빌드 및 실행하기 388 Chapter 45 ios 6 아이폰 터치 스크린 제스처 인식하기 _ 389 45.1 ios 6 아이폰 제스처 예제 애플리케이션 389 45.2 예제 프로젝트 만들기 390 45.3 사용자 인터페이스 설계하기 390 45.4 touchesbegan 메서드 구현하기 391 45.5 touchesmoved 메서드 구현하기 392 45.6 touchesended 메서드 구현하기 392 45.7 제스처 예제 빌드 및 실행하기 393 45.8 요약 393 Chapter 46 ios 6 Gesture Recognizers를 통한 제스처 인식 _ 394 46.1 UIGestureRecognizer 클래스 394 46.2 인식기 액션 메시지 395 46.3 불연속 및 연속된 제스처 396 46.4 제스처에서 데이터 얻기 396 46.5 탭 제스처 인식하기 396 46.6 핀치 제스처 인식하기 397 46.7 회전 제스처 인식하기 397 46.8 팬과 드래깅 제스처 인식하기 397 46.9 스와이프 제스처 인식하기 398 46.10 롱 터치(터치와 홀드) 제스처 인식하기 399 46.11 요약 399 Chapter 47 아이폰 ios 6 제스처 인식 튜토리얼 _ 400 47.1 제스처 인식 프로젝트 만들기 400 47.2 사용자 인터페이스 설계하기 400 47.3 액션 메서드 구현하기 403 47.4 제스처 인식 애플리케이션 테스트하기 404
차 례 XIX Chapter 48 ios 6 컬렉션 뷰와 플로우 레이아웃의 개요 _ 405 48.1 컬렉션 뷰의 개요 406 48.2 UICollectionView 클래스 408 48.3 UICollectionViewCell 클래스 408 48.4 UICollectionReusableView 클래스 409 48.5 UICollectionViewFlowLayout 클래스 409 48.6 UICollectionViewLayoutAttributes 클래스 410 48.7 UICollectionViewDataSource 프로토콜 411 48.8 UICollectionViewDelegate 프로토콜 412 48.9 UICollectionViewDelegateFlowLayout 프로토콜 413 48.10 셀과 뷰 재사용 413 48.11 요약 415 Chapter 49 아이폰 ios 6 스토리보드 기반의 컬렉션 뷰 튜토리얼 _ 417 49.1 컬렉션 뷰 예제 프로젝트 생성하기 417 49.2 템플릿 뷰 컨트롤러 제거하기 417 49.3 컬렉션 뷰 컨트롤러를 스토리보드에 추가하기 418 49.4 프로젝트에 컬렉션 뷰 셀 클래스 추가하기 420 49.5 셀 프로토타입 설계하기 421 49.6 데이터 모델 구현하기 422 49.7 데이터 소스 구현하기 423 49.8 애플리케이션 테스트하기 426 49.9 셀 항목에 대한 크기 설정하기 427 49.10 스크롤 방향 변경하기 428 49.11 추가적인 뷰 구현하기 429 49.12 추가적인 뷰 프로토콜 메서드 구현하기 432 49.13 컬렉션 뷰 항목 삭제하기 433 49.14 요약 434 Chapter 50 ios 6 컬렉션 뷰 플로우 레이아웃의 하위 클래스 만들기와 확장하기 _ 435 50.1 예제 레이아웃 클래스에 대하여 435 50.2 UICollectionViewFlowLayout 클래스의 하위 클래스 만들기 436 50.3 새로운 레이아웃 클래스 확장하기 436
XX 차 례 50.4 layoutattributesforitematindexpath: 메서드 구현하기 437 50.5 layoutattributesforelementsinrect: 메서드 구현하기 439 50.6 modifylayoutattributes: 메서드 구현하기 439 50.7 새로운 레이아웃과 핀치 제스처 인식기 추가하기 441 50.8 핀치 인식기 구현하기 442 50.9 이미지 잘림 피하기 445 50.10 QuartzCore 프레임워크를 프로젝트에 추가하기 445 50.11 애플리케이션 테스트하기 445 50.12 요약 446 Chapter 51 쿼츠로 ios 6 아이폰 2D 그래픽 그리기 _ 448 51.1 코어 그래픽과 쿼츠 2D 소개 448 51.2 drawrect 메서드 449 51.3 점, 좌표와 픽셀 449 51.4 그래픽 콘텍스트 450 51.5 쿼츠 2D에서 색 작업하기 450 51.6 요약 452 Chapter 52 쿼츠 2D와 코어 이미지를 사용하는 ios 6 아이폰 그래픽 튜토리얼 _ 453 52.1 ios 아이폰 드로잉 예제 애플리케이션 453 52.2 새로운 프로젝트 만들기 453 52.3 UIView의 하위 클래스 만들기 454 52.4 UIView 서브클래스에 drawrect 메서드 위치시키기 454 52.5 선 그리기 455 52.6 경로 그리기 458 52.7 사각형 그리기 459 52.8 타원 및 원 그리기 460 52.9 색으로 경로 채우기 461 52.10 호 그리기 463 52.11 3차 베지어 곡선 그리기 464 52.12 2차 베지어 곡선 그리기 465 52.13 점선 그리기 466 52.14 그래픽 콘텍스트에 이미지 그리기 467 52.15 코어 이미지 프레임워크를 통한 이미지 필터링 469
차 례 XXI 52.16 요약 471 Chapter 53 코어 애니메이션을 이용한 ios 6 아이폰 애니메이션 기초 _ 472 53.1 UIView 코어 애니메이션 블록 472 53.2 애니메이션 커브 이해하기 474 53.3 애니메이션 종료 시 노티피케이션 받기 474 53.4 아핀 변환 수행하기 475 53.5 동시에 수행되는 변환 475 53.6 애니메이션 예제 애플리케이션 만들기 476 53.7 인터페이스 파일 구현하기 476 53.8 UIView에서 그리기 477 53.9 화면 터치 인식 및 애니메이션 수행하기 477 53.10 애니메이션 애플리케이션 빌드 및 실행하기 479 53.11 요약 480 Chapter 54 ios 6 아이폰 앱에 iads 연동하기 _ 481 54.1 ios 아이폰 광고 옵션들 482 54.2 iads 광고 포맷 482 54.3 iads를 표시하는 기본 규칙 483 54.4 iads 아이폰 예제 애플리케이션 만들기 483 54.5 Xcode 프로젝트에 iads 프레임워크 추가하기 484 54.6 뷰 컨트롤러 구성하기 484 54.7 사용자 인터페이스 설계하기 485 54.8 Banner Ad 만들기 486 54.9 광고 표시하기 486 54.10 델리게이트 메서드 구현하기 488 54.11 요약 490 Chapter 55 ios 6 아이폰 멀티태스킹 개요 _ 491 55.1 ios 애플리케이션 상태 이해하기 491 55.2 멀티태스킹 애플리케이션의 수명주기에 대한 개념 492 55.3 ios 애플리케이션에서 멀티태스킹 비활성화하기 493 55.4 멀티태스킹 지원 체크하기 495
XXII 차 례 55.5 지원되는 백그라운드 실행 형태 495 55.6 백그라운드 실행 규칙 496 55.7 로컬 노티피케이션 예약하기 497 Chapter 56 ios 6 아이폰 로컬 노티피케이션 예약하기 _ 498 56.1 로컬 노티피케이션 아이폰 앱 프로젝트 만들기 499 56.2 애플리케이션 델리게이트 메서드 위치시키기 499 56.3 프로젝트에 사운드 파일 추가하기 499 56.4 로컬 노티피케이션 예약하기 500 56.5 애플리케이션 테스트하기 501 56.6 예약된 노티피케이션 취소하기 501 56.7 로컬 노티피케이션 즉시 호출하기 502 56.8 요약 502 Chapter 57 ios 6 애플리케이션 상태 보존과 복원의 개요 _ 503 57.1 보존과 복원 절차 504 57.2 보존과 복원 선택하기 505 57.3 복원 식별자 할당하기 505 57.4 UIKit의 디폴트 보존 기능 506 57.5 추가적인 상태 정보 저장하기와 복원하기 507 57.6 복원 절차 이해하기 508 57.7 일반적인 애플리케이션 상태 저장하기 510 57.8 요약 511 Chapter 58 ios 6 아이폰 상태 보존과 복원 튜토리얼 _ 512 58.1 예제 애플리케이션 생성하기 512 58.2 상태 보존 없는 애플리케이션 만들기 512 58.3 상태 보존 적용하기 513 58.4 복원 식별자 설정하기 514 58.5 뷰 컨트롤러 상태를 인코딩하기와 디코딩하기 515 58.6 스토리보드에 내비게이션 컨트롤러 추가하기 517 58.7 세 번째 뷰 컨트롤러 추가하기 519 58.8 복원 클래스 생성하기 521 58.9 요약 523
차 례 XXIII Chapter 59 MKMapItem을 이용하여 아이폰 ios 6 애플리케이션과 지도 통합하기 _ 524 59.1 MKMapItem과 MKPlacemark 클래스 525 59.2 순방향 및 역방향 지오코딩에 대한 소개 525 59.3 MKPlacemark 인스턴스 생성하기 528 59.4 MKMapItem으로 작업하기 528 59.5 MKMapItem 옵션들과 턴 방식 길찾기 활성화하기 530 59.6 상세 항목을 MKMapItem에 추가하기 531 59.7 요약 533 Chapter 60 ios 6 아이폰 MKMapItem 애플리케이션 예제 _ 534 60.1 MapItem 프로젝트 생성하기 534 60.2 사용자 인터페이스 설계하기 534 60.3 순방향 지오코딩을 이용하여 목적지 변환하기 536 60.4 지도 실행하기 538 60.5 빌드 라이브러리 추가하기 539 60.6 애플리케이션 빌드하고 실행하기 539 60.7 요약 540 Chapter 61 ios 6 코어 로케이션 프레임워크를 이용하여 아이폰 위치 정보 얻기 _ 541 61.1 코어 로케이션의 기초 541 61.2 로케이션 정확도 설정하기 542 61.3 거리 필터 구성하기 542 61.4 로케이션 매니저 델리게이트 543 61.5 CLLocation 객체에서 위치 정보 얻기 544 61.6 거리 계산하기 545 61.7 위치 정보와 멀티태스킹 545 61.8 요약 545 Chapter 62 ios 6 아이폰 로케이션 예제 애플리케이션 _ 546 62.1 ios 6 아이폰 로케이션 예제 애플리케이션 만들기 546 62.2 프로젝트에 코어 로케이션 프레임워크 추가하기 546 62.3 사용자 인터페이스 설계하기 547
XXIV 차 례 62.4 CLLocationManager 객체 레이블 만들기 549 62.5 액션 메서드 구현하기 549 62.6 애플리케이션 델리게이트 메서드 구현하기 550 62.7 아이폰 로케이션 애플리케이션 빌드 및 실행하기 552 Chapter 63 MapKit과 MKMapView 클래스를 이용하여 아이폰에서 지도 다루기 _ 554 63.1 MapKit 프레임워크에 대해 554 63.2 Map Regions 이해하기 555 63.3 아이폰 MKMapView 튜토리얼 555 63.4 아이폰 지도 튜토리얼 만들기 555 63.5 Xcode 프로젝트에 MapKit 프레임워크 추가하기 556 63.6 MKMapView 인스턴스와 툴바 생성하기 556 63.7 맵 뷰 설정하기 558 63.8 MapView 영역 변경하기 559 63.9 지도 형식 변경하기 559 63.10 아이폰 MapView 애플리케이션 테스트하기 560 63.11 사용자 이동에 따른 Map View 업데이트하기 561 63.12 맵 뷰에 기본적인 어노테이션 추가하기 562 Chapter 64 날짜와 위치를 기반으로 한 미리 알림을 만들기 위하여 ios 6 Event Kit 이용하기 _ 564 64.1 Event Kit Framework의 개요 565 64.2 EKEventStore 클래스 565 64.3 데이터베이스에서 캘린더 접근하기 567 64.4 현재 미리 알림 접근하기 568 64.5 미리 알림 생성하기 569 64.6 알람 생성하기 570 64.7 예제 프로젝트 생성하기 570 64.8 날짜/시간 기반의 미리 알림 화면을 위한 사용자 인터페이스 설계하기 570 64.9 미리 알림 코드 구현하기 572 64.10 키보드 숨기기 574 64.11 위치 기반 미리 알림 뷰 설계하기 575
차 례 XXV 64.12 위치 기반 미리 알림 생성하기 576 64.13 Core Location Framework와 Event Kit Framework 추가하기 580 64.14 애플케이션 테스트하기 580 64.15 요약 581 Chapter 65 아이폰 카메라와 포토 라이브러리 접근하기 _ 582 65.1 ios 6 UIImagePickerController 클래스 582 65.2 UIImagePickerController 인스턴스 만들고 구성하기 583 65.3 UIImagePickerController 델리게이트 구성하기 584 65.4 기기의 지원 기능 확인하기 586 65.5 무비와 이미지 저장하기 587 65.6 요약 588 Chapter 66 ios 6 아이폰 카메라 예제 애플리케이션 _ 589 66.1 예제 애플리케이션에 대해 589 66.2 카메라 프로젝트 만들기 590 66.3 프레임워크 추가하기 590 66.4 사용자 인터페이스 설계하기 590 66.5 액션 메서드 구현하기 592 66.6 델리게이트 메서드 구현하기 594 66.7 애플리케이션 빌드 및 실행하기 595 Chapter 67 ios 6 아이폰 애플리케이션에서 비디오 재생하기 _ 597 67.1 MPMoviePlayerController 클래스 개요 597 67.2 지원하는 비디오 포맷 598 67.3 아이폰 무비 플레이어 예제 애플리케이션 598 67.4 MediaPlayer 프레임워크 추가하기 598 67.5 사용자 인터페이스 설계하기 599 67.6 MoviePlayer 인스턴스 선언하기 599 67.7 액션 메서드 구현하기 599 67.8 타깃-액션 노티피케이션 메서드 600 67.9 애플리케이션 빌드 및 실행하기 601
XXVI 차 례 Chapter 68 AVAudioPlayer를 이용하여 아이폰에서 오디오 재생하기 _ 602 68.1 지원하는 오디오 포맷 602 68.2 재생 노티피케이션 받기 603 68.3 재생 모니터링 및 제어하기 604 68.4 아이폰 오디오 예제 애플리케이션 만들기 604 68.5 AVFoundation 프레임워크 추가하기 605 68.6 프로젝트 리소스에 오디오 파일 추가하기 605 68.7 사용자 인터페이스 설계하기 605 68.8 액션 메서드 구현하기 607 68.9 AVAudioPlayer 객체 만들고 초기화하기 608 68.10 AVAudioPlayerDelegate 프로토콜 메서드 구현하기 609 68.11 애플리케이션 빌드 및 실행하기 609 Chapter 69 AVAudioRecorder로 아이폰에서 오디오 녹음하기 _ 610 69.1 아이폰 AVAudioRecorder 튜토리얼의 개요 610 69.2 녹음 프로젝트 만들기 611 69.3 사용자 인터페이스 설계하기 611 69.4 AVAudioRecorder 인스턴스 생성하기 612 69.5 액션 메서드 구현하기 614 69.6 델리게이트 메서드 구현하기 615 69.7 애플리케이션 테스트하기 616 Chapter 70 트위터와 페이스북을 아이폰 ios 6 애플리케이션에 통합하기 _ 617 70.1 ios 6 UIActivityController 클래스 617 70.2 Social Framework 618 70.3 ios 6 Accounts Framework 618 70.4 UIActivityViewController 클래스 이용하기 620 70.5 SLComposeViewController 클래스 이용하기 622 70.6 요약 624 Chapter 71 UIActivityViewController를 이용한 아이폰 ios 6 Facebook 통합 튜토리얼 _ 625 71.1 Facebook 소셜 앱 생성하기 625
차 례 XXVII 71.2 사용자 인터페이스 설계하기 625 71.3 아웃렛과 액션 생성하기 626 71.4 selectimage와 델리게이트 메서드 구현하기 628 71.5 키보드 감추기 629 71.6 Facebook에 메시지 포스팅하기 629 71.7 Social Framework를 Build Phases에 추가하기 630 71.8 소셜 애플리케이션 실행하기 631 71.9 요약 632 Chapter 72 SLRequest를 이용한 아이폰 ios 6 Facebook과 Twitter 통합 _ 633 72.1 SLRequest와 Account Framework 634 72.2 SLRequest를 이용한 Twitter 통합 634 72.3 SLRequest를 이용한 Facebook 통합 638 72.4 요약 640 Chapter 73 SLRequest를 이용한 ios 6 아이폰 Twitter 통합 튜토리얼 _ 641 73.1 TwitterApp 프로젝트 생성하기 641 73.2 사용자 인터페이스 설계하기 641 73.3 인터페이스 파일 수정하기 643 73.4 Twitter API 접근하기 644 73.5 gettimeline 메서드 호출하기 647 73.6 Table View 델리게이트 메서드 648 73.7 Build Phases에 Account Framework와 Social Framework 추가하기 649 73.8 애플리케이션 빌드하기와 실행하기 649 73.9 요약 650 Chapter 74 SKStoreProductViewController 클래스로 판매하기 _ 651 74.1 SKStoreProductViewController 클래스 652 74.2 예제 프로젝트 생성하기 653 74.3 사용자 인터페이스 생성하기 653 74.4 스토어 킷 제품 뷰 컨트롤러 표시하기 654 74.5 델리게이트 메서드 구현하기 656
XXVIII 차 례 74.6 Store Kit Framework를 Build Phases에 추가하기 656 74.7 애플리케이션 테스트하기 657 74.8 요약 658 Chapter 75 아이폰 ios 6 애플리케이션에 앱 내 결제 구축하기 _ 659 75.1 앱 내 결제 옵션 659 75.2 앱 스토어가 호스팅하도록 콘텐츠 업로드하기 660 75.3 앱 내 결제 아이템 구성하기 661 75.4 제품 요청 전송하기 661 75.5 Payment Queue 접근하기 663 75.6 트랜잭션 감시자 객체 663 75.7 결제 시작하기 664 75.8 트랜잭션 처리 664 75.9 트랜잭션 복원 666 75.10 앱 내 결제 테스트 667 75.11 요약 667 Chapter 76 앱 내 결제를 위한 ios 6 애플리케이션 준비하기 _ 668 76.1 예제 애플리케이션에 대하여 668 76.2 App ID 생성하기 669 76.3 프로비저닝 프로파일 생성하기 670 76.4 Xcode 프로젝트 생성하기 671 76.5 프로비저닝 프로파일 설치하기 671 76.6 코드 서명 설정하기 672 76.7 itunes Connect에서 애플리케이션 설정하기 673 76.8 앱 내 결제 아이템 생성하기 674 76.9 요약 675 Chapter 77 아이폰 ios 6 앱 내 결제 튜토리얼 _ 676 77.1 애플리케이션 사용자 인터페이스 676 77.2 스토리보드 설계하기 677 77.3 결제 뷰 컨트롤러 생성하기 678 77.4 InAppDemoViewController 클래스 완성하기 679
차 례 XXIX 77.5 PurchaseViewController 클래스 완성하기 681 77.6 StoreKit Framework를 빌드에 추가하기 685 77.7 애플리케이션 테스트하기 685 77.8 문제 해결 686 77.9 요약 687 Chapter 78 ios 6 앱 내 결제를 위하여 콘텐츠가 호스팅되는 앱 스토어 구성하고 생성하기 _ 688 78.1 앱 내 결제에서 호스팅된 콘텐츠를 위한 애플리케이션 구성하기 688 78.2 콘텐츠 패키지를 호스팅하는 앱 내 결제 해부하기 689 78.3 콘텐츠 패키지를 호스팅하는 앱 내 결제 생성하기 690 78.4 호스팅될 콘텐츠 패키지 아카이빙하기 691 78.5 호스팅될 콘텐츠 패키지 검증하기 692 78.6 호스팅될 콘텐츠 패키지 업로드하기 692 78.7 요약 693 Chapter 79 앱 스토어에 애플리케이션 제출 및 준비하기 _ 694 79.1 ios 배포 인증서 서명 요청 만들기 694 79.2 인증서 서명 요청 제출하기 695 79.3 배포 인증서 설치하기 695 79.4 앱 스토어 배포 프로비저닝 프로파일 만들기 696 79.5 애플리케이션에 아이콘 추가하기 696 79.6 배포를 위해 애플리케이션 아카이브하기 697 79.7 itunes Connect에서 애플리케이션 설정하기 699 79.8 애플리케이션 검증하기와 제출하기 700 찾아보기 702
iphone ios 6 Development Essentials 역자 머리말 2012년은 ios 개발자들에게 큰 변화를 가져다 준 한 해였다. 여러 가지 다양한 루머 와 기대 속에 ios 6 SDK와 아이폰 5가 발표되었다. 어떤 이들은 기대에 못 미친다 고 했고, 이전의 것들과 달라지지 않았다고 했다. 역자도 그러했다. 저자도 그러했지만, 역자 역시 ios 6는 그저 조금 더 잘 정리된 ios 5 정도로 여겼으며 더 알아야 할 것들 이 거의 없다고 생각했었다. 하지만, 사실은 달랐다. 언제나 그러했듯이 애플은 현업에서 ios 애플리케이션 개발을 하고 있는 개발자들을 포함한 모든 사용자들이 상상하지 못할 변화와 편의성을 ios 6 SDK를 통해서 제공하였고, ios 애플리케이션 사용자들에게 더 멋지고 풍부한 서비스를 제공하기 위하여 개발자들에게 무엇이 필요하고 어떻게 제공해 야 하는지를 안내해 주고 있다. ios 6가 꼭 필요해? 어차피 ios 애플리케이션을 만드는데 예전에 했던 것처럼 하면 안 되는 거야? 혹자는 이렇게 생각할지 모르겠다. 역자도 처음에 그렇게 생각했다. 하지만, 아니다! ios 6를 알아야 한다. 역자의 경험에 비추어 보면, ios 6 SDK를 사용하지 않고 (즉, ios 5에 대한 지식과 방식으로) 애플리케이션을 개발할 때와 ios 6 SDK를 이용하여 개발할 때는 커다란 차이가 있었다. ios 6 SDK를 이용하지 않고 미친 듯이 코딩(역자는 이것을 분노의 타이핑 이라 부른다)을 해서 구현한 것과 이용한 것은 겉보기에는 동일해 보 이지만, 그 내부의 코드 구조와 메커니즘에는 커다란 차이가 나타났다. 이것은 마치 어떠 한 함수를 직접 구현하여 사용하는 것과 이미 제공되는 메서드를 사용하는 것의 차이라 XXX
역자 머리말 XXXI 고 비유할 수 있겠다. 이 책을 읽고 있는 여러분이 개발자인가? 그렇다면 분노의 타이핑 을 할 것인가? 아니면 ios 6를 이용하여 깔끔한 애플리케이션을 만들 것인가? 말하지 않 아도 이미 답이 나왔으리라 생각된다. 이 책은 많은 내용들을 담고 있다. 이전 버전과는 다른, 완전히 새로운 내용들과 기능 들이 추가되었다. 예를 들면, 아이폰 5와 그 이전 디바이스 모두에 맞는 UI를 만드는 자동 레이아웃(Auto Layout) 기능이라든지, UICollectionView, 상태 보존, 새로운 지도, Event Kit, 소셜 네트워크 서비스들, 앱 내 결제, 그리고 애플의 서버를 이용하 는 콘텐츠 제공 등이다. 여러분이 개발하는, 또는 개발하고자 하는 애플리케이션에 이 러한 기능들을 넣고 싶지 않은가? 세상을 깜짝 놀라게 할 애플리케이션을 준비하고 있 다면 ios 6 SDK가 그 길을 도와 줄 것이며, 이 책이 그 옆에서 친구가 되어 줄 것이라 믿는다. 번역을 한다는 것은 그냥 우리말 문장으로 만드는 것 이상을 요구한다. 대상 독자들이 주 로 사용하는 표현과 형식으로 설명해야 하는 작업이다. 아마도 모든 역자들이 이러한 목 적과 부담감에 힘들어 하고 어려워 할 것이다. 저자가 표현하고자 하는 문장뿐만 아니라 그 이면의 느낌과 분위기도 함께 표현하려고 하였고, 이러한 노력이 독자 여러분께 잘 전 달되길 바라고 있다. 번역한 내용들을 많이 읽고 확인했지만, 역자 역시 부족한 사람인 지라 실수와 모자람이 있을 것이다. 이러한 실수와 부족함을 조금이나마 채우고자 카페 (http://cafe.naver.com/petersbook)를 운영하고 있다. 이 책을 읽으면서 궁금하거나 재 미있는 내용이 있다면, 또는 자신이 알고 있는 기술(지식)이 있다면 함께 나눌 수 있기를 희망한다. 여기에는 독자와의 Q&A와 샘플 코드, 그리고 오탈자에 대한 정보들이 있을 것이다. You are Almighty God! 작업이 끝나면 전능하신 하나님에게 고백하게 된다. 그 분 의 놀라운 계획 속에 있게 하심과 그 길을 인도하신 하나님을 찬양한다. 언제나 한결같이 응원해 주시는 부모님들께 감사의 마음을 전하고 싶다. 특히 작업 기간 동안 함께 시간 을 보내지 못해도 사랑과 든든함으로 항상 옆에 있어 준 나의 사랑스런 아내(강승희)에게 너무너무 고맙고 사랑한다는 말을 전한다. 세상을 놀라게 하려고 오늘도 고생하고 힘쓰 는 트렌디앱(http://www.trendyapp.co.kr) 임직원 모두에게 감사와 격려를 보낸다. 세 상의 문화를 바꾸는 트렌드를 우리가 만들 것이라 믿어요. 책이 나올 때 가장 중요하고
XXXII 역자 머리말 큰 역할은 편집 이라고 믿는다. 그 어렵고 고된 작업을 최고의 기술과 열정으로 진행하는 제이펍 에게 감사와 존경을 표하지 않을 수 없다. 역자의 어색한 문장과 표현을 세련된 언어로 바꿔주는 제이펍 의 능력에 놀라지 않을 수 없다. 역자의 초안을 본다면, 제이펍 이 얼마나 멋지고 대단한 작업을 하는지 여러분이 알 수 있을 것이다. 마지막으로, 하루 하루 항상 내 마음에 자리 잡고 있는 사랑하는 내 아버지께 말로 다 표현할 수 없는 감사 와 사랑을 전하고 싶다. 2012년의 마지막 날 황반석
iphone ios 6 Development Essentials Chapter 1 이 책에 대하여 2012년 6월, Apple World Wide Development Conference에서 ios 6에 대해 처 음 발표될 때, ios 5 버전이었던 이 책은 외견상으론 ios 6로의 업데이트가 꼭 필요하지 않아 보였다. 하지만 ios 6 SDK의 pre-release 버전을 받아서 새로운 기 능들을 살펴보니 ios 5 이후 변경되지 않은 것들이 있었지만, 처음 등장한 ios 6의 새로운 기능들이 훨씬 더 많이 있다는 것을 알았다. 사실상 이 책에 새로 추가된 23 개의 장들은 ios 6의 새로운 기능들에 대한 내용을 다루고 있으며, 이를 반영하기 위 하여 오브젝티브-C로 구현된 모든 예제 코드가 업데이트되었다. 이 책을 어떻게 활용할 것인지는 여러분이 처음으로 ios 개발을 하는 초보자인지, 아니 면 ios 5로 작업한 경험이 있어서 ios 6의 기능들만 빠르게 습득해야 하는지에 따라 다 를 것이다. 확신하건데, 이 책은 양쪽 그룹에 있는 모든 독자들에게 도움이 되도록 작성 되었다. 1.1 처음 ios 개발을 하는 개발자를 위하여 만일 여러분이 ios 개발에 처음이라면 이 책의 전체 내용이 여러분에게 필요할 것 이다. 1
2 CHAPTER 1 이 책에 대하여 기초부터 시작하는 이 책은 아이폰 하드웨어와 ios 6의 아키텍처에 대한 전반적인 내용 을 제공한다. 아이폰 애플리케이션과 사용자 인터페이스에 대한 설계를 심도 있게 살펴 보면서 오브젝티브-C 프로그래밍에 대해 소개한다. 또한, 파일 핸들링, 데이터베이스 관리, 앱 내(in-app) 결제, 그래픽 드로잉, 그리고 애니메이션을 다루며, 터치 스크린 핸 들링, 제스처 인식, 멀티테스킹, iad 통합, 위치 관리, 로컬 노티피케이션, 카메라 접근, 그리고 비디오 및 오디오 재생에 대한 지원도 다룬다. 오토 레이아웃, 트위터 및 페이스 북 통합, 이벤트 알림, 앱 내 결제 내용을 관리하는 앱 스토어, 컬렉션 뷰 등을 포함하는 새로운 ios 6의 특정 기능들도 다룬다. 따라서 이 책의 목적은 여러분 자신의 아이폰 앱을 만드는 데 필요한 기술들을 가르치는 것이다. 저자는 여러분이 ios 6 SDK와 Xcode를 다운로드한 상태이며, 인텔 기반의 맥 과 함께 개발하려는 어떤 아이디어를 가지고 있어서 시작할 준비가 되었다고 가정한다. 1.2 ios 5 개발자를 위하여 만일 여러분이 핵심만 골라 배우는 ios 5 프로그래밍 (제이펍) 책을 이미 읽었거나 ios 5 SDK에 대한 경험이 있다면, ios 6의 새로운 내용을 바로 읽어보고 싶을 것이다. 앞에 서 말했듯이, 여러분이 핵심만 골라 배우는 ios 5 프로그래밍 책을 이미 읽었다면 적어 도 23개의 새로운 장들이 추가되었음을 발견하게 될 것이다. 이전 버전의 책에 포함되지 않고 이 책에 새롭게 추가된 장들은 다음과 같다. 최신 오브젝티브-C의 기초 ios 6에서의 Auto Layout 소개 인터페이스 빌더에서 ios 6의 Auto Layout Constraints로 작업하기 아이폰 ios 6 Auto Layout 예제 코드로 ios 6의 Auto Layout Constraints 구현하기 ios 6의 교차 계층 구조 Auto Layout Constraints 구현하기 ios 6 Auto Layout 시각적 형식 언어 이해하기 ios 6의 컬렉션 뷰와 플로우 레이아웃에 대한 개요
1.3 예제 소스 코드 3 아이폰 ios 6 스토리보드 기반의 컬렉션 뷰 튜토리얼 ios 6 컬렉션 뷰 플로우 레이아웃 확장과 하위 클래스로 만들기 ios 6의 애플리케이션 상태 보존 및 복원에 대한 개요 ios 6의 애플리케이션 상태 보존 및 복원 튜토리얼 MKMapItem을 이용하여 아이폰 ios 6 애플리케이션에 지도 통합하기 ios 6 MKMapItem 애플리케이션 예제 날짜 생성과 위치 기반 알림을 위한 ios 6 Event Kit 이용하기 아이폰 ios 6 애플리케이션에 트위터 및 페이스북 통합하기 UIActivityViewController를 이용한 아이폰 ios 6 페이스북 통합 튜토리얼 SLRequest를 이용한 아이폰 ios 6 페이스북 및 트위터 통합 SKStoreProductViewController 클래스로 스토어 구매 만들기 아이폰 ios 6 애플리케이션에 앱 내 결제 구축하기 앱 내 결제를 위한 준비 아이폰 ios 6 애플리케이션 앱 내 결제 튜토리얼 ios 6 앱 내 결제에 대한 내용을 관리하는 앱 스토어 설정하고 생성하기 또한, Xcode 스토리보드 사용하기 라는 장은 ios 6의 새로운 기능에 대한 내용을 추가 하여 업데이트하였으며, ios 6 테이블 뷰와 Xcode 스토리보드에 대한 개요 장은 테이 블 뷰 셀을 재사용하는 새로운 ios 6 모델을 소개하기 위하여 수정되었다. 마지막으로, 모든 예제 코드들은 viewdidunload: 메서드 제거 및 디폴트 프로퍼티 통합(synthesize)을 포함한 오브젝티브-C의 수정된 부분들을 반영하도록 업데이트 되었다. 1.3 예제 소스 코드 이 책에서 사용하는 소스 코드와 Xcode 프로젝트 파일은 http://www.ebookfrenzy. com/code/iphoneios6.zip에서 다운로드받을 수 있다.
4 CHAPTER 1 이 책에 대하여 1.4 피드백 이 책을 선택한 것에 대해 독자들이 만족하기를 바란다. 혹시 이 책에 대해 언급 할 사항, 질문 등이 있으면 feedback@ebookfrenzy.com(저자)이나 naya.peter@ gmail.com(역자)을 통해 연락하기 바란다. 1.5 오탈자 이 책 내용의 정확성을 위해 많은 노력을 했지만, 다양하고 복잡한 주제들을 다루는 책은 몇몇 오류와 실수가 있을 수 있다. 이 책에 대해 알려진 모든 오탈자들과 그 해결책들은 다음의 URL에서 설명한다(옮긴이_번역서에 대한 오탈자는 역자의 인터넷 카페(http://cafe. naver.com/petersbook)에서 확인할 수 있다). URL http://www.ebookfrenzy.com/errata/iphone_ios6.html 혹시 여러분이 위의 URL에 있지 않은 에러를 발견했다면, 우리의 기술지원 팀의 이메일 주소인 feedback@ebookfrenzy.com으로 보내주길 바란다(옮긴이_번역서에 대한 내용은 역자의 이메일 주소(naya.peter@gmail.com)로 보내주길 바란다).
iphone ios 6 Development Essentials Chapter 2 Apple ios 개발자 프로그램에 가입하기 ios 6 기반의 아이폰 애플리케이션 개발을 시작함에 있어 첫 번째 단계는 등록된 애플 개발자와 ios 개발자 프로그램 회원의 차이점에 대한 이해를 확실히 하는 것 이다. 차이점에 대해 이해를 하고 나면 비용을 지불하고 ios 개발자 프로그램에 가 입할 것인지 말지를 결정할 수 있다. 이번 장에서는 두 가지의 차이점과 비용, 혜택 등에 대해 정리를 해보고, 각각 등록하는 과정을 알아보기로 하자. 2.1 등록된 애플 개발자 등록된 애플 개발자가 되는 데 필요한 비용은 없다. 다음의 웹 페이지를 방문하여 등록 절차를 시작하면 된다. URL http://developer.apple.com/programs/register/ 아이튠즈나 애플 스토어를 위해 이미 만들어 놓은 애플 ID가 있으면 등록을 위해 사용할 수 있다. 등록 과정이 완료되면, 온라인 문서나 사용 지침서와 같은 개발자 자료에 접근할 수 있 다. 또한 등록된 개발자는 이전 버전의 ios SDK와 Xcode 개발환경을 다운로드받을 수 있다. 5
6 CHAPTER 2 Apple ios 개발자 프로그램에 가입하기 2.2 Xcode와 ios 6 SDK 다운로드하기 최신 ios SDK와 Xcode 버전은 맥용 앱 스토어에서 무료로 다운로드받을 수가 있 다. 이러한 것들이 무료이기 때문에 ios 개발자 프로그램으로 업그레이드할 것인지, 아니면 그대로 등록된 애플 개발자로 남아 있을지에 대한 문제가 발생한다. 따라서 ios 개발자 프로그램이 주는 혜택을 이해하는 것은 중요하다. 2.3 ios 개발자 프로그램 ios 개발자 프로그램의 멤버십은 현재 1년에 99달러다. 앞에서 설명했듯이 멤버십은 최 신 버전의 ios SDK와 Xcode 개발환경을 다운로드받을 수 있다. 하지만 멤버십이 주는 혜택은 등록된 애플 개발자 수준을 훨씬 뛰어넘는다. 그 중 한 가지 혜택은 개발자 프로그램을 통해 실제 물리적인 기기에서 애플리케이션을 테스트할 수 있는 프로비저닝 프로파일과 인증서를 만들 수 있다는 점이다. Xcode에 디 바이스 시뮬레이터가 있어 대부분의 테스트를 수행할 수 있지만, 위치 추적 및 디바이스 움직임과 같은 특정 기능들은 실제 기기에서만 테스트할 수 있다. 그리고 중요한 점은 아 이클라우드(iCloud) 접근과 미리 알림(Reminders), 그리고 앱 내 결제 관련한 애플리케 이션은 실제 기기에서만 테스트할 수 있다. 또한, ios 개발자 프로그램 멤버는 ios SDK와 관련된 모든 종류의 지침서나 사용 지침 서에 접근할 수 있다. 그리고 단지 두 개의 문의만 가능하긴 하지만, 애플의 ios 기술지 원 엔지니어에게 기술 문의를 할 수도 있다. 가장 중요한 점은 ios 개발자 프로그램 멤버만이 앱 스토어를 통한 애플리케이션 판매 및 배포를 할 수 있다는 점이다. 따라서 앱 스토어에 애플리케이션을 올리려면 어느 시점에서는 개발자 프로그램 멤버에 가입해야 한다. 그럼 언제 가입해야 할까?
2.5 ios 개발자 프로그램에 가입하기 7 2.4 언제 ios 개발자 프로그램에 가입할까? ios 개발자 프로그램 멤버십이 여러 가지 혜택을 제공하고, 특히 애플리케이션을 판매하기 위해서는 필수적이라는 것은 분명하다. 그럼 지금 가입을 할 것인지, 아니면 나중에 가입을 할 것인지는 개인적인 상황에 따라 다를 것이다. 만약 지금 ios 애플리케이션 개발에 대해 공부를 하는 첫 단계이거나 아직까지 멋진 아이디어가 없다면, 등록된 애플 개발자 패키지 가 제공하는 것으로 충분할 것이다. 개발 관련 기술을 습득하고 애플리케이션 개발에 대한 아이디어를 충분히 가다듬은 후에 개발자 프로그램에 가입해도 늦지 않다. 반면에 조만간 프로그램의 개발이 끝나 배포를 계획하고 있거나 실제 기기에서 테스트해 야 하는 기능이 있다면 개발자 프로그램에 가입할 필요가 있을 것이다. 2.5 ios 개발자 프로그램에 가입하기 만약 회사에서 아이폰 애플리케이션을 개발하는 것이라면 회사가 이미 멤버십 가 입을 했는지 확인하는 것이 필요하다. 이런 경우라면 회사의 프로그램 관리자에 게 연락하여 개발 팀원으로 참여할 수 있도록 ios 개발자 프로그램 멤버 센터의 초 대장을 요청한다. 이 과정이 진행되면 You Have Been Invited to Join an Apple Developer Program 이라는 제목과 멤버십을 활성화시킬 수 있는 링크가 포함된 이 메일을 애플로부터 받을 것이다. 만약 여러분의 회사가 개발자 프로그램 멤버십 가 입을 하지 않았다면 다음의 링크를 통해 가입할 수 있다. URL http://developer.apple.com/programs/ios/ 가입 옵션은 기업과 개인 두 가지 방법이 있다. 개인으로 가입을 하려면 신분을 증명 하기 위한 신용카드 정보를 제공해야 한다. 기업으로 가입을 하려면 사업자등록증 및 법인에 대한 정보를 제공할 수 있는 권한이 있어야 한다. 개인용 멤버 등록은 보통 24시간 이내에 활성화(activation) 이메일이 애플로부터 도 착할 것이다. 기업용 멤버 등록은 추가적인 확인 사항이 많아서 훨씬 긴 시간이 필요 하며, 경우에 따라 수주, 수개월이 필요할 수 있다.
8 CHAPTER 2 Apple ios 개발자 프로그램에 가입하기 기다리는 동안에도 아래 URL을 통해 애플 ID와 암호를 사용하여 로그인함으로써 제한 적이긴 하지만 자료 접근이 가능하다. URL http://developer.apple.com/membercenter 로그인 후 화면 상단의 Your Account 탭을 선택하면 개발자 프로그램 가입 상태가 Enrollment Pending 으로 보일 것이다. 그림 2-1 활성화 이메일을 받은 후 멤버 센터에 접속하면 그럼 2-2와 같은 다양한 형태의 자료에 접근이 가능하다. 그림 2-2
2.6 요약 9 2.6 요약 ios 6 애플리케이션 개발 초기 단계에서 중요한 점인 등록된 애플 개발자 및 ios 개발자 프로그램 멤버십 가입 시점에 대해 알아보았다. 이 장에서는 두 가지 프로그램의 개략적 인 차이와 개발자 프로그램에 관해 기억하고 있어야 할 점 및 등록과정에 대해 간략하게 알아보았다. 다음 단계에서는 ios 6 SDK 및 Xcode 개발환경을 다운로드받고 설치하는 방법에 대해 알아보자.
iphone ios 6 Development Essentials Chapter 3 Xcode 4와 ios 6 SDK 설치하기 모든 아이폰 앱은 ios SDK와 Xcode 4.x 개발환경으로 개발된다. ios SDK에는 ios 6 아키텍처 및 프레임워크에서 살펴본 여러 가지 개발 프레임워크가 포함되어 있다. Xcode 4.x는 통합 개발환경으로 코딩, 컴파일, 테스트 및 디버그를 수행할 수 있 다. 또한 Xcode 4.x에는 인터페이스 빌더라는 기능이 있어 UIKit 프레임워크가 제공하 는 애플리케이션의 사용자 인터페이스 부분을 그래픽 화면을 통해 디자인할 수 있다. 이제 ios 6 SDK와 Xcode를 맥 OS X에 설치하는 방법에 대해 알아보자. 3.1 여러분의 맥이 Intel 기반인지 PowerPC 기반인지 확인하기 오직 인텔(Intel) 기반의 맥 OS X 시스템에서만 ios 애플리케이션을 개발할 수 있다. 만 약 오래된 PowerPC 기반의 맥을 가지고 있다면 아이폰 앱 개발을 위해서는 최신의 시 스템을 구입해야 한다. 만약 어떤 프로세서를 사용하고 있는지 확실하지 않다면, 화면의 왼쪽 상단에 있는 애플 메뉴에서 이 맥킨토시에 관하여(About This Mac) 를 선택한다. 화면에 표시되는 대화상자에서 프로세서로 시작되는 항목을 보자. 그림 3-1은 인텔 기 반의 시스템이라는 것을 보여주고 있다. 만약 대화상자에 표시되는 항목이 인텔 기반의 프로세서가 아니라면 아쉽게도 아이폰 10
3.2 Xcode 4와 ios 6 SDK 설치하기 11 ios 앱 개발을 할 수 없는 시스템이다. 추가로, ios 6 SDK와 Xcode 4.5 환경은 맥 OS X의 버전이 10.7.4보다 최신일 것을 요구한다. 만약 이 매킨토시에 관하여(About This Mac) 대화상자의 맥 OS X 버전이 10.7.4보다 최신이 아닐 경우는 Software Update... 항목을 선택하여 운영체제를 업 그레이드한다. 그림 3-1 3.2 Xcode 4와 ios 6 SDK 설치하기 최신의 Xcode 4와 ios SDK를 얻는 방법은 다음의 애플 ios 개발센터에 접속하는 것 이다. URL https://developer.apple.com/xcode/ 인터넷 속도에 따라 다르기는 하지만, 3.5GB가 넘는 크기로 인해 다운로드가 끝나기까 지는 제법 긴 시간이 걸릴 것이다.
12 CHAPTER 3 Xcode 4와 ios 6 SDK 설치하기 3.3 Xcode 시작하기 SDK와 Xcode 4가 성공적으로 설치되었다면 이제 아이폰 애플리케이션 예제를 작성할 수 있다. Xcode 4를 실행하기 위해 파인더를 연 후 왼편의 매킨토시 HD를 선택하고, Developer 폴더의 Applications 폴더를 더블클릭한다. 이 폴더에 Xcode 아이콘이 있 을 것이다. 이제 자주 Xcode를 사용할 것이므로 아이콘을 독(dock)에 끌어놓음으로써 편하게 실행시키자. Xcode 아이콘을 클릭하여 Xcode를 실행시킨다. Xcode를 처음 실행시키면 Welcome 화면이 표시된다. 그림 3-2 ios 6 SDK를 설치하고 Xcode 4의 실행에 성공하였다면, 이제 간단한 아이폰 ios 6 앱 만들기를 진행할 수 있다.
iphone ios 6 Development Essentials Chapter 4 간단한 아이폰 ios 6 앱 만들기 프로그래밍 관련 책에서 간단한 예제로 시작하는 것은 일반적인 방법이다. 많은 책들 이 이러한 방법으로 설명을 시작하지만, 최근 일부 책들은 이러한 방법을 따르고 있지 않다. 그러나 이는 간단한 예제로 개발을 시작하는 방법의 좋은 점을 간과하고 있는 것이다. 좋은 점 중 한 가지는 간단한 예제를 실행해봄으로써 복잡한 프로그램을 개발하 기 전에 여러분들의 개발환경이 제대로 설치되고 제대로 동작하고 있다는 것을 매우 간 단하게 확인할 수 있다는 점이다. 두 번째는 초기 단계의 작은 성공이 배움의 과정에서 의지와 의욕이 될 수 있다는 점이다. 복잡한 예제는 기반에 깔려 있는 기술이 복잡한 경 우가 많아 이해하는 데 시간이 오래 걸리고, 어려우며, 따라서 성취감을 느끼기 어려운 경우가 많다. 따라서 이 책에서는 전통에 따라 매우 간단한 예제로 시작하도록 하겠다. 프로그래밍 세 계에서 유명한 전통이라고 할 수 있는 Hello World 로 시작해보자. Hello World 예제는 C 프로그래밍 언어를 만든 브라이언 커닝한(Brian Kernighan)과 데니스 리치 (Dennis Richie)가 쓴 C 언어 프로그래밍(C Programming Language) 이라는 책에서 처 음 사용되었다. ios 6와 아이폰 프로그램 개발에 사용되는 오브젝티브-C도 C 언어에 기원을 두므로 이 예제를 사용하는 것이 이상한 일은 아닐 것이다. 13
14 CHAPTER 4 간단한 아이폰 ios 6 앱 만들기 4.1 Xcode 4 시작하기 이 책에서 사용되는 모든 예제는 Xcode 4 개발환경을 기반으로 한다. 만약 최신 ios SDK와 Xcode가 설치되어 있지 않다면, 이 책의 3장 Xcode 4와 ios 6 SDK 설치하 기 를 참고하기 바란다. 설치가 완료되었다고 가정하고, 앞장에서 이미 만들어 놓은 독 (dock)의 Xcode 아이콘을 실행하거나 파인더로 Macintosh HD Developer Applications Xcode를 실행한다. Xcode를 처음 실행할 때와 이후라도 show this window when Xcode launches 옵션을 끄지 않으면 그림 4-1의 화면이 표시된다. 그림 4-1 만약 이 화면이 보이지 않는다면 Window Welcome to Xcode 옵션을 선택하면 화 면에 표시될 것이다. 이 화면에서 Create a new Xcode project 옵션을 선택한다. 그 럼 다음과 같이 여러 가지 개발 템플릿(template)을 선택할 수 있는 New Project 화면이 표시될 것이다.
4.1 Xcode 4 시작하기 15 그림 4-2 이 화면의 왼편에는 맥 OS X 및 ios 기반의 기기 등 대상 플랫폼을 선택할 수 있는 옵션 이 있다. ios 밑의 Application을 선택한다. 그럼 다음과 같은 템플릿들이 화면에 표시될 것이다. Master-Detail Application - 리스트 기반의 애플리케이션을 개발한다. 마스터 리스트의 항목을 선택하면 해당 항목에 대한 자세한 내용이 화면에 표시된다. Back 버튼을 선택하면 다시 리스트가 표시된다. 뉴스 목록에서 뉴스를 선택하 면 해당 뉴스의 내용이 화면에 표시되는 뉴스 관련 프로그램이 대표적인 예라고 할 수 있다. 아이패드 기반일 경우 스플릿-뷰(split-view) 구성이 적용된다. OpenGL Game - 5장 ios 6 아키텍처와 SDK 프레임워크 에서의 설명처럼 OpenGL ES 프레임워크는 고사양의 그래픽 및 애니메이션 관련 API를 제공 한다. OpenGL ES Game 템플릿은 그래픽 객체와 타이머 객체를 처리하는 OpenGL ES 뷰를 가진 애플리케이션을 생성한다. Page-based Application - 화면을 넘기는 것 같은 효과를 지원하는 뷰를 가진 페 이지 뷰 컨트롤러 애플리케이션을 생성한다.
16 CHAPTER 4 간단한 아이폰 ios 6 앱 만들기 Tabbed Application - 탭 바(tab bar) 애플리케이션을 생성한다. 보통 탭 바는 화 면 아랫부분을 가로지르는 부분에 위치하며, 각 항목이 선택될 때마다 해당 항목 에 맞는 형태의 화면이 표시된다. 아이폰의 기본 전화 애플리케이션 화면이 탭 바의 예라고 할 수 있다. 전화 프로그램 하단의 즐겨찾기, 최근 통화, 연락처, 키 패드와 음성사서함을 선택하면 해당 화면이 표시된다. Utility Application - 양면을 가진 뷰를 생성한다. 아이폰의 기본 날씨 프로그램이 좋은 예가 된다. 정보 버튼을 선택하면 화면이 뒤집히며 설정 화면이 표시된다. 완 료를 선택하면 화면이 다시 뒤집히며 초기 화면이 표시된다. Single View Application - 하나의 뷰와 뷰 컨트롤러를 가진 애플리케이션을 생 성한다. Empty Application - 가장 기본적인 템플릿으로 하나의 윈도우와 델리게이트를 생 성한다. 위에서 설명한 여러 가지 템플릿이 적당하지 않다고 생각하면 이 템플릿 을 선택하면 된다. 간단한 예제를 위해서 Single View Application 템플릿을 선택하고 Next를 클릭하여 프로젝트 옵션 설정 화면으로 이동한다. 그림 4-3
4.1 Xcode 4 시작하기 17 이 화면에서 Product Name에 애플리케이션이 사용할 이름을 입력한다. 지금은 HelloWorld 를 입력하고 Class Prefix에 HelloWorld 가 표시되는지 확인한다. Company Identifier는 보통 회사 웹사이트 URL의 역순을 사용한다. 즉, com. mycompany 형식이 된다. 이는 프로비저닝 프로파일을 생성하고 실제 아이폰 기기 에서 애플리케이션을 테스트할 수 있는 인증서를 생성하는 데 사용된다(자세한 사항은 6 장 아이폰에서 ios 6 앱 테스트하기 - 개발자 인증서 및 프로비저닝 프로파일 에서 알아보자). Class Prefix에 입력된 HelloWorld 는 Xcode에서 만들어지는 클래스의 접두사로 사 용된다. iphone이 Devices 메뉴에서 선택되어 있어야 하며, Use Storyboard와 Include unit Tests 옵션이 선택되지 않았음을 확인한다. Automatic Reference Counting은 오브젝티브-C 컴파일러의 새로운 기능으로서 개발 자들이 더 이상 사용하지 않는 객체를 해제하는 노력을 줄여준다. 매우 유용한 기능이므로 Next 버튼을 클릭하기 전에 이 옵션이 선택되어 있는지 다시 한 번 확인한다. 마지막 화면 에서는 새로 만든 프로젝트가 저장될 파일 시스템의 위치를 선택하고 Create를 클릭한다. 새로운 프로젝트가 생성되면 그림 4-4와 같은 Xcode 화면이 표시된다. 그림 4-4
18 CHAPTER 4 간단한 아이폰 ios 6 앱 만들기 이 시점에서 Xcode가 과연 우리를 위해 무엇을 해주었는지 확인해보자. 우선 애플리케 이션 개발에 필요한 여러 가지 파일을 생성해주었다. 실제 애플리케이션의 작동에 대한 코드인.m 확장자를 가진 오브젝티브-C 소스 코드 파일과 소스 파일에 포함되어 여러 가지 정의와 선언을 담당하는.h 확장자를 가진 헤더 파일이 생성된다. 그리고 인터페이 스 빌더를 가지고 만드는 사용자 인터페이스를 저장하는.xib 파일도 생성된다. 이전 버 전의 인터페이스 빌더는 사용자 인터페이스를.nib 확장자로 저장하였기 때문에 요즘에 도 이 파일을 NIB 파일로 부른다. 또한.plist 확장자를 가진 파일이 몇 개 보일 것이다. 이는 Property List 파일로서 키-밸류 쌍(key/value pair)의 정보를 저장하고 있다. 예 를 들면, HelloWorld-info.plist 파일은 언어, 아이콘 파일, 실행 파일 이름 및 앱 식 별자들에 대한 정보를 저장하고 있다. 이들 파일들은 메인 Xcode 프로젝트 윈도우의 왼 편에 위치한 프로젝트 내비게이터(Project Navigator)에 표시된다. 이 화면 상단의 툴바 에는 빌드와 실행 이력, 브레이크포인트(breakpoints), 컴파일 에러 및 경고, symbol navigator와 검색 화면들을 표시하는 옵션이 위치한다. 기본적으로 가운데 화면은 애플리케이션 설정이 표시된다. 프로젝트 생성 시 만들어지 는 식별자 및 목표 기기도 표시된다. 지원되는 화면의 표시 방향, 사용자가 클릭하는 데 사용되는 작은 아이콘 및 애플리케이션 실행 시 화면에 표시되는 스플래시 화면 이미지 (splash screen image) 등의 옵션도 설정할 수 있다. 이러한 요약 화면 외에 정보, 빌드 설정, 빌드 상태 및 빌드 규칙 등을 설정할 수 있는 탭 이 제공된다. 이 책을 진행하면서 일부 설정에 대해서는 보다 자세하게 알아볼 것이다. 언제라도 요약 화면으로 돌아가려면 프로젝트 내비게이터를 선택하고 항목 중에 가장 윗 부분에 있는 애플리케이션 이름을 선택한다. 내비게이터 화면에서 소스 파일이 선택되면 화면의 가운데 부분에 소스 파일의 내용이 표 시되고 편집이 가능하다. 만약 새로운 편집창에 파일을 띄우려면 파일을 더블클릭한다. 4.2 ios 앱 사용자 인터페이스 만들기 아이폰 앱은 보통 시각적인 사용자 인터페이스를 가지고 있으며, 이를 통해 사용자는 애 플리케이션과 상호작용하고 결과를 얻는다. 물론 개발자가 직접 코드를 작성함으로써 사
4.2 ios 앱 사용자 인터페이스 만들기 19 용자 인터페이스를 만들고 화면에 배치할 수 있지만, 이는 복잡하고 에러가 생길 확률이 높다. 그렇기 때문에 애플은 인터페이스 빌더라 불리는 사용자 인터페이스를 만드는 툴 을 제공한다. 이를 통해 개발자는 시각적으로 화면을 구성하며, 각종 컴포넌트를 드래그 앤 드롭으로 화면 상에 배치할 수 있으며, 이들의 설정을 조절함으로써 표시되는 모습과 작동방식을 정할 수 있다. 원래 인터페이스 빌더는 맥 OS X 애플리케이션을 위해 개발 되었으나 ios 앱 사용자 인터페이스 개발을 위해 갱신되었다. 이미 설명했듯이 Xcode는 프로젝트를 위해 여러 가지 파일을 생성한다. 이 중 하나 가.xib 확장자를 가지는 파일이다. 이는 인터페이스 빌더가 저장하는 파일이다(이 파 일은 NIB 파일이라 불리운다. XIB 파일로 부르지 않는다). HelloWorld 프로젝트에서는 HelloWorldViewController.xib라는 이름을 갖는다. 이 파일을 왼쪽 편에서 선택함으 로써 인터페이스 빌더로 로드하자. 인터페이스 빌더는 이 파일을 로드하여 그림 4-5와 같은 화면을 표시할 것이다. 그림 4-5
20 CHAPTER 4 간단한 아이폰 ios 6 앱 만들기 화면의 가운데 부분에 애플리케이션의 사용자 인터페이스가 표시된다. 이 시점에서 는 UIView 객체만 포함하고 있다. Xcode에서 Single View Application을 선택하 여 프로젝트를 생성하였기에 UIView 객체가 사용자 인터페이스에 포함된 것이다. 나 중에 여러 가지 사용자 인터페이스 객체를 UIView 객체 위로 드래그 앤 드롭함으로써 HelloWorld의 사용자 인터페이스를 만들어 갈 것이다. 기본적으로 사용자 인터페이스 를 구성하는 방법은 여러 가지 컴포넌트를 캔버스(canvas)에 드래그 앤 드롭하여 위치시 키고 해당하는 프로퍼티를 설정하는 것이다. 객체 및 프로퍼티 설정을 보기 위해서는 오 른쪽 화면을 표시해야 한다. Xcode 툴바의 View 영역의 오른편 버튼을 선택하자. 그림 4-6 그림 4-7 오른편 화면이 표시되면 그림 4-7과 같은 화면이 보일 것이다.
4.3 컴포넌트 프로퍼티 변경하기 21 화면의 윗부분은 버튼들의 행으로 되어 있다. 이들 버튼을 선택하면 화면 절반의 윗 부분에 표시되는 설정 값들이 변경된다. 기본적으로 File Inspector가 표시된다. 이 외에Quick Help, Identity Inspector, Attributes Inspector, Size Inspector와 Connections Inspector 옵션이 있다. 여기서 잠깐 각 옵션들이 제공하는 설정이 어떠 한 것인지 살펴보도록 하자. 이 책을 진행하면서 이 옵션들을 자주 사용하게 될 것이다. 화면의 아랫부분은 기본설정으로 파일 템플릿 라이브러리를 표시한다. 이 부분의 윗부분 에는 또 다른 툴바가 위치하고 있다. 이 툴바 옵션은 자주 사용하는 타이핑 노력을 덜기 위해 자주 사용하는 소스 코드 조각을 지정할 수 있으며, 오브젝트 라이브러리와 미디어 라이브러리를 제공한다. 이 예제에서는 오브젝트 라이브러리가 필요하므로 3차원 형태의 정육면체 버튼을 선택한다. 이를 선택하면 사용자 인터페이스를 만드는 데 사용되는 UI 컴포넌트들이 표시된다. 만약 표시되는 영역이 좁을 경우, 이 툴바 위쪽의 가로선을 드래 그하면 UI 컴포넌트가 표시되는 영역을 확장할 수 있다. 이 객체들은 여러 가지의 범주 로 구성되어 있으며, 이 범주는 툴바 아래쪽의 메뉴를 통해 선택할 수 있다. 또한 배치 버 튼을 선택함으로써 컴포넌트에 대한 설명을 보이게 할 수도 있고 설명 없이 많은 컴포넌 트를 화면에 표시하게 할 수도 있다. 4.3 컴포넌트 프로퍼티 변경하기 화면에서 View가 선택되면 프로퍼티 화면에서 View에 대한 프로퍼티를 변경할 수 있 다. View의 배경색을 바꿔보기로 하자. View가 선택되었고 오른쪽 화면에 Attribute Inspector가 표시되었는지 확인하자(View Utilities Show Attribute Inspector). 백 그라운드 레이블 옆의 회색 사각형을 클릭하여 Colors 대화상자를 연다. 색 선택 툴을 사용하여 좋아하는 색을 선택하고 대화상자를 닫는다. 이제 뷰 윈도우가 회색에서 선택 한 색으로 변경되었다.
22 CHAPTER 4 간단한 아이폰 ios 6 앱 만들기 4.4 사용자 인터페이스에 객체 추가하기 이제 Label 객체를 뷰에 추가할 것이다. 라이브러리 화면 메뉴에서 Cocoa Touch Controls를 선택하고, Label 객체를 클릭한 후 뷰의 가운데로 드래그한다. 원하는 위치 에 자리잡으면 마우스 버튼에서 손을 떼어 해당 위치에 객체를 위치시킨다. 그림 4-8 레이블 주변의 청색 선을 이용해 레이블의 왼편을 늘린 후 오른편을 뷰의 경계선까지 늘 리면 수직방향의 청색 점선이 나타나는데, 이는 권장위치를 알려주는 것이다. 레이블을 선택한 후 Attribute Inspector의 Layout 프로퍼티에서 중앙 정렬(centered alignment) 을 클릭하여(View Utilities Show Attribute Inspector) 문자열이 화면의 중앙에 표시되도록 한다. 그리고 font 프로퍼티에서 좀 더 큰 폰트로 바꾼다(가령, 크기 24의 Georgia bold).
4.5 Xcode 4로 ios 앱 빌드하고 실행하기 23 마지막으로, 현재 Label 로 되어 있는 레이블의 문자열 부분을 더블클릭하여 Hello World 라고 입력한다. 여기까지 이상 없이 진행하였다면 그림 4-9와 같은 화면이 표시 될 것이다(물론 색깔과 폰트는 여러분의 선택에 따라 다를 수 있다). 그림 4-9 지금까지 만든 간단한 사용자 인터페이스를 저장할 필요가 있다. 저장을 하기 위해 File Save 또는 Command+S 단축키를 사용한다. 4.5 Xcode 4로 ios 앱 빌드하고 실행하기 앱이 실행되기 전에 반드시 컴파일을 해야 한다. 성공적으로 컴파일이 되면 시뮬레이터 나 실제 아이폰, 아이패드, 아이팟 터치 기기에서 실행해볼 수 있다. 실제 기기에서 앱을 테스트하기 위해서는 개발자 인증서 및 프로비저닝 프로파일 등의 작업이 더 필요하며,
24 CHAPTER 4 간단한 아이폰 ios 6 앱 만들기 이는 6장 아이폰에서 ios 6 앱 테스트하기 - 개발자 인증서 및 프로비저닝 프로파일 에 서 자세히 알아보겠다. 이번 장에서는 시뮬레이터에서 실행해보자. Xcode 4의 왼쪽 상단 부분의 iphone Simulator 옵션(Stop 버튼 오른편)을 선택하고, Run 버튼을 클릭하여 프로그램 코드를 컴파일하고 시뮬레이터에서 실행시킨다. 아이튠 즈 형태의 작은 윈도우에서 빌드 과정이 표시된다. 빌드를 실패하게 하는 에러가 발생하 면 이에 대한 정보도 표시될 것이다. 빌드가 끝나면 시뮬레이터가 시작되고 HelloWorld 앱이 실행될 것이다. 그림 4-10
4.7 서로 다른 화면 크기 테스트하기 25 4.6 빌드 에러 처리하기 이번 장에서 한 것은 실제로는 어떤 코드를 작성하거나 수정하지 않았기에 에러가 생기 지는 않았을 것이다. 만약 실수로 어떠한 과정을 잘못 하였다면 빌드가 실패할 것이고, Xcode 환경에서 빌드 에러에 대한 여러 가지 정보를 살펴볼 수 있다. 빌드가 실패한다면 Xcode 4 툴바의 상태 윈도우에 Build 와 함께 에러 및 경고 숫자가 표시된다. 또한 왼편 화면에는 에러 목록이 표시된다. 이 목록에서 에러를 선택하면 수정 이 필요한 코드로 화면이 이동할 것이다. 4.7 서로 다른 화면 크기 테스트하기 아이폰 5의 출시로 애플리케이션들은 이제 세 가지 서로 다른 크기의 화면, 즉 초기 아이 폰 화면의 표준 해상도, 아이폰 4의 3.5인치 레티나 화면, 그리고 아이폰 5의 새로운 4인 치 레티나 화면에서 동작하게 되었다. 이러한 종류의 디스플레이에서 애플리케이션이 어떻게 보이는지 테스트하기 위해서는 ios 시뮬레이터에 애플리케이션을 실행하고, Hardware Device 메뉴 옵션을 이용 하여 각각의 디스플레이들로 전환하면 된다.
iphone ios 6 Development Essentials Chapter 5 ios 6 아키텍처와 SDK 프레임워크 아이폰은 산업 디자인과 하드웨어 엔지니어링 분야에서 어마어마한 성과를 냈다. 하 지만 애플은 개발자가 아이폰용 앱을 개발할 때 이 하드웨어를 직접 제어할 수 없도 록 통제하고 있다. 그 대신 여러 가지의 다른 계층의 소프트웨어를 통해 개발자의 애플리 케이션이 하드웨어와 연동할 수 있는 방법을 제공한다. 이러한 여러 계층들은 운영체제 라고 알려진 것을 이루며, 아이폰의 운영체계는 ios라 불린다. 아이폰 개발환경에 대한 이해를 돕기 위해 이 장에서는 ios 운영체제를 구성하는 여러 계층들과 개발자인 우리가 아이폰 애플리케이션을 개발할 수 있도록 하는 프레임워크에 대해 살펴볼 것이다. 5.1 iphone OS가 ios로 2010년 아이패드의 발표 이전에는 아이폰에서 실행되는 운영체제를 iphone OS라고 불 렀다. 아이패드의 운영체계는 아이폰의 운영체계와 같은 운영체제를 사용하였는데, 그렇 다고 아이패드의 운영체계를 ipad OS라고 부르는 것은 어색할 것이다. 그래서 애플은 운영체제의 이름에서 특정한 기기의 이름을 빼기로 결정하였다. 아이튠즈(iTunes), 아이 북스토어(iBookstore), 아이맥(iMac)과 같이 i 를 이름 앞에 붙이기로 한 그 결과, ios라 26
5.2 ios 6 아키텍처 개요 27 는 이름이 탄생하게 되었다. 그러나 ios는 이미 시스코(Cisco)의 라우터(router) 제품의 운영체제 이름이었다(애플이 기존 등록상표를 무시하리라는 예측이 많았었다). 그래서 인터넷 에서 ios를 검색해보면, 애플의 아이폰과 전혀 관련 없는 시스코의 ios에 대한 검색 결 과가 많은 것을 볼 수 있다. 5.2 ios 6 아키텍처 개요 앞에서 언급했듯이 ios는 여러 가지 다른 계층의 소프트웨어로 구성되어 있으며, 각각의 계층은 애플리케이션을 개발하는 데 사용되는 개발 프레임워크를 제공한다. 이를 이용하 여 아이폰 하드웨어에서 동작하는 애플리케이션을 개발할 수 있다. 운영체제의 계층은 그림 5-1과 같다. 그림 5-1 ios 소프트웨어 계층을 설명하는 어떤 그림에서는 코코아 터치(Cocoa Touch) 위에 애플 리케이션을 표시함으로써 추가적인 계층이 더 있는 것으로 표현하는 경우도 있다. 그러 나 이 책에서는 앱에서 접근할 수 있는 인터페이스가 코코아 터치라는 것을 강조하기 위 해 위와 같이 표현하였다. 실제로는 앱에서 어떠한 계층이라도 직접적인 호출이 가능하 긴 하다. 하지만 운영체제의 각 계층은 개발자가 개발하기 편하도록 추상화를 제공하므로 상위 계 층일수록 하드웨어에 대한 복잡한 것을 몰라도 개발이 가능하다. 그러므로 ios 개발자
28 CHAPTER 5 ios 6 아키텍처와 SDK 프레임워크 라면 가급적 하드웨어에 가까운 아래쪽 계층보다는 개발 편리성을 제공하는 상위 계층의 프레임워크를 사용하도록 노력해야 한다. 일반적으로 상위 계층의 프레임워크를 사용하 는 것이 보다 적은 노력과 적은 양의 코드로 개발할 수 있다. 적은 양의 코드는 프로그램 버그(bug)를 만들어낼 확률도 적어짐을 의미한다. ios 6 운영체계를 이루는 여러 가지 계층에 대해 알아보았으니 이제 각 계층이 제공하는 서비스에 대해 자세히 알아보기로 하자. 또한 개발자의 입장에서 각 서비스를 이용하기 위해서 어떤 프레임워크를 사용해야 하는지에 대해서도 알아보자. 5.3 코코아 터치 계층 코코아 터치 계층은 ios 계층의 가장 윗부분이며, 아이폰 애플리케이션 개발에 사용되는 대부분의 프레임워크를 포함하고 있다. 코코아 터치는 주로 오브젝티브-C로 개발되었 으며, 애플의 데스크톱 및 랩톱 컴퓨터인 맥(Mac)의 OS X Cocoa API를 기반으로 하여 아이폰 하드웨어에 적합하도록 최적화 및 확장되었다. 코코아 터치 계층은 아이폰 앱 개발을 위해 다음의 프레임워크를 제공하고 있다. 5.3.1 UIKit 프레임워크(UIKit.framework) UIKit 프레임워크(UIKit.framework)는 풍부한 기능의 방대한 오브젝티브-C 기반의 프로 그래밍 인터페이스다. ios 애플리케이션 개발 시 주로 사용하는 프레임워크다. UIKit 프레 임워크만 설명해도 책 한 권의 분량이 필요하지만, 주요 기능을 살펴보면 다음과 같다. 사용자 인터페이스(User Interface) 생성 및 관리(텍스트 필드, 버튼, 라벨, 색, 폰트 등) 애플리케이션 생명주기(lifecycle) 관리 애플리케이션 이벤트 관리(터치 스크린 사용자 상호작용 등) 멀티태스킹 무선 프린팅 암호화를 통한 데이터 보호 잘라내기, 복사, 붙이기 기능
5.3 코코아 터치 계층 29 웹 및 텍스트 자료 표현 및 관리 데이터 관리 애플리케이션 간 통합(integration) 푸시 노티피케이션 서비스를 통한 푸시 노티피케이션 로컬 노티피케이션(애플리케이션이 백그라운드 실행 시 사용자에게 알림 주기) 접근성(accessibility) 가속도계, 배터리, 근접도 센서, 카메라 및 포토 라이브러리 관리 터치 스크린 제스처(gesture) 인식 파일 공유(아이튠즈를 통한 파일 저장) 블루투스를 통한 피어 투 피어(peer to peer) 연결 외부 디스플레이 연결 보다 자세한 내용은 다음 링크의 애플의 UIKit 참고 자료를 추천한다. URL http://developer.apple.com/library/ios/#documentation/uikit/reference/uikit_ Framework/index.html 5.3.2 Map Kit 프레임워크(MapKit.framework) 아이폰을 사용해보았다면 목적지까지 가는 길을 알려주는 프로그램이나 특정 위치를 보 여주는 지도 관련 애플리케이션을 사용해보았을 것이다. Map Kit 프레임워크(MapKit. framework)는 여러분의 애플리케이션에 지도 관련 기능을 추가할 수 있도록 해주는 프 레임워크다. 특정 위치에 대한 스크롤이 가능한 지도를 보여주는 일, 현재 위치에 대한 지도를 보여주는 일 및 지도에 다양한 형태의 주석을 추가하는 것이 가능하다. 5.3.3 푸시 노티피케이션 서비스 푸시 노티피케이션 서비스(Push Notification Service)는 애플리케이션이 실행 중이 아니 더라도 사용자에게 알림을 전달할 수 있다. 주로 뉴스 관련 서비스들이 이 서비스를 많이 사용한다. 일반적으로 긴급 뉴스의 경우, 뉴스 제목을 푸시 노티피케이션으로 전달하고
30 CHAPTER 5 ios 6 아키텍처와 SDK 프레임워크 사용자가 선택하면 뉴스 앱을 실행시켜 전체 뉴스를 표시하는 형태로 구성된다. 보통 알 림은 소리와 진동을 통해 사용자가 알림이 도착했음을 느낄 수 있게 한다. 너무 자주 사 용하여 사용자들이 짜증내는 일이 없도록 주의하여야 한다. 5.3.4 메시지 UI 프레임워크(MessageUI.framework) 메시지 UI 프레임워크(MessageUI.framework)는 여러분이 작성한 애플리케이션에서 사용자가 이메일을 작성하고 전송하는 기능을 제공한다. 프레임워크는 사용자가 이메 일 주소와 메시지 내용도 직접 입력할 수 있게 지원하며, 경우에 따라 여러분의 애플리 케이션에서 미리 설정한 정보가 화면에 표시되어 사용자가 전송 전에 수정하거나 확인 할 수 있다. 5.3.5 주소록 UI 프레임워크(AddressUI.framework) 통신과 개인 정보 관리가 아이폰의 주요한 기능이라는 측면에서 주소록을 관리하는 프레 임워크가 있다는 것은 당연할 수 있다. 이 주소록 UI 프레임워크(AddressUI.framework) 를 이용하여 여러분이 만든 애플리케이션에서 아이폰 주소록의 연락처 정보에 접근하고, 표시하며, 수정할 수 있다. 5.3.6 게임 Kit 프레임워크(GameKit.framework) 게임 Kit 프레임워크(GameKit.framework)를 통해 피어 투 피어(peer to peer) 접속과 음 성통화 기능을 제공한다. 이 프레임워크를 발표할 당시 애플은 이러한 기능을 주로 다자 간의 게임 프로그램에서 사용할 것이라 예상하고 프레임워크의 이름을 게임 Kit으로 했 다. 물론 게임뿐 아니라 다양한 애플리케이션에서 이 기능을 사용할 수 있다. 5.3.7 iad 프레임워크(iAd.framework) iad 프레임워크(iAd.framework)는 개발자가 애플리케이션에 배너(banner) 광고를 삽입 할 수 있게 도와준다. 모든 광고는 애플의 광고 서비스를 통해 제공된다.
5.4 ios 미디어 계층 31 5.3.8 이벤트 Kit UI 프레임워크(EventKit.framework) 이벤트 Kit UI 프레임워크(EventKit.framework)는 ios 4에서 처음 소개되었으며, 애플 리케이션에서 캘린더 정보와 미리 알림(Reminder) 이벤트에 접근하여 수정하는 것을 가 능하게 한다. 5.3.9 어카운트 프레임워크(Accounts.framework) ios 5는 시스템 계정이란 개념을 도입했다. 기본적으로는 다양한 서비스들에 사용되는 계정 정보를 ios 기기에 저장하고 이를 애플리케이션에서 접근할 수 있게 해준다. 현재 는 트위터 계정만 지원하지만, 향후 페이스북과 같은 서비스에 대한 계정 정보도 지원할 것으로 예상된다. 어카운트 프레임워크(Accounts.framework)는 애플리케이션에서 API 를 통해 이러한 시스템 계정 정보에 접근하고 관리하는 것을 목적으로 한다. 5.3.10 소셜 프레임워크(Social.framework) 소셜 프레임워크(Social.framework)는 트위터와 페이스북, 그리고 시나 위보(Sina Weibo)를 애플리케이션에 통합할 수 있게 해준다. 이 프레임워크는 사용자의 소셜 네트 워크 계정 정보에 대한 접근 권한을 얻기 위하여 어카운트 프레임워크와 함께 수행된다. 5.4 ios 미디어 계층 미디어 계층은 오디오, 비디오, 애니메이션 및 그래픽 관련 기능을 제공한다. 미디어 계 층도 애플리케이션 개발을 위해 여러 가지 프레임워크를 제공한다. 미디어 계층 관련 프 레임워크에 대해 알아보자. 5.4.1 코어 비디오 프레임워크(CoreVideo.framework) 코어 비디오 프레임워크(CoreVideo.framework)는 코어 미디어 프레임워크를 위한 버퍼 링(buffering) 기능을 제공한다. 이 프레임워크는 개발자가 사용할 수는 있지만, 일반적 으로 개발 시 직접 사용할 필요는 없다.
32 CHAPTER 5 ios 6 아키텍처와 SDK 프레임워크 5.4.2 코어 텍스트 프레임워크(CoreText.framework) 코어 텍스트 프레임워크(CoreText.framework)는 C 기반의 API 로서 고급 텍스트 레이 아웃(layout) 및 폰트 출력 기능을 제공한다. 5.4.3 이미지 I/O 프레임워크(ImageIO.framework) ios 4에서 처음 소개된 기능 중 하나인 이미지 I/O 프레임워크(ImageIO.framework)는 이미지 데이터나 메타데이터를 가져오기 및 내보내기 기능을 제공한다. PNG, JPEG, TIFF 및 GIF 등 다양한 형태의 이미지 형식을 지원한다. 5.4.4 Assets 라이브러리 프레임워크(AssetsLibrary.framework) Assets 라이브러리 프레임워크(AssetsLibrary.framework)는 아이폰 기기에 저장되어 있는 영상 및 사진 파일을 제어하는 기능을 제공한다. 이미 존재하는 파일을 제어할 수 있으며, 새로 저장하는 영상 및 사진 파일을 기본 사진 앨범(photo album)에 저장할 수도 있다. 5.4.5 코어 그래픽스 프레임워크(CoreGraphics.framework) 코어 그래픽스 프레임워크(CoreGraphics.framework)는 쿼츠(Quartz) 2D API라고도 불 리며, 경량화된 2차원 렌더링(rendering) 엔진이다. 주요 기능은 PDF 문서 생성 및 표시, 벡터(vector) 기반의 드로잉(drawing), 투명 계층, 경로(path) 기반의 드로잉, anti-aliased 렌더링, 색 조작(manipulation) 및 관리, 이미지 렌더링 및 그라디언트(gradient) 등이다. 맥 OS X의 쿼츠 2D API와 동일하다. 5.4.6 코어 이미지 프레임워크(CoreImage.framework) 코어 이미지 프레임워크(CoreImage.framework)는 ios 5에 새롭게 추가된 프레임워크 로 비디오 및 이미지 필터링(filtering) 및 조작 기능을 제공한다. 5.4.7 쿼츠 코어 프레임워크(QuartzCore.framework) 쿼츠 코어 프레임워크(QuartzCore.framework)는 아이폰의 애니메이션 기능을 제공하는 프레임워크다. UIKit 프레임워크에서 사용하는 시각 효과 및 애니메이션의 기본을 제공
5.4 ios 미디어 계층 33 하며, 오브젝티브-C 기반의 프로그래밍 인터페이스를 제공함으로써 애니메이션 프로그 램의 개발을 가능하게 해준다. 5.4.8 OpenGL ES 프레임워크(OpenGLES.framework) 지난 수년간 고성능 2D와 3D 그래픽 드로잉의 산업계 표준은 OpenGL이었다. 1990년 대에 지금은 없어진 SGI(Silicon Graphics, Inc)가 만든 GL을 이후 애플, 인텔, 모토롤라, ARM 등의 회사들이 만든 비영리단체에서 오픈 소스 형태(OpenGL)로 발전시켰고, 이를 ios에 사용할 수 있도록 한 것이 OpenGL ES 프레임워크(OpenGLES.framework)다. 임베디드 시스템(Embedded System)용 OpenGL은 아이폰과 같이 작은 기기를 위해 OpenGL 규약을 간소화한 버전이다. ios 3 이후 버전은 아이폰 3GS와 아이폰 4에서 OpenGL ES 1.1 및 2.0을 지원한다. 반면 오래된 ios 및 아이폰은 OpenGL ES 1.1만을 지원한다. 5.4.9 GLKit 프레임워크(GLKit.framework) GLKit 프레임워크(GLKit.framework)는 OpenGL ES 기반의 애플리케이션을 쉽게 만 들 수 있도록 오브젝티브-C 기반의 API를 제공한다. 5.4.10 NewsstandKit 프레임워크(NewsstandKit.framework) 뉴스스탠드(newsstand) 애플리케이션은 ios 5의 새로운 기능이며, 신문, 잡지 등을 통 합 관리할 목적으로 만들어졌다. 뉴스스탠드 프레임워크(NewsstandKit.framework)는 이 새로운 서비스를 위한 애플리케이션 개발을 가능하게 해준다. 5.4.11 ios 오디오 지원 ios는 다음의 프레임워크를 통해 AAC, Apple Lossless (ALAC), A-law, IMA/ ADPCM, Linear PCM, µ-law, DVI/Intel IMA ADPCM, Microsoft GSM 6.10 과 AES3-2003의 포맷의 오디오를 지원한다.
34 CHAPTER 5 ios 6 아키텍처와 SDK 프레임워크 5.4.12 AV 파운데이션 프레임워크(AVFoundation.framework) AV 파운데이션 프레임워크(AVFoundation.framework)는 오디오 콘텐트의 재생, 녹음 및 관리 기능을 제공하는 오브젝티브-C 기반의 프레임워크다. 5.4.13 코어 오디오 프레임워크(CoreAudio.framework, AudioToolbox. framework, AudioUnit.framework) 코어 오디오 프레임워크(CoreAudio.framework, AudioToolbox.framework 그리고 AudioUnit.framework)는 오디오 파일의 재생, 녹음 및 스트림, 내장 오디오 처리장치 제어 등의 기능을 제공한다. 5.4.14 오픈 오디오 라이브러리(OpenAL) 오픈 오디오 라이브러리(OpenAL)는 다양한 플랫폼에서 사용할 수 있는 고음질, 3D 오 디오 효과(위치 음향 포함)를 제공하는 프레임워크다. 위치 음향(positional audio)은 대표 적으로 게임에서 음향 효과를 낼 때 사용되며, 이 외 다양한 애플리케이션에서 응용할 수 있다. 5.4.15 미디어 플레이어 프레임워크(MediaPlayer.framework) 미디어 플레이어 프레임워크(MediaPlayer.framework)는 다양한 형태의 mov, mp4, m4v, 3gp 포맷의 비디오 파일을 재생하는 기능을 제공한다. 5.4.16 코어 Midi 프레임워크(CoreMIDI.framework) ios 4에서 소개된 Core MIDI 프레임워크(CoreMIDI.framework)는 아이폰의 독 커넥 터를 통해 연결된 신서사이저(synthesizer) 및 키보드 등 MIDI 호환 장비들을 제어할 수 있는 기능을 제공한다.
5.5 ios 코어 서비스 계층 35 5.5 ios 코어 서비스 계층 ios 코어 서비스 계층은 앞부분에 설명한 계층의 기반을 제공하며, 다음과 같은 프레임 워크로 구성된다. 5.5.1 주소록 프레임워크(AddressBook.framework) 주소록 프레임워크(AddressBook.framework)는 프로그램을 통해 아이폰 주소록의 연락 처 정보를 가져오고 수정하는 기능을 제공한다. 5.5.2 CFNetwork 프레임워크(CFNetwork.framework) CFNetwork 프레임워크(CFNetwork.framework)는 C 기반의 인터페이스로 TCP/IP 네 트워킹 프로토콜과 BSD 소켓에 대한 로우 레벨(low level) 접근을 제공한다. HTTP, FTP 및 DNS(Domain Name Servers)와의 통신을 가능하게 하며, SSL(Secure Sockets Layer), TLS(Transport Layer Security)를 통해 암호화되고 안전한 통신을 가능하게 한다. 5.5.3 코어 데이터 프레임워크(CoreData.framework) 코어 데이터 프레임워크(CoreData.framework)는 모델-뷰-컨트롤러(Model-View- Controller, MVC) 기반의 애플리케이션에서 데이터 모델링과 저장소 생성을 쉽게 만 들어준다. 코어 데이터 프레임워크를 사용하면 애플리케이션 개발에서 구조화된(structured) 데이터 관련 작업을 대폭 줄일 수 있다. 5.5.4 코어 파운데이션 프레임워크(CoreFoundation.framework) 코어 파운데이션 프레임워크(CoreFoundation.framework)는 C 기반의 프레임워크로서 데이터 타입, 문자열 조작, 원시 블록 데이터 관리(raw block data management), URL 조작, 쓰레드 및 실행 루프(loop), 날짜와 시간, 기본 XML 조작, 포트와 소켓 통신 등 기 본적인 기능 등을 제공한다. 이 프레임워크에서 제공하는 기본 XML 이외의 고급 기능은 libxml2 라이브러리에서 제공한다. 이 프레임워크는 C 기반의 인터페이스지만, 대부분 의 기능은 파운데이션 프레임워크에서 제공하는 오브젝티브-C 래퍼(wrappers)를 통해 사용할 수 있다.