iOS9_내지(최종)_4도_160412.indd



Similar documents
iOS ÇÁ·Î±×·¡¹Ö 1205.PDF

iphone ios 6 DEVELOPMENT ESSENTIALS Copyright c 2012 Neil Smyth. All rights reserved. Korean Translation Copyright c 2013 by J-Pub. co. The Korean edi

View Licenses and Services (customer)

ios 7 App Development Essentials Korean Translation Copyright c 2014 by J-Pub. co. The Korean edition is published by arrangement with Neil Smyth thro

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

iOS5_1±³

Windows 8에서 BioStar 1 설치하기

wtu05_ÃÖÁ¾

SIGIL 완벽입문

iphone ios 6 DEVELOPMENT ESSENTIALS Copyright c 2012 Neil Smyth. All rights reserved. Korean Translation Copyright c 2013 by J-Pub. co. The Korean edi

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Microsoft PowerPoint - chap01-C언어개요.pptx

13Åë°è¹é¼Ł

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기


1

SBR-100S User Manual

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

사용하기 전에 2

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와 디바이스에 관계 없이 언제, 어디서나 문서를 확인하고 편집

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

1

PowerPoint Presentation

게임 기획서 표준양식 연구보고서

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

학위논문홍승아.hwp

ios 8 App Development Essentials Korean Translation Copyright 2015 by J-Pub. co. The Korean edition is published by arrangement with Neil Smyth throug

Microsoft Word - src.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

IRISCard Anywhere 5

Microsoft Word - 문필주.doc


MF Driver Installation Guide

H3250_Wi-Fi_E.book

코코아36-37_3차( )

<BEC6BFF4BCD2BDCCBAB8B0EDBCAD28C3D6C1BE E687770>

[Brochure] KOR_TunA

서현수

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

유니 앞부속


ThinkVantage Fingerprint Software

untitled

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Office 365 사용자 가이드

09 강제근로의 금지 폭행의 금지 공민권 행사의 보장 중간착취의 금지 41 - 대판 , 2006도7660 [근로기준법위반] (쌍용자동차 취업알선 사례) 11 균등대우의 원칙 43 - 대판 , 2002도3883 [남녀고용평등법위

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

°æÁ¦Àü¸Á-µ¼º¸.PDF

<BFDCB1B9C0CE20C5F5C0DAB1E2BEF7C0C720B3EBBBE7B0FCB0E82E687770>

슬라이드 1

1,000 AP 20,000 ZoneDirector IT 5, WLAN. ZoneFlex AP ZoneDirector. WLAN. WLAN AP,,,,,,., Wi-Fi. AP. PSK PC. VLAN WLAN.. ZoneDirector 5000 WLAN L

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

미디어 및 엔터테인먼트 업계를 위한 Adobe Experience Manager Mobile

Microsoft PowerPoint - chap05-제어문.pptx

1809_2018-BESPINGLOBAL_Design Guidelines_out

4S 1차년도 평가 발표자료

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

디지털 공학

PDF


사물인터넷비즈니스빅뱅_내지_11차_ indd

매력적인 맥/iOS 개발 환경 그림 A-1 변경 사항 확인창 Validate Setting... 항목을 고르면 된다. 프로젝트 편집기를 선택했을 때 화면 아 래쪽에 있는 동일한 Validate Settings... 버튼을 클릭해도 된다. 이슈 내비게이터 목록에서 변경할

Microsoft Word - Korean_뷰어 메뉴얼_공용_ADVR&SWi_.doc

SH100_V1.4

<5BC6EDC1FD5DBEEEBEF7C0CCC1D6B3EBB5BFC0DAC0CEB1C7BBF3C8B2BDC7C5C2C1B6BBE7C3D6C1BEBAB8B0EDBCAD28BAB8C0CCBDBABEC6C0CC292E687770>

Microsoft PowerPoint - chap04-연산자.pptx

볼륨 조절 아이콘 표시하기 만일 알림 영역에 볼륨 조절 아이콘이 표시되지 않았다면 아래의 방법을 따라합니다. 1> [시작] - [제어판] - [사운드 및 오디오 장치] 아이콘을 더블 클릭합니다. 2) [사운드 및 오디오 장치 등록 정보] 대화상자에서 [볼륨] 탭을 클릭

win8_1±³

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

2

: AA ( ) TV : ios ( ).. 2

C++ Programming

mobile_guide_SA

스마트월드캠퍼스 교육교제

메뉴얼41페이지-2

Windows Live Hotmail Custom Domains Korea

슬라이드 1

슬라이드 1

회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제

B2B 매뉴얼

Web Scraper in 30 Minutes 강철

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

<3036C7E2BCF6C3D6C1BEBABB2E687770>

<5B33B9F8B0FAC1A65D20B9E6BCDBBDC9C0C7BDC3BDBAC5DB20B0B3BCB1B9E6BEC8BFACB1B82DC3D6C3D6C1BE2E687770>

*BA_00

<5BB1E2BABB5D5FB0F8B0F8BACEB9AE5FBDC3B0A3C1A6B1D9B9ABBFCD5FC0B0BEC6C8DEC1F7BFA15FB5FBB8A55FB4EBC3BCC0CEB7C25FC8B0BFEBB0FAC0C75FBFACB0E8B9E6BEC85F2D5FB9AEB9CCB0E62E687770>

캐빈의iOS프로그램팁01

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

처음에 읽어 주십시오! 본 사용설명서의 내용은 예고 없이 변경할 수 있습니다. 본 사용설명서의 내용은 제조 공정의 각 과정에서 확인했습니다. 문제점이나 잘못된 점 이 있으면 개의치 마시고 당사로 연락해 주십시오. 본 사용설명서의 내용을 복제하는 것은 일부 또는 전부에

CSG_keynote_KO copy.key

고객 카드

User Guide

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

3D MAX + WEEK 9 Hansung Univ. Interior Design

사용하기 전에 2

ez-shv manual

iOS 앱의 빌드, 패키징, 배포에 필요한 모든 것 iOS 빌드와 릴리스 - 빌드 자동화와 배포

Transcription:

ios 9 App Development Essentials by Neil Smyth Copyright 2015 Neil Smyth. All rights reserved. Korean Translation Copyright 2016 by J.Pub. co. The Korean edition was published by arrangement with Neil Smyth through Agency-One, Seoul. 이 책의 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 제이펍에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전제와 무단복제를 금합니다. 초판 1쇄 발행 2015년 4월 25일 지은이 닐 스미스 옮긴이 황반석 펴낸이 장성두 펴낸곳 제이펍 출판신고 2009년 11월 10일 제406 2009 000087호 주소 경기도 파주시 문발로 141 뮤즈빌딩 403호 전화 070 8201 9010 / 팩스 02 6280 0405 홈페이지 www.jpub.kr / 원고투고 jeipub@gmail.com 독자문의 readers.jpub@gmail.com / 교재문의 jeipubmarketer@gmail.com 편집부 이민숙, 이 슬, 이주원 / 소통 기획팀 현지환, 민지환 용지 에스에이치페이퍼 / 인쇄 해외정판사 / 제본 광우제책사 ISBN 979 11 85890 52 4 (93000) 값 36,000원 이 책은 저작권법에 따라 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금지하며, 이 책 내용의 전부 또는 일부를 이용하려면 반드시 저작권자와 제이펍의 서면동의를 받아야 합니다. 잘못된 책은 구입하신 서점에서 바꾸어 드립니다. 제이펍은 독자 여러분의 아이디어와 원고 투고를 기다리고 있습니다. 책으로 펴내고자 하는 아이디어나 원고가 있으신 분께서는 책의 간단한 개요와 차례, 구성과 저(역)자 약력 등을 메일로 보내주세요. jeipub@gmail.com

드리는 말씀 이 책에 기재된 내용을 기반으로 한 운용 결과에 대해 저자, 역자, 소프트웨어 개발자 및 제공자, 제이펍 출판사는 일체의 책임을 지지 않으므로 양해 바랍니다. 이 책에 등장하는 각 회사명, 제품명은 일반적으로 각 회사의 등록 상표 또는 상표입니다. 본문 중에는 TM, C, R 마크 등이 표시되어 있지 않습니다. 이 책에서 사용하고 있는 제품 버전은 독자의 학습 시점이나 환경에 따라 책의 내용과 다를 수 있습니다. 본문 중 원서 국가의 실정에만 국한되어 있는 내용이나 그림은 일부를 삭제하거나 국내 실정에 맞도록 변경하였으니 참고 바랍니다. 책 내용과 관련된 문의사항은 옮긴이나 출판사로 연락해 주시기 바랍니다. - 옮긴이 : http://cafe.naver.com/petersbook 또는 naya.peter@gmail.com - 출판사 : readers.jpub@gmail.com

차 례 옮긴이 머리말 xxxiii CHAPTER 1 시작하기 _ 1 1.1 ios 개발이 처음인 개발자를 위하여 1 1.2 ios 8 개발자를 위하여 2 1.3 예제 소스 코드 3 1.4 watchos 앱 개발 방법 배우기 3 1.5 오탈자 3 CHAPTER 2 애플 개발자 프로그램 가입하기 _ 5 2.1 Xcode 7과 ios 9 SDK 다운로드하기 5 2.2 애플 개발자 프로그램 5 2.3 언제 애플 개발자 프로그램에 가입할까? 6 2.4 애플 개발자 프로그램에 가입하기 6 2.5 요약 8 CHAPTER 3 Xcode 7과 ios 9 SDK설치하기 _9 3.1 여러분의 맥이 인텔 기반인지 PowerPC 기반인지 확인하기 9 3.2 Xcode 7과 ios 9 SDK 설치하기 10 3.3 Xcode 시작하기 10 3.4 Xcode 설정에 애플 아이디 추가하기 11 3.5 개발자와 배포 서명 인증서 12 CHAPTER 4 Xcode 7가이드투어 _13 4.1 Xcode 7 시작하기 13 4.2 ios 앱 사용자 인터페이스 만들기 18 4.3 컴포넌트 속성 변경하기 21 4.4 사용자 인터페이스에 객체 추가하기 21 4.5 Xcode 7에서 ios 9 앱 빌드하고 실행하기 24 4.6 실제 ios 디바이스에서 앱 실행하기 25 4.7 디바이스와 시뮬레이터 관리하기 26 4.8 빌드 에러 처리하기 27 차 례 v

4.9 애플리케이션 성능 모니터링하기 28 4.10 사용자 인터페이스 레이아웃 계층 구조의 분해도 29 4.11 요약 30 CHAPTER 5 Xcode 7플레이그라운드소개 _ 31 5.1 플레이그라운드란? 31 5.2 새로운 플레이그라운드 생성하기 31 5.3 스위프트 플레이그라운드 예제의 기초 33 5.4 결과 보기 34 5.5 타임라인 슬라이더 활성화하기 36 5.6 리치 텍스트 주석 추가하기 37 5.7 플레이그라운드 페이지로 작업하기 38 5.8 플레이그라운드에서 UIKit으로 작업하기 39 5.9 플레이그라운드에 리소스 추가하기 40 5.10 향상된 라이브 뷰로 작업하기 41 5.11 언제 스위프트 플레이그라운드를 사용하나? 44 5.12 요약 44 CHAPTER 6 스위프트 데이터 타입과 상수, 그리고 변수 _ 45 6.1 스위프트 플레이그라운드 이용하기 46 6.2 스위프트 데이터 타입 46 6.3 스위프트 변수 51 6.4 스위프트 상수 51 6.5 상수와 변수 선언하기 51 6.6 타입 어노테이션과 타입 추론 52 6.7 스위프트 튜플 53 6.8 스위프트 옵셔널 타입 54 6.9 형 변환과 타입 검사 58 6.10 요약 61 CHAPTER 7 스위프트 연산자와 표현식 _ 62 7.1 스위프트의 표현식 구문 62 7.2 기본 할당 연산자 63 7.3 스위프트 산술 연산자 63 7.4 복합 할당 연산자 64 7.5 증가 연산자와 감소 연산자 65 7.6 비교 연산자 65 7.7 불리언 논리 연산자 66 7.8 범위 연산자 67 7.9 삼항 연산자 68 7.10 비트 연산자 68 7.11 복합 비트 연산자 72 7.12 요약 73 vi 차 례

CHAPTER 8 스위프트 흐름 제어 _ 74 8.1 반복문 흐름 제어 74 8.2 스위프트 for 반복문 74 8.3 repeat while 반복문 78 8.4 반복문에서 빠져나오기 78 8.5 continue문 79 8.6 조건부 흐름 제어 80 8.7 if문 사용하기 80 8.8 if else 문 사용하기 81 8.9 if else if 문 사용하기 81 8.10 guard문 82 8.11 요약 83 CHAPTER 9 스위프트 switch문 _ 84 9.1 왜 switch문을 사용해야 하나? 84 9.2 switch문 사용하기 84 9.3 스위프트 switch문 예제 85 9.4 case문 결합하기 86 9.5 switch문에서 범위 매칭 87 9.6 where문 사용하기 87 9.7 Fallthrough 88 9.8 요약 89 CHAPTER 10 스위프트 2함수와메서드그리고클로저의개요 _90 10.1 함수란 무엇인가? 90 10.2 메서드란 무엇인가? 91 10.3 스위프트 함수를 선언하는 방법 91 10.4 스위프트 함수 호출하기 92 10.5 내부 매개변수 이름과 외부 매개변수 이름 92 10.6 디폴트 함수 매개변수 선언하기 94 10.7 함수로부터 여러 개의 결과 반환하기 95 10.8 함수 매개변수의 변수 개수 96 10.9 변수인 매개변수 96 10.10 입출력 매개변수로 입력하기 96 10.11 매개변수인 함수 98 10.12 클로저 표현식 100 10.13 스위프트의 클로저 102 10.14 요약 103 CHAPTER 11 스위프트의 객체 지향 프로그래밍 기초 _ 104 11.1 객체란 무엇인가? 104 11.2 클래스란 무엇인가? 105 차 례 vii

11.3 스위프트 클래스 선언하기 105 11.4 클래스에 인스턴스 속성 추가하기 106 11.5 메서드 정의하기 106 11.6 클래스 인스턴스 선언하기와 초기화하기 107 11.7 클래스 인스턴스 초기화하기와 해제하기 108 11.8 메서드 호출하기와 속성 접근하기 109 11.9 저장된 속성과 계산된 속성 110 11.10 스위프트에서 self 사용하기 112 11.11 요약 113 CHAPTER 12 스위프트의 서브클래싱과 익스텐션의 개요 _ 114 12.1 상속, 클래스, 그리고 하위 클래스 114 12.2 스위프트 상속 예제 115 12.3 하위 클래스의 기능 확장하기 116 12.4 상속받은 메서드 오버라이딩하기 117 12.5 하위 클래스 초기화하기 118 12.6 SavingsAccount 클래스 사용하기 119 12.7 스위프트 클래스 익스텐션 119 12.8 요약 120 CHAPTER 13 스위프트의 배열과 딕셔너리 컬렉션으로 작업하기 _ 121 13.1 가변형 컬렉션과 불변형 컬렉션 121 13.2 스위프트 배열 초기화 121 13.3 스위프트 배열로 작업하기 123 13.4 배열에 항목 추가하기 124 13.5 타입이 혼합된 배열 생성하기 125 13.6 스위프트 딕셔너리 컬렉션 127 13.7 스위프트 딕셔너리 초기화 127 13.8 요약 130 CHAPTER 14 스위프트의 에러 핸들링 이해하기 _ 131 14.1 에러 핸들링 이해하기 131 14.2 에러 타입 선언하기 132 14.3 에러 던지기 132 14.4 에러를 던지는 메서드와 함수 호출하기 134 14.5 에러 객체에 접근하기 135 14.6 에러 캐칭 비활성화하기 135 14.7 defer 구문 사용하기 135 14.8 요약 136 viii 차 례

CHAPTER 15 ios 9애플리케이션구조와개발아키텍처 _137 15.1 ios 9 운영체제 아키텍처의 개요 137 15.2 Model View Controller(MVC) 138 15.3 타깃-액션 패턴, IBOutlet, IBAction 139 15.4 서브클래싱 140 15.5 델리게이션 140 15.6 요약 141 CHAPTER 16 상호 작용하는 ios 9앱만들기 _142 16.1 새 프로젝트 만들기 142 16.2 사용자 인터페이스 만들기 142 16.3 예제 애플리케이션 빌드하기와 실행하기 145 16.4 액션과 아웃렛 추가하기 146 16.5 완성된 애플리케이션 빌드하기와 실행하기 151 16.6 키보드 숨기기 152 16.7 요약 153 CHAPTER 17 ios 9뷰,윈도우,그리고뷰계층이해하기 _154 17.1 뷰와 UIKit 클래스 계층에 대하여 154 17.2 UIWindow 클래스 154 17.3 뷰 계층 구조 155 17.4 인터페이스 빌더에서 상위 계층 보기 157 17.5 뷰 타입 157 17.6 요약 158 CHAPTER 18 ios 9자동레이아웃소개 _159 18.1 자동 레이아웃의 개요 160 18.2 정렬 161 18.3 고유한 콘텐츠 사이즈 161 18.4 콘텐츠 허깅 우선순위와 압축 제한 우선순위 162 18.5 컨스트레인트를 만드는 세 가지 방법 162 18.6 컨스트레인트에 대한 상세 내용 163 18.7 요약 164 CHAPTER 19 인터페이스 빌더에서 ios 9 자동 레이아웃 컨스트레인트로 작업하기 _ 165 19.1 자동 레이아웃의 간단한 예제 165 19.2 인터페이스 빌더에서 자동 레이아웃 켜고 끄기 166 19.3 인터페이스 빌더의 자동 레이아웃 기능들 172 19.4 인터페이스 빌더에서 새로운 컨스트레인트 생성하기 180 19.5 종횡비 컨스트레인트 추가하기 180 19.6 자동 레이아웃 문제 해결하기 181 19.7 요약 183 차 례 ix

CHAPTER 20 ios 9자동레이아웃예제 _184 20.1 프로젝트 준비하기 184 20.2 사용자 인터페이스 설계하기 184 20.3 자동 레이아웃 컨스트레인트 추가하기 186 20.4 컨스트레인트 우선순위 조절하기 188 20.5 애플리케이션 테스트하기 191 20.6 요약 191 CHAPTER 21 코드로 ios 9 자동 레이아웃 컨스트레인트 구현하기 _ 192 21.1 코드에서 컨스트레인트 생성하기 192 21.2 뷰에 컨스트레인트를 추가하기 194 21.3 자동 리사이징 끄기 195 21.4 예제 애플리케이션 196 21.5 뷰 생성하기 196 21.6 컨스트레인트 생성하기와 추가하기 196 21.7 컨스트레인트 제거하기 198 21.8 요약 199 CHAPTER 22 ios 9에서 교차 계층 구조 자동 레이아웃 컨스트레인트 구현하기 _ 200 22.1 예제 애플리케이션 200 22.2 아웃렛 구축하기 202 22.3 이전 컨스트레인트를 제거하는 코드 작성하기 203 22.4 교차 계층 구조 컨스트레인트 추가하기 204 22.5 애플리케이션 테스트하기 204 22.6 요약 204 CHAPTER 23 ios 9자동레이아웃시각적형식언어이해하기 _205 23.1 시각적 형식 언어 소개 205 23.2 시각적 형식 언어 예제 205 23.3 constraintswithvisualformat 메서드 이용하기 207 23.4 요약 209 CHAPTER 24 사이즈 클래스를 이용하여 유니버셜 ios사용자인터페이스설계하기 _210 24.1 사이즈 클래스 이해하기 210 24.2 인터페이스 빌더에서 사이즈 클래스 211 24.3 Any 디폴트 설정하기 212 24.4 인터페이스 빌더에서 사이즈 클래스로 작업하기 212 24.5 유니버셜 사용자 인터페이스 튜토리얼 214 24.6 아이패드 레이아웃 설계하기 215 24.7 유니버셜 이미지 에셋 추가하기 217 24.8 아이폰 레이아웃 설계하기 218 24.9 사이즈 클래스에 맞는 이미지 파일 추가하기 219 x 차 례

24.10 중복 컨스트레인트 제거하기 221 24.11 애플리케이션 테스트하기 222 24.12 요약 222 CHAPTER 25 Xcode 7에서 스토리보드 사용하기 _ 223 25.1 스토리보드 예제 프로젝트 생성하기 224 25.2 스토리보드 접근하기 224 25.3 스토리보드에 화면 추가하기 226 25.4 스토리보드 segue 구성하기 227 25.5 스토리보드 전환 구성하기 227 25.6 뷰 컨트롤러와 화면 연결하기 228 25.7 화면들 간에 데이터 전달하기 229 25.8 스토리보드 세그웨이 되돌리기 230 25.9 프로그램에서 스토리보드 세그웨이 호출하기 231 25.10 요약 232 CHAPTER 26 여러 스토리보드 파일로 화면 구성하기 _ 233 26.1 여러 스토리보드에 화면 구성하기 233 26.2 여러 스토리보드 간에 커넥션 구축하기 236 26.3 요약 237 CHAPTER 27 Xcode 7의 스토리보드를 이용한 ios 9탭바애플리케이션만들기 _238 27.1 탭 바의 개요 238 27.2 멀티뷰 애플리케이션의 뷰 컨트롤러 이해하기 239 27.3 탭 바 예제 애플리케이션 만들기 239 27.4 프로젝트 파일 살펴보기 240 27.5 콘텐츠 뷰에 대한 뷰 컨트롤러 추가하기 240 27.6 스토리보드에 탭 바 컨트롤러 추가하기 241 27.7 뷰 컨트롤러 사용자 인터페이스 설계하기 243 27.8 탭 바 아이템 구성하기 243 27.9 애플리케이션을 빌드하고 실행하기 245 27.10 요약 245 CHAPTER 28 Xcode 7의 스토리보드와 ios 9테이블뷰의개요 _246 28.1 테이블 뷰의 개요 247 28.2 정적 테이블 뷰 vs. 동적 테이블 뷰 247 28.3 테이블 뷰 델리게이트와 데이터소스 247 28.4 테이블 뷰 스타일 247 28.5 셀프-사이징 테이블 셀 249 28.6 동적 타입 249 28.7 테이블 뷰 셀 스타일 251 28.8 테이블 뷰 셀 재사용 251 28.9 요약 253 차 례 xi

CHAPTER 29 Xcode 7스토리보드를이용하여동적테이블뷰만들기 _254 29.1 예제 프로젝트 생성하기 254 29.2 스토리보드에 테이블 뷰 컨트롤러 추가하기 255 29.3 UITableViewController와 UITableViewCell 하위 클래스 생성하기 256 29.4 셀 재사용 식별자 선언하기 257 29.5 스토리보드 UITableView 프로토타입 셀 설계하기 258 29.6 AttractionTableViewCell 클래스 수정하기 259 29.7 테이블 뷰 데이터소스 생성하기 259 29.8 이미지 파일 다운로드하여 추가하기 262 29.9 애플리케이션 컴파일하고 실행하기 263 29.10 요약 264 CHAPTER 30 Xcode 7에서 스토리보드를 이용한 ios 9테이블뷰내비게이션구현하기 _265 30.1 내비게이션 컨트롤러 이해하기 265 30.2 스토리보드에 새로운 화면 추가하기 266 30.3 내비게이션 컨트롤러 추가하기 267 30.4 스토리보드 세그웨이 구축하기 267 30.5 AttractionDetailViewController 클래스 수정하기 268 30.6 prepareforsegue를 이용하여 스토리보드 화면 간에 데이터 전달하기 270 30.7 애플리케이션 테스트하기 271 30.8 요약 271 CHAPTER 31 ios 9스택뷰클래스로작업하기 _272 31.1 UIStackView 클래스 소개 272 31.2 하위 뷰와 배치된 하위 뷰 이해하기 274 31.3 스택 뷰 설정 옵션들 275 31.4 코드 내에서 스택 뷰 생성하기 281 31.5 기존의 스택 뷰에 하위 뷰 추가하기 281 31.6 하위 뷰 숨기기와 삭제하기 282 31.7 요약 283 CHAPTER 32 ios 9 스택뷰튜토리얼 _284 32.1 스택 뷰 예제 앱에 대하여 284 32.2 첫 번째 스택 뷰 생성하기 285 32.3 배너 스택 뷰 생성하기 287 32.4 스위치 스택 뷰 생성하기 288 32.5 상위 스택 뷰 생성하기 289 32.6 배너 스택 뷰 추가하기 290 32.7 상위 스택 뷰에 마지막 하위 뷰 추가하기 291 32.8 동적으로 하위 뷰 추가하기와 삭제하기 294 32.9 요약 295 xii 차 례

CHAPTER 33 ios 9스플릿뷰마스터-디테일예제 _296 33.1 스플릿 뷰와 팝오버의 개요 296 33.2 예제 스플릿 뷰 프로젝트에 대하여 297 33.3 프로젝트 생성하기 297 33.4 프로젝트 다시 살펴보기 298 33.5 마스터 뷰 항목 구성하기 299 33.6 디테일 뷰 컨트롤러 구성하기 301 33.7 마스터 뷰에 선택된 것과 디테일 뷰 연결하기 302 33.8 DetailViewController 클래스 수정하기 302 33.9 애플리케이션 테스트하기 303 33.10 요약 304 CHAPTER 34 ios 9에서의 멀티태스킹 가이드 _ 305 34.1 아이패드 멀티태스킹 이용하기 305 34.2 픽처 인 픽처 멀티태스킹 308 34.3 멀티태스킹을 지원하는 아이패드 디바이스 308 34.4 멀티태스킹과 사이즈 클래스 308 34.5 멀티태스킹과 마스터-디테일 스플릿 뷰 309 34.6 코드에서 멀티태스킹 처리하기 311 34.7 생명 주기 메서드 호출 313 34.8 멀티태스킹 지원 활성화하기 313 34.9 멀티태스킹 거부 314 34.10 요약 314 CHAPTER 35 ios 9멀티태스킹예제 _316 35.1 멀티태스킹 예제 프로젝트 생성하기 316 35.2 이미지 파일 추가하기 316 35.3 Regular 폭 사이즈 클래스 레이아웃 설계하기 317 35.4 Compact 폭 사이즈 클래스 레이아웃 설계하기 319 35.5 멀티태스킹 환경에서 프로젝트 테스트하기 321 35.6 요약 322 CHAPTER 36 UIPageViewController를 이용한 페이지 기반의 ios 9애플리케이션구현하기 _323 36.1 UIPageViewController 클래스 323 36.2 UIPageViewController 데이터소스 324 36.3 내비게이션 방향 324 36.4 스파인 위치 325 36.5 UIPageViewController 델리게이트 프로토콜 325 36.6 요약 326 차 례 xiii

CHAPTER 37 ios 9 UIPageViewController 예제 애플리케이션 _ 327 37.1 Xcode 페이지 기반 애플리케이션 템플릿 327 37.2 프로젝트 생성하기 328 37.3 콘텐츠 뷰 컨트롤러 추가하기 328 37.4 데이터 모델 생성하기 330 37.5 UIPageViewController 초기화하기 333 37.6 UIPageViewController 애플리케이션 실행하기 335 37.7 요약 336 CHAPTER 38 ios 9에서 스위프트로 디렉터리 다루기 _ 337 38.1 애플리케이션 Documents 디렉터리 338 38.2 NSFileManager, NSFileHandle과 NSData 클래스 338 38.3 스위프트의 경로명 이해하기 338 38.4 디폴트 NSFileManger 객체에 대한 참조체 얻기 339 38.5 현재 작업 디렉터리 확인하기 339 38.6 Documents 디렉터리 확인하기 339 38.7 임시 디렉터리 확인하기 341 38.8 디렉터리 변경하기 341 38.9 새로운 디렉터리 생성하기 342 38.10 디렉터리 삭제하기 342 38.11 디렉터리의 내용 나열하기 343 38.12 파일 또는 디렉터리 속성 얻기 343 CHAPTER 39 ios 9에서 스위프트로 파일 다루기 _ 345 39.1 NSFileManger 인스턴스 참조체 얻기 345 39.2 파일이 존재하는지 확인하기 346 39.3 두 개의 파일 내용 비교하기 346 39.4 파일의 읽기/쓰기/실행/삭제 기능 상태 확인하기 346 39.5 파일 옮기기와 이름 바꾸기 347 39.6 파일 복사하기 347 39.7 파일 삭제하기 348 39.8 심볼릭 링크 만들기 348 39.9 NSFileManager로 파일 읽고 쓰기 348 39.10 NSFileHandle 클래스로 파일 작업하기 349 39.11 NSFileHandle 객체 만들기 349 39.12 NSFileHandle 파일 오프셋과 검색하기 350 39.13 파일에서 데이터 읽기 350 39.14 파일에 데이터 쓰기 351 39.15 파일 자르기 352 39.16 요약 352 xiv 차 례

CHAPTER 40 스위프트에서의 ios 9디렉터리관리및파일입출력예제 _353 40.1 예제 애플리케이션 353 40.2 애플리케이션 프로젝트 만들기 353 40.3 사용자 인터페이스 설계하기 354 40.4 애플리케이션 시작 시 데이터 파일 체크하기 355 40.5 액션 메서드 구현하기 356 40.6 예제 애플리케이션 빌드하고 실행하기 356 CHAPTER 41 ios 9앱에서iCloud저장소사용준비하기 _358 41.1 아이클라우드 데이터 저장소 서비스 358 41.2 아이클라우드 저장소 사용할 애플리케이션 준비하기 359 41.3 ios 9 애플리케이션을 위해 아이클라우드 지원 활성화하기 359 41.4 아이클라우드 권한 파일 확인하기 360 41.5 여러 개의 아이클라우드 컨테이너 접근하기 361 41.6 아이클라우드 컨테이너 URL 362 41.7 요약 362 CHAPTER 42 ios 9 UIDocument클래스를이용하여파일관리하기 _363 42.1 UIDocument 클래스 개요 363 42.2 UIDocument 클래스의 하위 클래스 만들기 364 42.3 충돌 해결과 도큐먼트 상태 364 42.4 UIDocument 예제 애플리케이션 365 42.5 UIDocument 하위 클래스 생성하기 365 42.6 사용자 인터페이스 설계하기 365 42.7 애플리케이션 데이터 구조 구현하기 367 42.8 contentsfortype 메서드 구현하기 367 42.9 loadfromcontents 메서드 구현하기 368 42.10 앱 시작 시 도큐먼트 로드하기 368 42.11 문서에 내용 저장하기 371 42.12 애플리케이션 테스트하기 372 42.13 요약 372 CHAPTER 43 ios 9 애플리케이션에서 icloud저장소사용하기 _373 43.1 아이클라우드 사용 가이드라인 373 43.2 아이클라우드 접근을 위한 icloudstore 애플리케이션 준비하기 374 43.3 뷰 컨트롤러 구성하기 375 43.4 viewdidload 메서드 구현하기 375 43.5 metadataquerydidfinishgathering 메서드 구현하기 378 43.6 savedocument 메서드 구현하기 381 43.7 아이클라우드 도큐먼트와 데이터 저장소 활성화하기 381 43.8 아이클라우드 애플리케이션 실행하기 382 43.9 아이클라우드 기반의 문서 확인하기와 삭제하기 382 차 례 xv

43.10 로컬 파일을 어디서나 사용할 수 있게 만들기 383 43.11 요약 384 CHAPTER 44 icloud를 이용한 ios 9키-값데이터동기화하기 _385 44.1 아이클라우드 키-값 데이터 저장소 385 44.2 애플리케이션간의 데이터 공유 386 44.3 데이터 저장소의 제약 387 44.4 충돌 해결하기 387 44.5 키-값 변경 알림 받기 387 44.6 아이클라우드 키-값 데이터 저장소 예제 387 44.7 애플리케이션의 아이클라우드 키 값 데이터 저장소 활성화하기 388 44.8 사용자 인터페이스 설계하기 388 44.9 뷰 컨트롤러 구현하기 390 44.10 viewdidload 메서드 수정하기 390 44.11 알림 메서드 구현하기 391 44.12 savedata 메서드 구현하기 391 44.13 애플리케이션 테스트하기 392 CHAPTER 45 SQLite를 이용한 ios 9데이터베이스구현 _393 45.1 SQLite란? 393 45.2 구조적 질의 언어(SQL) 394 45.3 맥 OS X에서 SQLite 사용하기 394 45.4 SQLite 연동을 위한 ios 애플리케이션 프로젝트 준비하기 396 45.5 SQLite, 스위프트, 그리고 래퍼 396 45.6 FMDB 핵심 클래스 397 45.7 데이터베이스 생성하기와 열기 397 45.8 데이터베이스 테이블 생성하기 398 45.9 데이터베이스 테이블에서 데이터 가져오기 398 45.10 데이터베이스 테이블 닫기 399 45.11 요약 399 CHAPTER 46 스위프트와 FMDB를 이용한 SQLite기반iOS 9애플리케이션예제 _400 46.1 SQLite 애플리케이션 예제에 대하여 400 46.2 SQLite 애플리케이션 프로젝트 준비 및 생성하기 400 46.3 FMDB 소스 코드 체크아웃하기 401 46.4 사용자 인터페이스 설계하기 403 46.5 데이터 베이스와 테이블 생성하기 404 46.6 SQLite 데이터베이스에 데이터를 저장하는 코드 구현하기 406 46.7 SQLite 데이터베이스에서 데이터를 가져오는 코드 구현하기 407 46.8 애플리케이션 빌드하고 실행하기 408 46.9 요약 408 xvi 차 례

CHAPTER 47 코어 데이터를 이용한 ios 9데이터베이스작업 _409 47.1 코어 데이터 스택 409 47.2 매니지드 객체 410 47.3 매니지드 객체 콘텍스트 410 47.4 매니지드 객체 모델 411 47.5 영구 저장소 코디네이터 411 47.6 영구 객체 저장소 412 47.7 엔티티 디스크립션 정의 412 47.8 매니지드 객체 콘텍스트 얻기 413 47.9 엔티티 디스크립션 얻기 414 47.10 매니지드 객체 하위 클래스 만들기 414 47.11 매니지드 객체의 속성 설정하기 415 47.12 매니지드 객체 저장하기 415 47.13 매니지드 객체 가져오기 415 47.14 조건에 따른 매니지드 객체 가져오기 416 47.15 가져온 매니지드 객체에 있는 데이터 접근하기 416 47.16 요약 417 CHAPTER 48 ios 9코어데이터튜토리얼 _418 48.1 코어 데이터 예제 애플리케이션 418 48.2 코어 데이터 기반의 애플리케이션 만들기 418 48.3 엔티티 디스크립션 만들기 419 48.4 매니지드 객체 하위 클래스 생성하기 420 48.5 사용자 인터페이스 설계하기 421 48.6 매니지드 객체 콘텍스트 접근하기 423 48.7 코어 데이터를 이용하여 영구 저장소에 데이터 저장하기 423 48.8 코어 데이터를 이용하여 영구 저장소에서 데이터 가져오기 424 48.9 예제 애플리케이션 빌드하고 실행하기 425 48.10 요약 425 CHAPTER 49 ios 9 CloudKit데이터저장소소개 _426 49.1 CloudKit 개요 426 49.2 CloudKit 컨테이너 427 49.3 CloudKit 공용 데이터베이스 427 49.4 CloudKit 개인 데이터베이스 427 49.5 데이터 저장소와 전송량 할당 428 49.6 CloudKit 레코드 428 49.7 CloudKit 레코드 ID 430 49.8 CloudKit 참조제 430 49.9 CloudKit 에셋 431 49.10 레코드 존 431 49.11 CloudKit 구독 432 49.12 아이클라우드 사용자 정보 얻기 432 차 례 xvii

49.13 CloudKit 대시보드 434 49.14 요약 435 CHAPTER 50 ios 9 CloudKit예제 _436 50.1 예제 CloudKit 프로젝트에 대하여 436 50.2 CloudKit 예제 프로젝트 생성하기 437 50.3 사용자 인터페이스 설계하기 437 50.4 아웃렛과 액션 구축하기 439 50.5 공용 데이터베이스 접근하기 440 50.6 키보드 숨기기 440 50.7 selectphoto 메서드 구현하기 441 50.8 클라우드 데이터베이스에 레코드 저장하기 443 50.9 notifyuser 메서드 구현하기 444 50.10 레코드 저장 메서드 테스트하기 444 50.11 클라우드 데이터베이스 레코드 검색하기 445 50.12 클라우드 데이터베이스 레코드 업데이트하기 447 50.13 클라우드 레코드 삭제하기 448 50.14 애플리케이션 테스트하기 448 50.15 요약 449 CHAPTER 51 ios 9 CloudKit구독예제 _450 51.1 푸시 알림과 CloudKit 구독 450 51.2 푸시 알림을 받기 위해 앱 등록하기 451 51.3 CloudKit 구독 구성하기 452 51.4 원격 알림 처리하기 454 51.5 didreceiveremotenotification 메서드 구현하기 454 51.6 클라우드 데이터베이스에서 레코드 가져오기 455 51.7 didfinishlaunchingwithoptions 메서드 구현하기 456 51.8 애플리케이션 테스트하기 457 51.9 요약 458 CHAPTER 52 ios 9멀티터치,탭,그리고제스처에대하여 _459 52.1 리스폰더 체인 459 52.2 다음 리스폰더로 이벤트 전달하기 460 52.3 제스처 460 52.4 탭 461 52.5 터치 461 52.6 터치 알림 메서드 461 52.7 터치 예측 462 52.8 터치 병합 462 52.9 3D 터치 463 52.10 아이패드 프로와 애플 펜슬 스타일러스 463 52.11 요약 464 xviii 차 례

CHAPTER 53 ios 9터치,멀티터치,그리고탭예제애플리케이션 _465 53.1 ios 9 탭과 터치 예제 애플리케이션 465 53.2 ios 9 터치 프로젝트 생성하기 465 53.3 사용자 인터페이스 설계하기 466 53.4 뷰에서 멀티터치 활성화하기 467 53.5 touchesbegan 메서드 구현하기 467 53.6 touchesmoved 메서드 구현하기 468 53.7 touchesended 메서드 구현하기 468 53.8 터치 좌표 얻기 468 53.9 Touch 예제 애플리케이션 빌드하고 실행하기 469 53.10 터치 예측 검사하기 470 53.11 터치 예측 검사하기 470 53.12 요약 471 CHAPTER 54 ios 9터치스크린제스처감지하기 _472 54.1 ios 9 제스처 예제 애플리케이션 472 54.2 예제 프로젝트 생성하기 472 54.3 애플리케이션 사용자 인터페이스 설계하기 473 54.4 touchesbegan 메서드 구현하기 474 54.5 touchesmoved 메서드 구현하기 474 54.6 touchesended 메서드 구현하기 475 54.7 예제 애플리케이션 빌드하고 실행하기 475 54.8 요약 475 CHAPTER 55 ios 9 Gesture Recognizers를 통한 제스처 식별하기 _ 476 55.1 UIGestureRecognizer 클래스 476 55.2 인식기 액션 메시지 477 55.3 불연속 제스처와 연속 제스처 478 55.4 제스처에서 데이터 얻기 478 55.5 탭 제스처 인식하기 478 55.6 핀치 제스처 인식하기 479 55.7 회전 제스처 감지하기 479 55.8 팬과 드래깅 제스처 인식하기 479 55.9 스와이프 제스처 인식하기 479 55.10 롱 터치(터치 앤 홀드) 제스처 인식하기 480 55.11 요약 481 CHAPTER 56 ios 9 제스처인식튜토리얼 _482 56.1 제스처 인식 프로젝트 만들기 482 56.2 사용자 인터페이스 설계하기 482 56.3 액션 메서드 구현하기 484 56.4 제스처 인식 애플리케이션 테스트하기 485 56.5 요약 485 차 례 xix

CHAPTER 57 3D터치포스핸들링튜토리얼 _486 57.1 3D 터치 예제 프로젝트 생성하기 486 57.2 프로젝트에 UIView 서브클래스 추가하기 486 57.3 UIView 서브클래스에 drawrect 메서드 찾기 487 57.4 터치 메서드 구현하기 488 57.5 터치 포스 앱 테스트하기 489 57.6 요약 489 CHAPTER 58 ios 3D터치퀵액션튜토리얼 _490 58.1 퀵 액션 예제 프로젝트 생성하기 490 58.2 정적 퀵 액션 키 490 58.3 프로젝트에 정적 퀵 액션 추가하기 491 58.4 동적 퀵 액션 추가하기 493 58.5 동적 퀵 액션 추가, 제거, 변경하기 494 58.6 퀵 액션 선택에 반응하기 495 58.7 퀵 액션 앱 테스트하기 496 58.8 요약 496 CHAPTER 59 ios 9 3D터치피크앤팝튜토리얼 _497 59.1 예제 프로젝트에 대하여 497 59.2 UIViewControllerPreviewDelegate 추가하기 498 59.3 피크 델리게이트 메서드 구현하기 499 59.4 디테일 컨트롤러 스토리보드 ID 할당하기 500 59.5 팝 델리게이트 메서드 구현하기 501 59.6 미리보기 델리게이트 등록하기 501 59.7 피크 앤 팝 동작 테스트하기 502 59.8 피크 퀵 액션 추가하기 504 59.9 요약 506 CHAPTER 60 ios 9앱에서터치아이디인증 구현하기 _ 507 60.1 Local Authentication 프레임워크 507 60.2 터치아이디 가능 여부 검사하기 508 60.3 터치아이디 정책 판단하기 508 60.4 터치아이디 예제 프로젝트 509 60.5 터치아이디 사용 가능 여부 확인하기 510 60.6 터치아이디 인증 검색하기 512 60.7 애플리케이션 테스트하기 513 60.8 요약 514 CHAPTER 61 코어 그래픽스로 ios 9 2D그래픽그리기 _515 61.1 코어 그래픽스와 쿼츠 2D 소개 515 61.2 drawrect 메서드 515 xx 차 례

61.3 점, 좌표, 그리고 픽셀 516 61.4 그래픽 콘텍스트 516 61.5 쿼츠 2D로 색 작업하기 517 61.6 요약 518 CHAPTER 62 인터페이스 빌더 라이브 뷰와 ios 9임베디드프레임워크 _519 62.1 Embedded 프레임워크 519 62.2 인터페이스 빌더 라이브 뷰 520 62.3 예제 프로젝트 생성하기 520 62.4 임베디드 프레임워크 추가하기 522 62.5 프레임워크에 드로잉 코드 구현하기 523 62.6 설계할 수 있는 뷰 만들기 524 62.7 관리할 수 있는 변수 만들기 525 62.8 요약 526 CHAPTER 63 코어 그래픽스와 코어 이미지를 사용하는 ios 9그래픽튜토리얼 _527 63.1 ios 드로잉 예제 애플리케이션 527 63.2 새로운 프로젝트 생성하기 527 63.3 UIView의 하위 클래스 생성하기 528 63.4 UIView 하위 클래스에 drawrect 메서드 만들기 528 63.5 선 그리기 529 63.6 경로 그리기 531 63.7 사각형 그리기 532 63.8 타원 및 원 그리기 533 63.9 색으로 경로 채우기 534 63.10 호 그리기 536 63.11 3차 베지어 곡선 그리기 537 63.12 2차 베지어 곡선 그리기 538 63.13 점선 그리기 539 63.14 그림자 그리기 540 63.15 그라데이션 그리기 542 63.16 그래픽 콘텍스트에 이미지 그리기 546 63.17 코어 이미지 프레임워크를 통한 이미지 필터링 548 63.18 요약 549 CHAPTER 64 코어 애니메이션을 이용한 ios 9애니메이션기초 _550 64.1 UIView 코어 애니메이션 블록 550 64.2 애니메이션 커브 이해하기 551 64.3 애니메이션 종료 시 알림 받기 552 64.4 아핀 변환 수행하기 552 64.5 아핀 변환 결합하기 553 64.6 애니메이션 예제 애플리케이션 만들기 553 64.7 변수 구현하기 553 차 례 xxi

64.8 UIView에 그리기 554 64.9 화면 터치 감지하기와 애니메이션 수행하기 554 64.10 애니메이션 애플리케이션 빌드하고 실행하기 556 64.11 요약 557 CHAPTER 65 ios 9 UIKit다이내믹스개요 _558 65.1 UIKit 다이내믹스 이해하기 558 65.2 UIKit 다이내믹스 아키텍처 559 65.3 ios 9 애플리케이션에서 UIKit 다이내믹스 구현하기 561 65.4 다이내믹 애니메이터 초기화 561 65.5 중력 동작 구성하기 562 65.6 충돌 동작 구성하기 563 65.7 부착 동작 구성하기 565 65.8 스냅 동작 구성하기 566 65.9 푸시 동작 구성하기 567 65.10 UIDynamicItemBehavior 클래스 568 65.11 커스텀 동작을 만들기 위하여 동작들을 결합하기 569 65.12 요약 570 CHAPTER 66 ios 9 UIKit다이내믹스튜토리얼 _571 66.1 UIKit 다이내믹스 예제 프로젝트 생성하기 571 66.2 다이내믹스 항목 추가하기 571 66.3 다이내믹스 애니메이터 인스턴스 생성하기 573 66.4 뷰에 중력 추가하기 574 66.5 충돌 동작 구현하기 575 66.6 앵커 포인트에 뷰 붙이기 576 66.7 두 개의 뷰 사이에 스프링 연결 구현하기 578 66.8 요약 579 CHAPTER 67 ios 9SpriteKit프로그래밍개요 _580 67.1 SpriteKit이란? 580 67.2 SpriteKit 게임의 핵심 요소들 581 67.3 예제 SpriteKit 게임 계층 구조 584 67.4 SpriteKit 게임 렌더링 루프 585 67.5 SpriteKit 레벨 편집기 586 67.6 요약 586 CHAPTER 68 ios 9스프라이트레벨에디터게임튜토리얼 _588 68.1 SpriteKit 데모 게임에 대하여 588 68.2 SpriteKitDemo 프로젝트 생성하기 590 68.3 SpriteKit 게임 템플릿 프로젝트 살펴보기 590 68.4 인터페이스 방향 제한하기 592 xxii 차 례

68.5 GameScene SpriteKit 화면 파일 수정하기 592 68.6 궁수 화면 만들기 595 68.7 궁수 화면으로 전환하기 596 68.8 텍스처 아틀라스 추가하기 597 68.9 궁수 화면 설계하기 599 68.10 궁수 화면 준비하기 601 68.11 애니메이션 텍스처 아틀라스 준비하기 602 68.12 지정된 액션 참조체 생성하기 604 68.13 액션 파일의 액션 테스트하기 604 68.14 코드에서 지정된 액션 실행하기 606 68.15 화살 스프라이트 노드 생성하기 606 68.16 화살 발사하기 607 68.17 공 스프라이트 노드 추가하기 608 68.18 요약 610 CHAPTER 69 ios 9SpriteKit충돌핸들링튜토리얼 _611 69.1 카테고리 비트 마스크 정의하기 611 69.2 스프라이트 노드에 카테고리 마스크 할당하기 612 69.3 충돌 마스크와 접촉 마스크 구성하기 613 69.4 접촉 델리게이트 구현하기 614 69.5 게임 오버 615 69.6 요약 617 CHAPTER 70 ios 9SpriteKit파티클이미터튜토리얼 _618 70.1 파티클 이미터란? 618 70.2 파티클 이미터 에디터 619 70.3 SKEmitterNode 클래스 619 70.4 파티클 이미터 에디터 사용하기 620 70.5 파티클 이미터 노드 속성들 622 70.6 파티클 이미터 에디터 경험해보기 624 70.7 파티클 이미터 효과를 이용하여 공 터트리기 625 70.8 터지는 파티클 이미터 효과 추가하기 627 70.9 오디오 액션 추가하기 628 70.10 요약 630 CHAPTER 71 ios 9앱에iAd연동하기 _631 71.1 애플리케이션 내에서 iad 실행할 준비하기 631 71.2 iad 광고 형식 632 71.3 예제 iad 애플리케이션 생성하기 636 71.4 Xcode 프로젝트에 iad 프레임워크 추가하기 636 71.5 배너 광고 활성화하기 637 71.6 중간 사각 광고 추가하기 638 71.7 삽입 광고 구현하기 639 차 례 xxiii

71.8 iad 테스트 설정하기 641 71.9 요약 642 CHAPTER 72 ios 9멀티태스킹,백그라운드전송서비스,그리고패칭 _643 72.1 ios 애플리케이션 상태 이해하기 643 72.2 멀티태스킹 애플리케이션 생명 주기에 대한 개요 644 72.3 멀티태스킹 지원 체크하기 645 72.4 ios 애플리케이션을 위한 멀티태스킹 활성화하기 646 72.5 백그라운드 실행 형태 647 72.6 백그라운드 패치의 개요 647 72.7 원격 알림의 개요 649 72.8 로컬 알림의 개요 650 72.9 백그라운드 전송 서비스의 개요 650 72.10 백그라운드 실행의 규칙 650 72.11 요약 651 CHAPTER 73 ios 9로컬알림예약하기 _652 73.1 로컬 알림 앱 프로젝트 생성하기 652 73.2 프로젝트에 사운드 파일 추가하기 653 73.3 퍼미션 요청하기 653 73.4 애플리케이션 델리게이트 메서드 찾기 654 73.5 로컬 알림 예약하기 654 73.6 애플리케이션 테스트하기 655 73.7 예약된 알림 취소하기 656 73.8 즉시 로컬 알림 호출하기 656 73.9 요약 656 CHAPTER 74 ios 9애플리케이션상태보존과복원 _657 74.1 보존과 복원 절차 658 74.2 보존과 복원 선택하기 659 74.3 복원 식별자 할당하기 659 74.4 UIKit의 디폴트 보존 기능들 660 74.5 부가적인 상태 정보 저장/복원하기 661 74.6 복원 절차 이해하기 662 74.7 일반적인 애플리케이션 상태 저장하기 663 74.8 요약 664 CHAPTER 75 ios 9상태보존과복원튜토리얼 _665 75.1 예제 애플리케이션 생성하기 665 75.2 상태 보존이 없는 애플리케이션 만들기 665 75.3 상태 보존 적용하기 666 75.4 복원 식별자 설정하기 666 xxiv 차 례

75.5 뷰 컨트롤러 상태를 인코딩/디코딩하기 667 75.6 스토리보드에 내비게이션 컨트롤러 추가하기 669 75.7 세 번째 뷰 컨트롤러 추가하기 670 75.8 복원 클래스 생성하기 673 75.9 요약 674 CHAPTER 76 MKMapItem을 이용하여 ios 9애플리케이션에지도통합하기 _675 76.1 MKMapItem 클래스와 MKPlacemark 클래스 676 76.2 순방향 지오코딩과 역방향 지오코딩에 대한 소개 676 76.3 MKPlacemark 인스턴스 생성하기 678 76.4 MKMapItem으로 작업하기 678 76.5 MKMapItem 옵션들과 길찾기 설정하기 680 76.6 MKMapItem에 상세 정보 추가하기 681 76.7 요약 682 CHAPTER 77 ios 9 MKMapItem애플리케이션예제 _683 77.1 MapItem 프로젝트 생성하기 683 77.2 사용자 인터페이스 설계하기 683 77.3 순방향 지오코딩을 이용하여 목적지 변환하기 685 77.4 지도 실행하기 686 77.5 애플리케이션 빌드하고 실행하기 687 77.6 요약 688 CHAPTER 78 ios 9코어로케이션프레임워크를이용하여위치정보얻기 _689 78.1 코어 로케이션 매니저 689 78.2 위치 접근 권한 요청하기 690 78.3 위치 정확도 설정하기 690 78.4 거리 필터 구성하기 691 78.5 로케이션 매니저 델리게이트 691 78.6 위치 업데이트 시작하기 692 78.7 CLLocation 객체에서 위치 정보 얻기 693 78.8 현재 위치 얻기 694 78.9 거리 계산하기 694 78.10 위치 정보와 멀티태스킹 694 78.11 요약 694 CHAPTER 79 ios 9로케이션예제애플리케이션 _695 79.1 ios 9 로케이션 예제 프로젝트 생성하기 695 79.2 사용자 인터페이스 설계하기 695 79.3 CLLocationManger 객체 구성하기 697 79.4 Usage Description Key 설정하기 698 79.5 액션 메서드 구현하기 698 차 례 xxv

79.6 애플리케이션 델리게이트 메서드 구현하기 698 79.7 로케이션 애플리케이션 빌드하고 실행하기 700 CHAPTER 80 MapKit과 MKMapView클래스를이용하여iOS 9에서 지도 다루기 _ 701 80.1 MapKit 프레임워크에 대하여 701 80.2 Map Regions 이해하기 702 80.3 대중교통 ETA 정보 얻기 702 80.4 MKMapView 튜토리얼에 대하여 703 80.5 지도 프로젝트 생성하기 703 80.6 네비게이션 컨트롤러 추가하기 703 80.7 MKMapView 인스턴스와 툴바 생성하기 704 80.8 위치 정보 퍼미션 얻기 706 80.9 Usage Description Key 설정하기 707 80.10 맵 뷰 구성하기 707 80.11 맵뷰 영역 변경하기 708 80.12 지도 형식 변경하기 708 80.13 MapView 애플리케이션 테스트하기 709 80.14 사용자 이동에 따른 맵 뷰 업데이트하기 709 80.15 요약 710 CHAPTER 81 ios 9에서 MapKit로컬검색사용하기 _711 81.1 ios 9 로컬 검색 개요 711 81.2 MapSample 애플리케이션에 로컬 검색 추가하기 713 81.3 로컬 검색 텍스트 필드 추가하기 713 81.4 로컬 검색 수행하기 715 81.5 애플리케이션 테스트하기 716 81.6 요약 717 CHAPTER 82 ios 9맵길찾기와경로를얻기위하여MKDirections이용하기 _718 82.1 MKDirections 개요 718 82.2 MapSample 애플리케이션에 길찾기와 경로 추가하기 720 82.3 프로젝트에 새로운 클래스 추가하기 720 82.4 결과 테이블 뷰 구성하기 721 82.5 결과 테이블 뷰 세그웨이 구현하기 723 82.6 경로 화면 추가하기 724 82.7 사용자의 현재 위치 식별하기 726 82.8 경로와 방향 얻기 727 82.9 경로 세그웨이 구축하기 729 82.10 애플리케이션 테스트하기 729 82.11 요약 730 xxvi 차 례

CHAPTER 83 ios 9맵킷플라이오버튜토리얼 _731 83.1 MKMapView 플라이오버 맵 타입 731 83.2 MKMapCamera 클래스 732 83.3 MKMapKit 플라이오버 예제 733 83.4 사용자 인터페이스 설계하기 733 83.5 맵 뷰와 카메라 구성하기 735 83.6 카메라의 위치 변경하는 애니메이션 736 83.7 맵 플라이오버 앱 테스트하기 737 83.8 요약 737 CHAPTER 84 ios 9익스텐션소개 _738 84.1 ios 익스텐션 개요 738 84.2 익스텐션 타입 739 84.3 익스텐션 생성하기 743 84.4 요약 744 CHAPTER 85 ios 9투데이익스텐션위젯 튜토리얼 _ 745 85.1 예제 익스텐션 위젯에 대하여 745 85.2 예제 프로젝트 생성하기 746 85.3 프로젝트에 익스텐션 추가하기 746 85.4 익스텐션 파일 살펴보기 748 85.5 위젯 사용자 인터페이스 설계하기 749 85.6 코드로 원하는 콘텐츠 사이즈 설정하기 751 85.7 위젯 뷰 컨트롤러 수정하기 751 85.8 익스텐션 테스트하기 754 85.9 익스텐션에서 포함하는 앱 열기 754 85.10 요약 756 CHAPTER 86 ios 9포토에디팅익스텐션만들기 _757 86.1 포토 에디팅 익스텐션 생성하기 757 86.2 포토 에디팅 익스텐션 접근하기 758 86.3 Info.plist 파일 구성하기 760 86.4 사용자 인터페이스 설계하기 761 86.5 PHContentEditingController 프로토콜 763 86.6 포토 익스텐션과 조정 데이터 763 86.7 콘텐츠 받기 764 86.8 필터 액션 구현하기 765 86.9 이미지를 사진 앱으로 반환하기 767 86.10 애플리케이션 테스트하기 770 86.11 요약 770 차 례 xxvii

CHAPTER 87 ios 9액션익스텐션만들기 _771 87.1 액션 익스텐션의 개요 771 87.2 액션 익스텐션 예제에 대하여 772 87.3 액션 익스텐션 프로젝트 생성하기 773 87.4 액션 익스텐션 프로젝트 생성하기 773 87.5 액션 표시명 변경하기 774 87.6 액션 익스텐션 사용자 인터페이스 설계하기 774 87.7 콘텐츠 받기 776 87.8 수정된 데이터를 호스트 앱에 돌려보내기 778 87.9 익스텐션 테스트하기 779 87.10 지원되는 컨텐츠 타입 선언하기 782 87.11 요약 783 CHAPTER 88 ios 9액션익스텐션에서데이터 받기 _ 784 88.1 예제 프로젝트 생성하기 784 88.2 사용자 인터페이스 설계하기 784 88.3 Mobile Core Service 프레임워크 임포트하기 785 88.4 애플리케이션에 공유 버튼 추가하기 786 88.5 익스텐션으로부터 데이터 받기 787 88.6 애플리케이션 테스트하기 789 88.7 요약 789 CHAPTER 89 날짜와 위치 기반의 미리 알림 제작을 위한 ios 9 EventKit이용하기 _790 89.1 EventKit 프레임워크의 개요 790 89.2 EKEventStore 클래스 791 89.3 데이터베이스에 있는 캘린더 접근하기 793 89.4 미리 알림 생성하기 793 89.5 알람 생성하기 794 89.6 예제 프로젝트 생성하기 794 89.7 날짜/시간 기반의 미리 알림 화면을 위한 사용자 인터페이스 설계하기 795 89.8 미리 알림 코드 구현하기 796 89.9 키보드 숨기기 798 89.10 위치 기반 미리 알림 화면 설계하기 799 89.11 위치 기반 미리 알림 생성하기 800 89.12 Usage Description Key 설정하기 803 89.13 애플리케이션 테스트하기 803 89.14 요약 805 CHAPTER 90 ios 9카메라와포토라이브러리접근하기 _806 90.1 UIImagePickerController 클래스 806 90.2 UIImagePickerController 인스턴스 생성하기와 구성하기 807 90.3 UIImagePickerController 델리게이트 구성하기 808 xxviii 차 례

90.4 디바이스 지원 여부 확인하기 809 90.5 동영상과 이미지 저장하기 810 90.6 요약 811 CHAPTER 91 ios 9카메라예제애플리케이션 _812 91.1 예제 애플리케이션의 개요 812 91.2 카메라 프로젝트 생성하기 812 91.3 사용자 인터페이스 설계하기 813 91.4 액션 메서드 구현하기 814 91.5 델리게이트 메서드 작성하기 815 91.6 애플리케이션 빌드하고 실행하기 817 CHAPTER 92 AVPlayer와 AVPlayerViewController를 이용하여 ios 9비디오재생하기 _819 92.1 AVPlayer 클래스와 AVPlayerViewController 클래스 819 92.2 ios 무비 플레이어 예제 애플리케이션 820 92.3 HTTP 연결에 대한 보안 관련 예외 처리 820 92.4 사용자 인터페이스 설계하기 821 92.5 비디오 재생 초기화하기 822 92.6 애플리케이션 빌드하고 실행하기 822 92.7 코드로 AVPlayerViewController 인스턴스 생성하기 823 92.8 요약 823 CHAPTER 93 ios 9멀티태스킹픽처인픽처튜토리얼 _825 93.1 픽처 인 픽처 멀티태스킹 개요 825 93.2 AVPlayerDemo 앱에 픽처 인 픽처 지원 추가하기 826 93.3 내비게이션 컨트롤러 추가하기 827 93.4 오디오 세션 카테고리 설정하기 827 93.5 델리게이트 구현하기 828 93.6 픽처 인 픽처 지원 제거하기 831 93.7 다른 델리게이트 메서드들 831 93.8 요약 831 CHAPTER 94 AVAudioPlayer를 이용하여 ios 9에서 오디오 재생하기 _ 832 94.1 지원하는 오디오 포맷 832 94.2 재생 알림 받기 833 94.3 재생 제어하기와 모니터링하기 833 94.4 오디오 예제 애플리케이션 만들기 834 94.5 프로젝트 리소스에 오디오 파일 추가하기 834 94.6 사용자 인터페이스 설계하기 834 94.7 액션 메서드 구현하기 836 94.8 AVAudioPlayer 객체 생성하고 초기화하기 836 차 례 xxix

94.9 AVAudioPlayerDelegate 프로토콜 메서드 구현하기 837 94.10 애플리케이션 빌드하고 실행하기 838 94.11 요약 838 CHAPTER 95 AVAudioRecorder로 ios 9에서 오디오 녹음하기 _ 839 95.1 AVAudioRecorder 튜토리얼의 개요 839 95.2 Record 프로젝트 만들기 840 95.3 사용자 인터페이스 설계하기 840 95.4 AVAudioRecorder 인스턴스 생성하기 841 95.5 액션 메서드 구현하기 842 95.6 델리게이트 메서드 구현하기 843 95.7 애플리케이션 테스트하기 844 CHAPTER 96 ios 9애플리케이션에트위터와페이스북통합하기 _845 96.1 UIActivityViewController 클래스 845 96.2 Social 프레임워크 846 96.3 Accounts 프레임워크 846 96.4 UIActivityViewController 클래스 이용하기 847 96.5 SLComposeViewController 클래스 이용하기 849 96.6 요약 850 CHAPTER 97 UIActivityViewController를 이용한 ios 9소셜네트워크통합튜토리얼 _852 97.1 페이스북 소셜 앱 생성하기 852 97.2 사용자 인터페이스 설계하기 852 97.3 아웃렛과 액션 생성하기 853 97.4 selectimage 메서드와 델리게이트 메서드 구현하기 854 97.5 키보드 숨기기 855 97.6 메시지 포스팅하기 855 97.7 소셜 애플리케이션 실행하기 856 97.8 요약 857 CHAPTER 98 SLRequest를 이용한 ios 9페이스북과트위터통합 _858 98.1 SLRequest 클래스와 Account 프레임워크 이용하기 859 98.2 SLRequest를 이용하여 트위터 통합하기 859 98.3 SLRequest를 이용하여 페이스북 통합하기 862 98.4 요약 864 CHAPTER 99 SLRequest를 이용한 ios 9트위터통합튜토리얼 _865 99.1 TwitterApp 프로젝트 생성하기 865 99.2 사용자 인터페이스 설계하기 865 xxx 차 례

99.3 뷰 컨트롤러 클래스 수정하기 867 99.4 트위터 API 접근하기 868 99.5 gettimeline 메서드 호출하기 871 99.6 테이블 뷰 델리게이트 메서드 871 99.7 애플리케이션 빌드하고 실행하기 872 99.8 요약 872 CHAPTER 100 SKStoreProductViewController클래스로판매하기 _873 100.1 SKStoreProductViewController 클래스 873 100.2 예제 프로젝트 생성하기 874 100.3 사용자 인터페이스 생성하기 875 100.4 StoreKit 제품 뷰 컨트롤러 표시하기 875 100.5 델리게이트 메서드 구현하기 877 100.6 애플리케이션 테스트하기 877 100.7 요약 878 CHAPTER 101 ios 9애플리케이션에앱내결제구축하기 _879 101.1 앱 내 결제 옵션 879 101.2 앱 스토어가 호스팅하도록 콘텐츠 업로드하기 880 101.3 앱 내 결제 아이템 구성하기 880 101.4 제품 요청 전송하기 881 101.5 결제 큐 접근하기 882 101.6 트랜젝션 옵저버 객체 882 101.7 결제 시작하기 883 101.8 트랜젝션 처리 883 101.9 트랜젝션 복원 885 101.10 앱 내 결제 테스트하기 885 101.11 요약 886 CHAPTER 102 앱 내 결제를 위한 ios 9애플리케이션준비하기 _887 102.1 예제 애플리케이션에 대하여 887 102.2 Xcode 프로젝트 생성하기 888 102.3 앱 내 결제를 위한 App ID 등록하고 활성화하기 888 102.4 itunesconnect에서 애플리케이션 구성하기 888 102.5 앱 내 결제 아이템 생성하기 889 102.6 요약 890 CHAPTER 103 ios 9앱내결제튜토리얼 _891 103.1 애플리케이션 사용자 인터페이스 891 103.2 스토리보드 설계하기 892 103.3 결제 뷰 컨트롤러 클래스 생성하기 893 103.4 앱 델리게이트 클래스에 홈 뷰 컨트롤러 저장하기 895 차 례 xxxi

103.5 ViewController 클래스 완성하기 896 103.6 PurchaseViewController 클래스 완성하기 897 103.7 애플리케이션 테스트하기 899 103.8 문제 해결 900 103.9 요약 901 CHAPTER 104 ios 9앱내결제를위하여앱스토어가호스팅하는 콘텐츠 구성하고 생성하기 _ 902 104.1 앱 내 결제에서 호스팅된 콘텐츠를 위한 애플리케이션 구성하기 902 104.2 콘텐츠 패키지를 호스팅하는 앱 내 결제 해부하기 903 104.3 앱 내 결제에서 호스팅된 콘텐츠를 위한 애플리케이션 구성하기 903 104.4 호스팅된 콘텐츠 패키지 아카이빙하기 904 104.5 호스팅된 콘텐츠 패키지 검증하기 905 104.6 호스팅된 콘텐츠 패키지 업로드하기 906 104.7 요약 906 105.1 ios 배포 인증서 검증하기 907 CHAPTER 105 앱 스토어에 ios 9애플리케이션등록을위한준비와제출하기 _907 105.2 앱 아이콘 추가하기 909 105.3 시작 화면 설계하기 910 105.4 프로젝트를 팀에 할당하기 910 105.5 배포를 위해 애플리케이션 아카이브하기 911 105.6 itunes Connect에서 애플리케이션 설정하기 912 105.7 애플리케이션 검증하기와 제출하기 913 105.8 검수를 위해 앱 구성하고 제출하기 915 찾아보기 917 xxxii 차 례

옮 긴 이 머 리말 ios 9에서 생긴 큰 변화라고 한다면, Swift 2.0의 등장과 새로워진 사용자 인터페이스들이라 고 할 수 있습니다. 저도 개발자이지만, 개발자에게 가장 힘든 일이라고 한다면 새로운 언어를 배우는 일이라 생각합니다. Swift가 처음 나왔을 때, 많은 개발자가 이 새로운 언어를 배우느 라 무척 고생했을 것입니다. 그런데 매우 충격적인 사실은 힘들게 배웠던 Swift 언어가 2.0으로 업데이트되면서 이전에 알던 것들이 필요 없어지는(심지어 달라지는) 일이 생겼다는 것입니다. 이러한 변화들은 (늘 그렇듯) Swift 언어의 성능을 향상시켜 앱을 보다 빠르고 편리하게 제작할 수 있도록 해주었습니다. 또한, ios 9에서는 개발자가 스택뷰, 포스터치, 3D 터치 퀵 액션, 피 크 앤 팝 등 새로운 사용자 인터페이스를 사용할 수 있도록 하였습니다. 저는 어찌 보면 이미 포화 상태가 된 모바일 앱 시장에서 새로운 아이디어와 재미있는 기능을 구현할 수 있는 새로 운 무기가 생겼다고 생각합니다. 애플이 제공해주는 새로운 기능들과 기기들을 가지고 더 강 력하고 참신한 앱을 구상할 수 있게 된 것입니다. 이 책의 이전 버전들을 읽어보신 독자라면 이 책의 매력 중 하나가 바로 구성이라는 것을 아 실 겁니다. 대부분의 컴퓨터 관련 서적은 앞 장을 읽고 이해하지 못한다면 이후에 나오는 내 용을 이해할 수 없게 되어 있습니다. 물론 이러한 구성 역시 장점이 많습니다만, 원하는 기능 이나 내용을 바로 찾아 확인하기가 어렵다는 단점 또한 가지고 있습니다. 이 책은 각 장들이 독립적으로 구성되어 있어, 어떤 주제에 대해서 내용을 설명하는 장과 그 내용을 실습해보는 장이 따로 만들어져 여러분이 보고 싶은 기능이나 내용을 바로 찾아서 읽을 수 있습니다. 번역을 하면서 늘 느끼게 되지만, 번역 작업이 쉽지만은 않습니다. 저 혼자 원문을 읽고 이해 하고 끝나는 게 아니라, 우리말로 옮긴 후에 다시 그 문장을 독자가 이해할 수 있도록 다듬 는 작업의 반복입니다. 그래서 항상 마지막 단계에서 고민하게 됩니다. 어떻게 표현해야 저자 의 의도를 좀 더 잘 이해할 수 있게 전달할까? 언제나 저 스스로에게 하는 질문입니다. 고심 옮긴이 머리말 xxxiii

하고 고심해서 작업한 것이지만, 그래도 늘 아쉬움과 부족함이 있기에 인터넷 카페(http://cafe. naver.com/petersbook)를 운영하고 있습니다. 여러분께서 많은 의견을 보내주시고 또 서로 토론 해주시기 바랍니다. 부끄럽게도 표지에 제 이름만이 실려 있으나, 이 책이 나오기까지 많은 분의 관심과 노력이 없 었다면 불가능했음을 잘 압니다. 언제나 가야 할 길을 보여주시고 인도하시는 하나님께 감사 와 찬양을 드립니다. 이제 막 돌이 지난 아기이지만, 자신이 세상에 가장 빠른 줄 알고 뛰어다 니는 사랑하는 나의 딸(단비)과 가족에게도 사랑을 전합니다. 이 책을 위해 힘써 주신 여러 관 계자에게도 머리 숙여 감사의 마음을 표하고 싶네요. 그리고 늘 그립고 존경하는 아버지, 사 랑합니다! 옮긴이 황반석 xxxiv 옮긴이 머리말

C H A P T E R 1 시작하기 이 책의 목적은 ios 9 SDK 와 Xcode 7, 그리고 스위프트(Swift) 2 프로그래밍 언어를 이용하여 ios 애플리케이션을 생성하는 데 필요한 기술을 가르치는 것이다. 여러분이 ios 개발이 처음인지, 아니면 ios 8으로 작업한 경험이 있어서 ios 9의 기능들과 최 신 스위프트 프로그래밍 언어를 빠르게 습득하고자 하는지에 따라 이 책의 활용 방법이 크게 달라질 것이다. 하지만 이 책은 양쪽 모두를 대상으로 하고 있으므로 안심해도 좋다. 1.1 ios 개발이 처음인 개발자를 위하여 만약 여러분이 ios 개발이 처음이라면, 이 책 내용 전체가 여러분에게 필요할 것이다. 기초부터 시작하는 이 책은 ios 개발 환경을 구축하는 데 필요한 전반적인 내용을 제공하며, ios 9의 아키텍처와 스위프트 프로그래밍에 관해 소개한 다음에 ios 애플리케이션과 사용 자 인터페이스 설계에 관하여 자세히 살펴볼 것이다. 아울러 파일 핸들링, 데이터베이스 관리, 앱 내 결제(In-App Purchase), 그래픽 드로잉, 그리고 애니메이션을 다루며, 터치스크린 핸들링, 제스처 인식, 멀티태스킹, iad 통합, 위치 관리, 로컬 노티피케이션, 카메라 접근, 그리고 비디 오 및 오디오 재생에 관한 지원도 다룬다. 이외에도 자동 레이아웃, 트위터 및 페이스북 통합, 앱 내 결제 내용을 관리하는 앱 스토어 등을 포함한 다른 기능들도 다룬다. 게다가 SpriteKit 기반의 게임 개발, 로컬 맵 검색, 그리고 UIKit 다이내믹스를 이용한 사용자 인터페이스 1

애니메이션 등을 포함한 다른 기능들도 다룬다. 스위프트 플레이그라운드, 사이즈 클래스를 이용한 유니버셜 사용자 인터페이스 설계, 인터 페이스 빌더 라이브 뷰, 임베디드 프레임워크, CloudKit 데이터 저장소, 그리고 터치아이디 (TouchID) 인증을 포함하여 Xcode 7을 이용한 ios 개발의 다른 기능들도 다룰 것이다. 또한 스위프트 2(Swift 2)에서의 새로운 에러 처리 방법과 스택 뷰(Stack View) 기반의 사용자 인 터페이스 설계, 다중 스토리보드 지원, 아이패드 멀티태스킹, 맵 플라이오버(flyover) 지원, 3D 터치, 그리고 픽처 인 픽처(Picture in Picture) 미디어 재생이라는 ios 9과 Xcode 7의 새로운 핵 심 기능들에 대해서도 자세히 다룰 예정이다. 이 책의 목표는 여러분의 ios 9용 앱을 만드는 데 필요한 기술들을 가르치는 것이다. 또한 이 책은 여러분이 ios 9 SDK와 Xcode 7을 다운로드한 상태이며, 인텔 기반의 맥과 개발하고자 하는 앱에 대한 아이디어를 가진 채 시작할 준비가 되었다고 가정한 상태에서 진행할 것이다. 1.2 ios 8 개발자를 위하여 여러분이 핵심만 골라 배우는 ios 8 프로그래밍 (제이펍) 책을 이미 읽었거나 ios 8 SDK에 대 한 경험이 있다면, ios 9의 새로운 내용들을 바로 읽어보고 싶을 것이다. ios 9과 Xcode 7에 도입된 모든 변경 사항과 기능들을 반영하기 위해 이 책의 모든 내용이 업 데이트되었다. 이전 버전의 책에 포함되지 않았거나 ios 9과 Xcode 7 관련하여 다시 집필된 장들은 다음과 같다. Xcode 7 플레이그라운드 소개 애플 개발자 프로그램 가입하기 스위프트의 서브클래싱과 익스텐션의 개요 스위프트 2에서의 에러 처리 이해하기 여러 개의 스토리보드 파일에 화면 구성하기 ios 9 스택 뷰 클래스로 작업하기 ios 9 스택 뷰 튜토리얼 ios 9에서의 멀티태스킹 소개 ios 9 멀티태스킹 예제 2 CHAPTER 1 시작하기

3D 터치 핸들링 튜토리얼 ios 9의 3D 터치 퀵 액션 튜토리얼 ios 9의 3D 터치 피크 앤 팝 튜토리얼 ios 9 맵킷 플라이오버 튜토리얼 ios 9 멀티태스킹 픽처 인 픽처 튜토리얼 추가로 다음의 내용도 변경되었다. 이 책의 모든 장은 새로워진 Xcode 7을 반영하기 위하여 필요한 모든 내용이 업데이트되 었다. 이 책의 모든 내용과 예제는 스위프트 2(Swift 2)를 사용한다. 멀티터치 핸들링 장은 ios 9의 새로운 예측 터치(predictive touches) 기능을 설명하기 위하여 업데이트되었다. 이 책에서 설명하는 지도 관련 내용에는 Transit ETA 정보를 얻는 단계를 포함하였다. SpriteKit 장은 Xcode 7의 새로운 라이브 애니메이션 (Live Animation)과 액션 에디터(Action Editor)를 사용하도록 업데이트되었다. 1.3 예제 소스 코드 이 책에 포함된 예제의 소스 코드와 Xcode 프로젝트 파일은 다음의 웹 사이트에서 다운로드 받을 수 있다. URL https://github.com/jpub/ios9 1.4 watchos 앱 개발 방법 배우기 만약에 여러분이 애플 워치(Apple Watch)용 WatchKit 앱을 개발할 계획이라면, 핵심만 골라 배 우는 애플 워치 프로그래밍 (제이펍)을 추천한다. 1.4 watchos 앱 개발 방법 배우기 3

1.5 오탈자 이 책 내용에 대한 정확성을 위하여 모든 노력을 다했지만, 다루는 주제의 범위와 복잡성 때 문에 오탈자가 발생할 수 있다. 발견된 문제는 다음 웹 페이지를 통해 해결 방법과 수정 사항 을 밝히도록 하겠다. URL http://cafe.naver.com/petersbook 만약 역자의 인터넷 카페에 표시되지 않은 오류를 발견했다면, 카페에 글을 쓰거나 역자(naya. peter@gmail.com) 또는 출판사(readers.jpub@gmail.com)에게 이메일을 보내주기 바란다. 4 CHAPTER 1 시작하기

C H A P T E R 2 애플 개발자 프로그램가입하기 ios 9 기반의 아이폰 애플리케이션 개발의 첫 번째 단계는 애플 개발자 프로그램(Apple Developer Program)이 주는 혜택에 대해 알고 언제 비용을 지불하여 가입하는 것이 좋을지 결정하는 것부 터 시작한다. 이러한 목적에 맞춰 이번 장은 개발자 프로그램에 가입할 때 드는 비용과 혜택을 설명하고, 등록 절차에 대해서도 살펴볼 것이다. 2.1 Xcode 7과 ios 9 SDK 다운로드하기 최신 버전의 ios SDK와 Xcode는 맥용 앱 스토어(App Store)에서 무료로 다운로드받을 수 있다. Xcode는 무료이기 때문에 그냥 받으면 되지만, 애플 개발자 프로그램에 지금 등록할 것인지 아니면 나중에 앱 개발을 배우는 도중에 등록해도 괜찮은지에 대한 질문이 여전히 남는다. 2.2 애플 개발자 프로그램 애플 개발자 프로그램의 멤버십은 개인 개발자로 등록하는 경우, 현재 1년에 99달러다. 물론, 기업 수준의 멤버십도 가입할 수 있다. ios 9과 Xcode 7이 나오기 전에는 실제 ios 기기에서 애플리케이션을 테스트할 수 있는 프로 비저닝 프로파일과 인증서를 만들 수 있다는 점이 개발자 프로그램의 주요 혜택들 중 한 가지 였다. 하지만 이제는 애플 아이디(Apple ID)만 있으면 실제 ios 기기에서 앱을 테스트할 수 있 게 되었다. 5

애플 개발자 프로그램에 돈을 내고 가입하지 않아도 할 수 있는 것들이 많아졌지만, 어떤 종 류의 앱들은 프로그램 멤버십 없이는 완전한 테스트를 실시할 수가 없다. 예로 아이클라우드 (icloud), 애플 페이(Apple Pay), 게임 센터(Game Center), 앱 내 결제(In-App Purchasing)는 애플 개 발자 프로그램 멤버십에 가입했을 때만 테스트할 수 있다. 더 중요한 점은 애플 개발자 프로그램 멤버만이 애플의 ios 기술 지원 엔지니어들에게 기술 문의(1년에 단 두 의 문의만 무료이긴 하지만)에 대한 답변을 받을 수 있고, 다른 ios 개발자들로부 터 도움을 받거나 안내를 받을 수 있으며, 다른 개발자들이 겪었던 문제들을 어떻게 해결했는 지도 알 수 있는 애플 개발자 포럼(Apple Developer forum)에 접근할 수 있게 된다. 또한, 프로그램 멤버십은 Xcode와 ios의 베타(Beta) 버전을 미리 받아서 사용해볼 수 있게 해 준다. 그리고 무엇보다 애플 개발자 프로그램에서 가장 중요한 점은 개발자 프로그램 멤버만이 앱 스토어를 통한 애플리케이션 판매 및 배포를 할 수 있다는 점이다. 따라서 앱 스토어에 여러분의 애플리케이션을 올리려면 어느 특정 시점에는 개발자 프로그램 멤버십에 가입해야만 한다. 그렇다면 언제 가입해야 할까? 2.3 언제 애플 개발자 프로그램에 가입할까? 애플 개발자 프로그램 멤버십이 여러 혜택을 제공하며, 특히 애플리케이션을 판매하기 위해서 는 필수적이라는 것이 분명해졌다. 그렇다 하더라도 지금 가입할지 아니면 나중에 가입할지는 개인적인 상황에 따라 다를 것이다. 만약 여러분이 ios 애플리케이션 개발에 관해 공부를 하 는 첫 단계이거나 아직까지 멋진 아이디어가 없다면, 프로그램 맴버십이 없어도 필요한 것들 을 충분히 이용할 수 있을 것이다. 개발 관련 기술을 습득하고 애플리케이션 개발에 관한 아 이디어를 충분히 가다듬은 후에 개발자 프로그램에 가입해도 늦지 않다. 반면에 조만간 프로그램 개발이 끝나고 배포를 계획하고 있거나 아이클라우드, 앱 내 결제, 애 플 페이 등의 고급 기능들을 사용해야 한다면 가능한 빨리 개발자 프로그램에 가입해야 한다. 2.4 애플 개발자 프로그램에 가입하기 만약 지금 여러분이 속한 회사에서 ios 애플리케이션을 개발하려고 하는 것이라면, 회사가 이미 멤버십 가입을 했는지 확인하는 것이 필요하다. 가입되어 있다면 회사의 프로그램 관리 6 CHAPTER 2 애플 개발자 프로그램 가입하기

자에게 연락하여 개발 팀원으로 참여할 수 있도록 애플 개발자 프로그램 멤버 센터의 초대장 을 요청하자. 이 과정이 진행되면 애플로부터 멤버십을 활성화시킬 수 있는 링크가 포함된 이메일 이 온다. 또한, 여러분의 회사가 개발자 프로그램 멤버십 가입을 아직 하지 않았다면 다음 링 크를 통해 가입할 수 있다. URL https://developer.apple.com/programs/enroll/ 애플은 가입 옵션으로 기업과 개인의 두 가지 방법을 제공한다. 개인으로 가입하려면 신분을 증명하기 위한 신용카드 정보를 제공해야 한다. 기업으로 가입하려면 사업자 등록증 및 Dun & Bradstreet의 D-U-N-S 번호와 같이 법인에 대한 정보를 확인해주는 문서를 제출해야 한다. 개인용 멤버 등록은 보통 24시간 이내에 애플로부터 활성화(activation) 이메일이 올 것이다. 기 업용 멤버 등록은 추가적인 확인 사항이 많기 때문에 훨씬 긴 시간이 소요되며, 경우에 따라 수주 또는 수개월이 걸릴 수도 있다. 활성화를 기다리는 동안에도 아래 URL을 통해 애플 아이디와 패스워드를 사용하여 로그인 하면 제한적이긴 해도 접근은 가능하다. URL http://developer.apple.com/membercenter 로그인한 후 화면 상단의 Your Account 탭을 선택하면 개발자 프로그램 가입 상태가 Enrollment Pending 으로 보일 것이다. 또한, 활성화 이메일을 받은 후에 멤버 센터에 접속하면 그림 2-1과 같이 다양한 형태의 자료에 접근할 수 있다. 그림 2-1 2.4 애플 개발자 프로그램에 가입하기 7

2.5 요약 애플 개발자 프로그램에 언제 가입할지 결정하는 것은 ios 9 애플리케이션 개발 초기 단계에 서 중요한 부분이다. 이번 장에서는 프로그램에 가입했을 때 받게 되는 혜택들에 대해 설명하 였고, 개발자 프로그램 멤버십에 언제 가입하면 좋은지와 가입 절차는 어떻게 되는지 간략하 게 살펴보았다. 다음 장에서는 ios 9 SDK와 Xcode 7 개발 환경을 다운로드받아 설치하는 방 법에 대해 알아보자. 8 CHAPTER 2 애플 개발자 프로그램 가입하기

C H A P T E R 3 Xcode 7과 ios 9 SDK설치하기 ios 앱은 ios SDK와 Xcode 7 개발 환경으로 개발된다. Xcode 7은 통합 개발 환경(IDE, Integrated Development Environment)으로 여러분의 ios 애플리케이션에 대한 코딩, 컴파일, 테 스트 및 디버그를 할 수 있다. 또한, Xcode 7에는 인터페이스 빌더(Interface Builder)라는 기능이 있어 UI킷 프레임워크가 제공하는 컴포넌트들을 이용하여 애플리케이션의 사용자 인터페이 스 부분을 그래픽적으로 설계할 수 있도록 해준다. 이번 장에서는 ios 9 SDK와 Xcode 7을 맥 OSX에 설치하는 방법에 대해 살펴보겠다. 3.1 여러분의 맥이 인텔 기반인지 PowerPC 기반인지 확인하기 ios 애플리케이션은 오직 인텔(Intel) 기반의 맥(Mac) OS X 시스템에서만 개발할 수 있다. 혹시 오래된 PowerPC 기반 맥을 가지고 있다면, ios 앱 개발을 위해서 최신 시스템을 구입해야만 한다. 여러분의 맥이 어떤 프로세서를 사용하고 있는지 확실하지 않다면 화면 왼쪽 상단에 있 는 애플 메뉴에서 이 Mac에 관하여(About This Mac) 를 선택한다. 화면에 표시되는 대화상자에서 프로세서(Processor) 로 시작되는 항목을 살펴보자. 그림 3-1은 인텔 기반의 시스템이라는 것을 보여주고 있다. 만약 대화상자에 표시된 항목에 인텔 기반의 프로세서가 아니라고 표시된다면, 아쉽게도 여 러분이 현재 사용하고 있는 시스템은 ios 앱 개발을 할 수 없는 시스템이다. 9

게다가 ios 9 SDK와 Xcode 7 환경은 맥 OS X 10.10.4 또는 그 이후의 맥 OS X 버전이 필요하 다. 만약 이 Mac에 관하여(About This Mac) 대화상자에 표시된 맥 OS X 버전이 10.10.4이거나 그 이상의 최신 버전이 아니라면, 소프트웨어 업데이트...(Software Update...) 항목을 선택하여 적 절한 운영체제로 업그레이드하자. 그림 3-1 3.2 Xcode 7과 ios 9 SDK 설치하기 최신 버전의 Xcode와 ios SDK를 얻는 최고의 방법은 애플 맥 앱 스토어(Apple Mac App Store) 에서 다운로드하는 것이다. 여러분의 맥 OS X 시스템에 있는 앱 스토어(App Store)를 실행하여 검색 박스에 Xcode를 입력한 다음, 무료(Free) 버튼을 클릭하여 설치를 시작하자. 3.3 Xcode 시작하기 SDK와 Xcode가 성공적으로 설치되었다면, 다음 단계는 Xcode를 실행하여 샘플 ios 9 애플 리케이션을 생성하는 것이다. Xcode를 실행하기 위해 파인더(Finder)를 열고 Xcode로 검색하 자. 앞으로는 Xcode를 자주 사용할 것이므로 더 편하고 빠르게 실행할 수 있도록 Xcode 아이 콘을 독(dock)에 드래그 앤 드롭하자. 독으로 옮긴 Xcode 아이콘을 클릭하여 Xcode를 실행시 킨다. Xcode를 처음 실행하면, 추가적인 컴포넌트들을 설치하기 위한 작업을 하게 될 수도 있 다. 그 단계를 따라 진행하는 과정 도중에 여러분의 사용자명(username)과 패스워드(password) 를 입력해야 할 것이다. 여러분의 시스템에서 Xcode가 처음 실행된다면 다음과 같은 환영(Welcome) 화면이 표시될 것 이다. 10 CHAPTER 3 Xcode 7과 ios 9 SDK 설치하기

그림 3-2 3.4 Xcode 설정에 애플 아이디 추가하기 애플 개발자 프로그램에 가입하기로 결정했는지와는 상관없이, 여러분의 애플 아이디를 Xcode에 추가하는 것이 좋다. Xcode를 설치하고 실행했다면, Xcode Preferences... 메뉴를 선택한 후, 이어서 Accounts 탭을 선택한다. Accounts 탭 화면에서, 그림 3-3과 같이 + 버튼을 클릭하여 나타난 메뉴에서 Add Apple ID...를 선택한다. 그림 3-3 3.4 Xcode 설정에 애플 아이디 추가하기 11

입력 패널이 나타나면 여러분의 애플 아이디와 패스워드를 입력하고 Add 버튼을 클릭하여 계 정을 추가하자. 3.5 개발자와 배포 서명 인증서 애플 아이디를 등록했다면, 다음 단계는 서명 인증서(signing identities)를 생성하는 것이다. 현 재의 서명 인증서를 확인하기 위해 Accounts 패널에서 새롭게 추가한 애플 아이디를 선택하고 View Details... 버튼을 클릭하면, 이용할 수 있는 서명 인증서들의 목록이 나타날 것이다. 만약 에 애플 개발자 프로그램에 아직 가입하지 않았다면 ios Development와 Mac Development 인증서만 생성할 수 있을 것이다. ios Development 서명 인증서를 생성하기 위해서 그림 3-4 에 표시된 Create 버튼을 클릭한다. 그림 3-4 애플 개발자 프로그램 등록을 완료했다면 ios Distribution 항목 옆에 있는 Create 버튼도 활성 화될 것이며, 이 버튼을 클릭하면 애플 앱 스토어에 앱을 등록하기 위해 필요한 서명 인증서 를 생성할 수 있다. ios 9 SDK를 설치하고 Xcode 7 실행에도 성공했으니, 이제는 Xcode에 대해 자세히 살펴보자. 12 CHAPTER 3 Xcode 7과 ios 9 SDK 설치하기

C H A P T E R 4 Xcode 7가이드투어 ios 애플리케이션을 개발하고 테스트하는 거의 모든 작업은 Xcode 환경을 이용하여 이루어 진다. 이번 장의 목표는 두 가지다. 주로, Xcode 개발 환경을 이루는 핵심 영역에 대한 개요를 이해하도록 하는 것이며, 이 과정 중에 Hello World 라는 레이블을 표시하도록 설계된 매우 간단한 ios 애플리케이션 프로젝트도 생성해볼 것이다. 이번 장이 끝날 때쯤이면 여러분은 Xcode를 친숙하게 느낄 수 있고, 여러분의 첫 번째 ios 애 플리케이션도 가지게 될 것이다. 4.1 Xcode 7 시작하기 이 책의 모든 예제는 Xcode 7 개발 환경을 기반으로 한다. 최신 ios SDK와 Xcode가 설치되 어 있지 않다면, 3장 Xcode 7과 ios 9 SDK 설치하기 를 참고하기 바란다. 설치가 완료되었다고 가정하고, 앞 장에서 이미 만들어 놓은 독(dock)의 Xcode 아이콘을 실행하거나 맥 OS X 파인 더를 이용하여 애플리케이션(Applications) 폴더에 있는 Xcode를 실행하자. Xcode를 처음 실행할 때, Show this window when Xcode launches 옵션을 끄지 않았다면 디 폴트로 그림 4-1의 화면이 표시된다. 13

그림 4-1 만약 이 화면이 보이지 않을 경우, Window Welcome to Xcode 메뉴 옵션을 선택하면 화면에 표시될 것이다. 이 화면에서 Create a new Xcode project 옵션을 선택한다. 그러면 개발하고자 하는 프로젝트의 타입에 맞는 템플릿(template)을 선택할 수 있는 프로젝트 템플릿 패널을 가진 Xcode 7 프로젝트 윈도우가 표시될 것이다. 그림 4-2 이 화면의 왼쪽 패널은 대상 플랫폼을 선택하기 위하여 ios와 watchos 기반의 기기용 또는 맥 OS X용 애플리케이션을 개발할 수 있는 옵션들을 제공한다. 14 CHAPTER 4 Xcode 7 가이드 투어

ios 아래에 있는 Application을 선택하면 메인 패널에는 애플리케이션의 기초로 사용할 수 있 는 템플릿 목록이 표시될 것이다. 사용할 수 있는 템플릿 옵션들은 다음과 같다. Master-Detail Application 리스트 기반의 애플리케이션을 생성하기 위해서 사용된다. 마스터 리스트의 항목을 선택하면 해당 항목에 대한 디테일 뷰가 표시되며, 리스트로 돌 아오기 위한 뒤로(Back) 버튼도 제공한다. 간혹 헤드라인 리스트에 있는 항목을 선택하면 그에 해당하는 뉴스 기사의 내용이 표시되는 뉴스 애플리케이션에서 이와 비슷한 기술이 사용된 것을 보았을 것이다. 아이패드 기반의 애플리케이션에서 사용될 경우, 이 템플릿은 기본적인 스플릿-뷰(split-view) 구성을 구현한다. Page-based Application 화면에서 페이지를 넘기는 것과 같은 효과를 지원하도록 설계 된 페이지 뷰 컨트롤러를 이용하는 템플릿 애플리케이션을 생성한다. Tabbed Application 탭 바(tab bar)를 가진 템플릿 애플리케이션을 생성한다. 보통 탭 바 는 기기의 하단에 위치하며, 각 항목이 선택될 때마다 서로 다른 화면이 표시된다. 예를 들어, 아이폰에 내장된 전화(Phone) 애플리케이션의 사용자 인터페이스는 즐겨찾기와, 연 락처, 키패드, 그리고 음성 사서함 간의 이동을 할 수 있도록 탭 바를 사용한다. Single View Application 하나의 뷰와 뷰 컨트롤러를 가진 애플리케이션을 위한 기본 템 플릿을 생성한다. Game 2D와 3D 게임 개발을 위한 SpriteKit, SceneKit, OpenGL ES, 메탈(Metal)의 장점 들을 이용할 수 있도록 구성된 프로젝트를 만든다. 간단한 예제를 위해서 Single View Application 템플릿을 선택하고 Next를 클릭하여 프로젝트 옵션 설정 화면으로 이동한다. 4.1 Xcode 7 시작하기 15

그림 4-3 프로젝트 옵션 설정 화면에서 생성될 애플리케이션의 Product Name을 입력하자. 여기서는 HelloWorld 를 입력한다. Organization Name에 입력한 텍스트는 프로젝트를 구성하는 모든 소스 파일의 copyright 주석문에 위치하게 될 것이다. 회사 식별자 1 는 보통 회사 웹 사이트 URL의 역순을 사용한다. 즉, com.mycompany 형식이 된다. 이것은 실제 아이폰이나 아이패드 기기에서 애플리케이션을 테스트하기 위해 필요한 프 로비저닝 프로파일과 인증서를 생성하는 데 사용된다. 이것은 앱 스토어에 앱을 출시할 때 앱 스토어 내에서 앱을 식별하는 유일한 식별자 역할도 한다. ios 생태계에는 여러 종류의 디바이스와 다양한 크기의 화면 사이즈가 있다. 그래서 새로운 프로젝트를 생성할 때 그 프로젝트가 아이폰 디바이스를 대상으로 만들어질 것인지, 아니면 아이패드 디바이스를 대상으로 만들어질 것인지를 지정할 수 있다. 하지만 아이패드 미니와 아이폰 6 플러스 출시로 인해 아이폰과 아이패드 화면 사이즈 차이가 많이 줄어들어서 어느 한 디바이스만을 대상으로 한 프로젝트를 생성한다는 것은 더 이상 의미가 없어졌다. 그보다 더 합리적인 접근 방법은 모든 디바이스 종류와 화면 사이즈를 해결하는 하나의 프로젝트를 생성하는 것이다. 나중에 배우겠지만, 사실 Xcode 7과 ios 9에는 유니버셜(Universal) 애플리케이 션을 쉽게 만들 수 있도록 특별히 설계된 기능들이 많이 포함되어 있다. 이 점을 기억하고 디바 이스(Devices) 메뉴를 Universal로 설정하자. 1 역주 그림 4-3에서 Organization Identifier 16 CHAPTER 4 Xcode 7 가이드 투어

애플은 ios 앱을 개발하기 위한 프로그래밍 언어로 오브젝티브-C(Objective-C)와 스위프트(Swift) 를 지원한다. 이전에 사용하던 오브젝티브-C 언어로 프로그램을 작성하는 것이 여전히 가능 하지만, 애플은 스위프트가 ios 개발의 미래라고 생각하고 있다. 이 책의 모든 예제 코드는 스 위프트로 작성되어 있으므로 Language 메뉴를 Swift 로 설정하고 Next 버튼을 클릭하자. 마지막 화면에서 생성될 새로운 프로젝트를 어디에 위치할지 결정하고 Create를 클릭하자. 새로운 프로젝트가 생성되면 그림 4-4와 같은 Xcode 화면이 표시된다. 그림 4-4 프로젝트를 진행하기 전, Xcode가 과연 우리를 위해 무엇을 해주었는지 확인해보자. 우선, 애 플리케이션 개발에 필요한 여러 파일을 생성해주었다. 이중 일부는 애플리케이션이 동작하도 록 하는 코드를 입력할 스위프트 소스 코드 파일(.swift 확장자를 가짐)이다. 또한, Main.storyboard 파일은 우리가 생성할 사용자 인터페이스 설계를 담고 있으며, 인터페 이스 빌더(Interface Builder)에 의해 사용될 저장 파일이다. LaunchScreen.storyboard라는 이름의 두 번째 인터페이스 빌더 파일도 프로젝트에 추가되었다. 여기에는 애플리케이션이 로딩하는 동안 화면에 표시될 사용자 인터페이스 레이아웃이 포함된다. 4.1 Xcode 7 시작하기 17

.plist 파일 확장자를 가진 파일이 하나 이상 있을 것이다. 이 파일들은 Property List 파일로서 키-값 쌍(key/value pair)의 정보를 저장하고 있다. 예를 들어 Info.plist 파일에는 언어, 실행 파일 이름 및 앱 식별자 등의 항목들과 관련된 리소스 설정이 들어있다. 나중에 자세히 설명하겠지 만, 이 파일은 프로젝트의 기능을 구성하는 속성들이 저장되는 곳이기도 하다. 파일 목록은 메인 Xcode 프로젝트 윈도우의 왼쪽 패널에 있는 프로젝트 내비게이터(Project Navigator)에 표시된 다. 이 패널 상단의 툴바에는 빌드와 실행 히스토리, 브레이크포인트(breakpoints), 컴파일 에러 등의 다른 정보를 표시하는 옵션이 있다. 디폴트로, 가운데 패널은 애플리케이션 프로젝트에 대한 설정들의 일반적인(General) 요약을 표시한다. 여기에는 프로젝트를 생성할 때 지정한 식별자와 대상 기기도 표시되며, 애플리케 이션이 지원하는 기기의 방향, 사용자가 클릭하는 데 사용되는 작은 아이콘, 애플리케이션 실 행 시 화면에 표시되는 실행 화면 이미지(launch screen image) 등을 설정하는 옵션도 제공된다. General 화면뿐만 아니라 Capabilities, Info, Build Settings, Build Phases, 그리고 Build Rules 로 구성된 부가 설정들을 조회하고 수정하기 위한 탭들도 제공된다. 이 책을 진행하면서 몇몇 설정에 대해서는 보다 자세하게 알아볼 것이다. 언제라도 프로젝트 설정 패널로 돌아가려면 왼쪽 패널에서 프로젝트 내비게이터를 선택하고 내비게이터 리스트의 가장 위에 있는 항목(애플 리케이션 이름)을 선택하면 된다. 내비게이터 패널 목록에서 소스 파일이 선택되면, 가운데 패널에 해당 파일의 내용이 표시되 며, 편집도 가능하다. 파일을 별도의 편집창에 열고 싶다면 목록에 있는 파일을 더블 클릭하 면 된다. 4.2 ios 앱 사용자 인터페이스 만들기 ios 앱은 실행되는 환경의 특성상 일반적으로 시각 지향적이다. 예를 들어, 모든 앱의 핵심 요 소에는 사용자들이 애플리케이션과 상호 작용하고 피드백을 받게 될 사용자 인터페이스가 포 함된다. 물론 코드를 작성하여 사용자 인터페이스를 만들고 화면에 배치할 수 있지만, 이렇게 하는 것은 과정이 복잡하며 에러가 생길 확률이 높다. 그렇기 때문에 애플은 캔버스에 컴포넌 트들을 드래그 앤 드롭하고 컴포넌트의 모습과 동작에 대한 속성을 설정하여 사용자 인터페이 스를 시각적으로 만들 수 있게 해주는 인터페이스 빌더(Interface Builder)라는 툴을 제공한다. 앞 절에서 설명했듯이, Xcode는 우리의 프로젝트에 대한 여러 파일들을 생성해주었다. 그중 하 나가.storyboard 확장자를 가진 파일이다. 이것은 인터페이스 빌더 스토리보드 저장 파일이며, 18 CHAPTER 4 Xcode 7 가이드 투어

우리의 HelloWorld 프로젝트에 대한 파일은 Main.storyboard라는 이름으로 되어 있다. 이 파일 을 인터페이스 빌더에 로드하려면 왼쪽에 있는 패널의 파일 목록에서 해당 파일을 선택하면 된다. 인터페이스 빌더는 그림 4-5와 같이 중앙 패널에 나타나게 될 것이다. 그림 4-5 화면의 가운데 패널에 애플리케이션의 사용자 인터페이스가 표시된다. 처음에는 단 하나의 UIView 객체로만 구성된다. 이 UIView 객체는 프로젝트를 생성하는 단계에서 Single View Application 옵션을 선택했을 때 Xcode에 의하여 우리의 설계에 추가된 것이다. 나중에 여러 가지 사용자 인터페이스를 UIView 객체 위로 드래그 앤 드롭하여 HelloWorld의 사용자 인터 페이스를 만들어 갈 것이다. 사용자 인터페이스를 설계한다는 것은 보통 여러 가지 컴포넌트 를 캔버스(canvas)에 드래그 앤 드롭하고, 해당하는 프로퍼티를 설정하는 것이다. 객체 및 프로 퍼티 설정을 보기 위해서는 오른쪽 패널이 보여야 한다. 이 패널을 유틸리티(Utilities) 패널이라고 부르며, Xcode 툴바의 오른쪽에 있는 버튼 중에 오른편에 있는 버튼을 선택하면 패널이 표시 된다. 그림 4-6 4.2 ios 앱 사용자 인터페이스 만들기 19

나타난 유틸리티 패널은 그림 4-7과 같은 화면으로 보일 것이다. 그림 4-7 패널의 윗부분에는 버튼들이 있으며, 이들 버튼을 선택하면 패널의 절반 윗부분에 표시되는 설정 화면들이 변경된다. 디폴트로 파일 인스펙터(File Inspector)가 표시된다. 이 외에 퀵 헬프 인 스펙터(Quick Help Inspector), 아이덴티티 인스펙터(Identity Inspector), 애트리뷰트 인스펙터(Attributes Inspector), 사이즈 인스펙터(Size Inspector)와 커넥션 인스펙터(Connections Inspector) 옵션이 있다. 이 책에서는 이 옵션들을 자주 사용하게 되므로 여기서 잠시 각 옵션이 제공하는 설정이 어떠한 것인지 살펴보도록 하자. 20 CHAPTER 4 Xcode 7 가이드 투어

패널의 아랫부분은 디폴트로 파일 템플릿 라이브러리를 표시한다. 이 패널의 윗부분에는 다 른 카테고리를 표시하기 위한 또 다른 툴바가 위치하고 있다. 이 툴바 옵션에는 타이핑 노력을 덜기 위해 자주 사용하는 소스 코드 조각(code snippet)과 오브젝트 라이브러리(Object Library), 그리고 미디어 라이브러리(Media Library) 등이 있다. 이번 예제에서는 오브젝트 라이브러리가 필요하므로 중앙에 작은 사각형이 들어있는 원 모양의 버튼을 선택한다. 이를 선택하면 사용 자 인터페이스를 만드는 데 사용되는 UI 컴포넌트들이 표시된다. 만약 표시되는 영역이 좁을 경우, 이 툴바 위쪽의 가로선을 드래그하여 UI 컴포넌트가 표시되는 영역을 확장하자. 라이브 러리에 있는 항목들의 레이아웃은 패널 하단의 검색 박스 왼쪽에 위치한 옵션을 클릭하여 한 줄에 객체의 설명과 함께 하나씩 표시되게 할 수 있고 설명 없이 여러 객체가 표시되도록 바 꿀 수도 있다. 4.3 컴포넌트 속성 변경하기 메인 패널에 있는 View가 선택된 상태에서 프로퍼티 패널을 이용하여 뷰의 배경색을 바꿔보 기로 하자. View가 선택된 상태에서 오른쪽 패널에 애트리뷰트 인스펙터(Attributes Inspector, View Utilities Show Attributes Inspector)가 표시되도록 한다. Background 레이블 옆의 흰색으로 채워진 사각형을 클릭하여 Colors 대화상자를 연다. 색 선택 툴을 사용하여 좋아하는 색을 선 택하고 대화상자를 닫는다. 이제 뷰 윈도우가 흰색에서 새롭게 선택한 색으로 변경되었음을 확인할 수 있을 것이다. 4.4 사용자 인터페이스에 객체 추가하기 다음 단계로 Label 객체를 뷰에 추가한다. 오브젝트 라이브러리(Object Library) 패널에 있는 객 체들의 목록을 스크롤하거나 그림 4-8처럼 패널 하단의 검색 상자에 Label이라고 입력하자. 그림 4-8 4.4 사용자 인터페이스에 객체 추가하기 21

레이블(Label) 객체를 찾아 뷰의 정중앙에 오도록 드래그하여 수직/수평 가이드라인이 표 시되게 하자. 해당 위치에 배치하려면 누르고 있는 마우스 버튼을 그 자리에서 뗀다. 우리 는 방금 화면에 UILabel 클래스의 인스턴스를 추가했다. 오브젝트 라이브러리(Object Library) 검색을 취소하기 위하여 검색 상자의 오른쪽 끝에 있는 x 버튼을 클릭하자. 새롭게 추가한 레이블을 선택하고 수평으로 늘려서 현재 뷰의 약 1/3 정도의 폭이 되도록 한다. 레이블이 선 택되어 있는 상태에서 레이블의 텍스트가 레이블 뷰의 중앙에 오도록 애트리뷰트 인스펙터 (View Utilities Show Attributes Inspector)의 중앙 정렬 버튼 2 을 클릭하자. 그림 4-9 현재 레이블에 Label 이라고 쓰여 있는 텍스트를 더블 클릭하고 Hello World 라고 입력한다. 애트리뷰트 인스 펙터 패널에서 폰트 설정 속성을 찾아 폰트 이름 옆에 있는 T 버튼을 클릭하여 폰트 선택 메뉴를 표시한다. System - System으로 되어 있는 Font 설정을 Custom으 로 변경하고 지금보다 더 큰 폰트를 선택하자. 예를 들 어, 그림 4-10은 24 크기인 Georgia bold 글꼴이다. 그림 4-10 2 역주 애트리뷰트 인스펙터의 Alignment 필드에 있는 가운데 버튼 22 CHAPTER 4 Xcode 7 가이드 투어

마지막으로 할 작업은 애플리케이션이 궁극적으로 실행되는 디바이스의 화면 크기와는 상관 없이 레이블이 화면 중앙에 위치하도록 레이아웃 컨스트레인트(constraint)를 추가하는 것이다. 이 작업은 ios의 자동 레이아웃(Auto Layout) 기술을 사용하며 나중에 자세히 설명할 것이다. 이번 예제에서는 간단하게 다음과 같이 하자. 레이블(Label) 객체를 선택하고, 그림 4-11과 같 이 Align 메뉴를 열어 Horizontally in Container와 Vertically in Container 옵션을 선택하고 오프 셋(offset)을 0으로 한 다음에 Add 2 Constraints 버튼을 클릭한다. 그림 4-11 여기까지 했다면 여러분의 뷰(View)는 그림 4-12와 같이 되었을 것이다. 그림 4-12 4.4 사용자 인터페이스에 객체 추가하기 23

프로젝트를 빌드하고 실행하기 전에 Xcode의 도큐먼트 아웃라인(Document Outline) 패널을 잠깐 살펴보자. 이 패널은 디폴트로 인터페이스 빌더의 왼쪽에 표시되며, 인터페이스 빌더 패널의 하단 왼쪽에 작은 버튼(그림 4-13에서 화살표가 가리키는 것)으로 제어된다. 그림 4-13 도큐먼트 아웃라인이 열려 있다면 설계한 사용자 인터페이스 레이아웃과 거기에 적용된 모든 컨스트레인트들에 대한 계층 구조를 보여줄 것이다. 그림 4-14 4.5 Xcode 7에서 ios 9 앱 빌드하고 실행하기 앱이 실행되기 전에 반드시 컴파일을 거쳐야 한다. 성공적으로 컴파일되면 시뮬레이터나 실제 아이폰, 아이패드, 아이팟 터치 기기에서 실행해볼 수 있으나, 이번 장에서는 시뮬레이터에서 실행해보자. Xcode 7 프로젝트 윈도우의 왼쪽 상단에 있는 메뉴(그림 4-15의 C 부분)가 iphone 6 시뮬레이터 옵션으로 선택되도록 하자. A B C D 그림 4-15 24 CHAPTER 4 Xcode 7 가이드 투어

Run 버튼( A )을 클릭하여 코드를 컴파일하고 시뮬레이터에서 앱을 실행한다. Xcode 툴바의 중 앙에 있는 작은 패널( D )에 빌드 과정이 표시되며, 빌드를 실패하게 하는 에러가 발생하면 이에 대한 정보도 표시될 것이다. 빌드가 끝나면 시뮬레이터가 시작되고 HelloWorld 앱이 실행된다. 그림 4-16 인터페이스 빌더에 설계한 사용자 인터페이스가 나타나는 것을 알 수 있다. 정지 버튼(B)을 클 릭하고 타깃(target) 메뉴에서 iphone 6를 ipad Air 2로 변경한 후, 애플리케이션을 다시 실행하 자. 이번에도 마찬가지로 사이즈가 더 커진 화면 중앙에 레이블이 나타날 것이다. 마지막으로, 가로 방향(landscape)에서도 레이아웃이 올바르게 나오는지 확인하기 위해서 Hardware Rotate Left 메뉴를 선택하자. 여기서 우리는 자동 레이아웃 컨스트레인트가 잘 동작한다는 것과 프로 젝트에 대해 유니버셜(Universal) 사용자 인터페이스 설계를 했다는 것을 확인할 수 있다. 4.6 실제 ios 디바이스에서 앱 실행하기 시뮬레이터 환경은 앱을 여러 가지 다양한 ios 기기들에서 테스트할 수 있도록 해주지만, 실 제 ios 기기에서 테스트하는 것도 매우 중요하다. 여러분이 현재 애플 개발자 프로그램에 가입되었는지와는 상관없이, 개발하고 있는 맥 시스템에 실제 기기를 연결하고 Xcode의 실행 타깃에서 연결된 기기를 선택하여 앱을 실행할 수도 있다. 4.6 실제 ios 디바이스에서 앱 실행하기 25

개발 중인 맥 시스템에 기기를 연결하였고 애플리케이션을 테스트할 준비가 되었다면, Xcode 툴바의 디바이스 메뉴에 나타난다. Xcode 툴바에는 ios 시뮬레이터들 중 하나가 디폴트로 설 정되어 있을 것이다(그림 4-17은 iphone 6s 시뮬레이터로 되어 있다). 그림 4-17 이 메뉴를 이용하여 실제 기기를 선택하여 그림 4-18과 같이 디바이스 이름이 표시되도록 한다. 그림 4-18 타깃 디바이스를 선택했다면, 이 기기가 테스트용으로 잠금 해제되었는지 확인하고 실행 버 튼을 클릭한다. 그러면 Xcode는 디바이스에 앱을 설치하고 실행한다. 4.7 디바이스와 시뮬레이터 관리하기 현재 연결된 ios 기기들과 Xcode에서 사용될 수 있도록 구성된 시뮬레이터들은 Window Devices 메뉴 옵션으로 접근할 수 있는 Xcode의 Devices 창에서 확인하고 관리할 수 있다. 예 를 들어, 그림 4-19는 아이폰과 애플 워치를 감지한 일반적인 Device 화면을 보여준다. 26 CHAPTER 4 Xcode 7 가이드 투어

그림 4-19 디폴트로 Xcode 내에는 여러 가지 시뮬레이터들이 설치되어 있다. 다른 종류의 시뮬레이터를 추가하려면 화면의 좌측 하단에 있는 + 버튼을 클릭하면 된다. 이 버튼을 클릭하면, 디바이스 종류와 ios 버전 그리고 시뮬레이터 이름을 구성할 수 있는 다이얼로그가 나타날 것이다. 좌측 하단에 있는 톱니바퀴 모양의 아이콘은 설치된 시뮬레이터를 삭제하거나 이름을 바꾸거 나 Xcode의 실행 타깃 메뉴에서 제거할 수 있도록 해준다. 4.8 빌드 에러 처리하기 사실, 이번 장에서는 어떤 코드를 작성하거나 수정하지 않았기 때문에 에러가 생기지는 않았 을 것이다. 만약 실수로 어떠한 과정을 잘못했다면 빌드가 실패할 것이며, Xcode 환경에서 빌 드 에러에 대한 여러 정보를 확인할 수 있을 것이다. 만약에 어떠한 이유로 빌드를 실패했다면, Xcode 툴바의 상태 윈도우에 Build 라는 표시와 함 께 에러 및 경고 숫자가 표시된다. 또한, Xcode의 왼쪽 패널 3 에는 에러 목록이 표시될 것이다. 이 목록에서 에러를 선택하면 수정이 필요한 코드로 화면이 이동된다. 3 역주 Issue Navigator 패널 4.8 빌드 에러 처리하기 27

4.9 애플리케이션 성능 모니터링하기 Xcode의 또 다른 유용한 기능은 실행 중인 애플리케이션 성능을 모니터링할 수 있다는 것이 다. 이것은 디버그 내비게이터(Debug Navigator)에 표시되는 것으로 확인할 수 있다. Xcode를 실행하면 왼쪽 패널은 디폴트로 프로젝트 내비게 이터(Project Navigator)를 표시한다. 이 패널의 상단에는 여러 옵션이 있다. 왼쪽에서 여섯 번째에 있는 옵션이 디버그 내 비게이터(Debug Navigator)이며, 이를 선택하면 그림 4-20과 같이 나온다. 이 패널은 현재 실행 중인 애플리케이션의 성 능(예를 들어 메모리, CPU 사용, 디스크 접근, 네트워크 활성화, icloud 스토리지 접근)에 대한 실시간 통계를 표시한다. 그림 4-20 표시된 카테고리들 중에 하나를 선택하면, 메인 패널(그림 4-21)은 애플리케이션 성능에 대한 특정 영역의 추가적인 정보를 제공하기 위해서 업데이트된다. 그림 4-21 더 많은 정보를 얻고 싶다면 패널의 우측 상단에 있는 Profile in Instruments 버튼을 클릭하면 된다. 28 CHAPTER 4 Xcode 7 가이드 투어

4.10 사용자 인터페이스 레이아웃 계층 구조의 분해도 Xcode 7은 사용자 인터페이스 레이아웃을 사용자 인터페이스에 대한 뷰 계층 구조가 어떻게 구축되었는지 보여주는 회전 가능한 3D 뷰 표시 기능도 제공한다. 이것은 어떤 뷰 객체가 다 른 뷰 위에 나타나거나 의도하지 않게 표시되는 상황을 파악하는 데 특히 유용하다. 해당 모 드의 뷰 계층 구조에 접근하려면 애플리케이션을 실행하고 그림 4-22에 표시된 Debug View Hierarchy 버튼을 클릭하자. 그림 4-22 이 기능이 활성화되었다면 레이아웃의 3D 분해도가 나타날 것이며, 3D 모드로 전환하기 위해 서는 그림 4-23에서 가리키는 Orient to 3D 버튼을 클릭해야 한다. 그림 4-23 그림 4-24는 이번 장에서 생성한 것보다 약간 더 복잡한 사용자 인터페이스에 대한 예다. 그림 4-24 4.10 사용자 인터페이스 레이아웃 계층 구조의 분해도 29