第1章 UIKit Dynamics 1
1.1 示例程序 1
1.2 UIKit Dynamics介绍 2
1.3 UIKit Dynamics具体实现 2
1.3.1 重力效果 3
1.3.2 碰撞效果 4
1.3.3 附着效果 6
1.3.4 弹跳效果 7
1.3.5 瞬间位移 8
1.3.6 推力效果 8
1.3.7 元素属性 10
1.4 深入了解UIDynamicAnimator和UIDynamicAnimatorDelegate 11
1.5 小结 12
第2章 Core Location、MapKit和Geofencing框架 13
2.1 示例程序 13
2.2 获取用户位置 13
2.2.1 请求和允许 14
2.2.2 检查服务 16
2.2.3 开始位置请求 17
2.2.4 解析和理解位置数据 19
2.2.5 重大变更通知 20
2.2.6 使用GPX文件测试指定位置 20
2.3 显示地图 21
2.3.1 了解坐标系 21
2.3.2 MKMapKit配置和自定义 22
2.3.3 对用户操作的响应 23
2.4 地图标注和覆盖物 24
2.4.1 添加标注 24
2.4.2 显示标准和自定义的标注视图 26
2.4.3 可拖曳的标注视图 29
2.4.4 使用地图覆盖物 30
2.5 地理编码和反向地理编码 31
2.5.1 对地址进行地理编码 31
2.5.2 对位置进行反向地理编码 35
2.6 地理围栏 38
2.6.1 判断区域监控是否可用 38
2.6.2 定义边界 38
2.6.3 监控变更 39
2.7 获取路径 41
2.8 小结 45
第3章 排行榜 47
3.1 示例程序 47
3.1.1 弹出仙人掌 49
3.1.2 仙人掌间的相互影响 51
3.1.3 显示生命值和得分 53
3.1.4 暂停和恢复 54
3.1.5 有关Whack-a-Cac游戏的最后问题 55
3.2 iTunes Connect 55
3.3 Game Center管理器 58
3.4 认证 60
3.4.1 常见的认证错误 60
3.4.2 iOS 6和新的认证系统 62
3.5 提交得分 64
3.5.1 向Whack-a-Cac中添加得分 66
3.5.2 展示排行榜 68
3.5.3 得分挑战 70
3.5.4 深入讨论排行榜 71
3.6 小结 72
第4章 成就系统 73
4.1 iTunes Connect 73
4.2 显示成就进度 75
4.3 Game Center Manager和认证 76
4.4 成就系统缓存 76
4.5 上报成就系统 77
4.6 添加成就关联 79
4.7 进度完成通知栏 80
4.8 成就挑战系统 80
4.9 向Whack-a-Cac添加成就系统 83
4.9.1 是否达成成就 83
4.9.2 部分完成的成就 85
4.9.3 多会话成就 86
4.9.4 携带成就和保存成就精度 87
4.9.5 基于时间的成就 88
4.10 重置成就系统 89
4.11 深入讨论成就系统 90
4.12 小结 91
第5章 Address Book框架初步 93
5.1 支持Address Book很重要 93
5.2 Address Book开发的限制 93
5.3 示例程序 94
5.4 开始实现Address Book并运行 94
5.4.1 从Address Book读取数据 96
5.4.2 从Address Book读取多值数据 97
5.4.3 理解Address Book标签 98
5.4.4 处理地址信息 99
5.5 Address Book图形用户界面 100
5.6 编写代码来创建联系人 105
5.7 小结 107
第6章 Music Libraries框架 109
6.1 示例程序 109
6.2 创建播放引擎 110
6.2.1 注册播放通知 111
6.2.2 用户控制 112
6.2.3 处理状态改变 114
6.2.4 时长和计时器 118
6.2.5 随机播放和循环播放 119
6.3 资源选择器 119
6.4 编程实现选择器 121
6.4.1 播放随机歌曲 121
6.4.2 谓词匹配 123
6.5 小结 124
第7章 实现HealthKit框架 125
7.1 HealthKit介绍 125
7.2 Health.app介绍 126
7.3 示例程序 126
7.4 向项目添加HealthKit 127
7.5 请求授权Health Data 128
7.6 读取HealthKit特征数据 130
7.7 读写基本的HealthKit数据 131
7.8 读写复杂的HealthKit数据 133
7.9 小结 137
第8章 实现HomeKit框架 139
8.1 示例程序 139
8.2 HomeKit介绍 139
8.3 设置HomeKit组件 140
8.3.1 设置开发者账号 140
8.3.2 启用HomeKit功能 141
8.3.3 家庭管理器 142
8.3.4 家庭 143
8.3.5 房间和区域 144
8.3.6 附件 146
8.3.7 服务和服务组 149
8.3.8 动作和动作集 151
8.4 使用HomeKit Accessory Simulator进行测试 152
8.5 使用触发器计划动作 153
8.6 小结 154
第9章 JSON的使用和解析 155
9.1 JSON 155
9.1.1 使用JSON的好处 155
9.1.2 JSON资源 156
9.2 示例程序 156
9.3 访问服务器 156
9.4 从服务器获取JSON 156
9.4.1 创建请求 157
9.4.2 检查反馈 157
9.4.3 解析JSON 158
9.4.4 显示数据 158
9.5 发送消息 160
9.5.1 JSON数据编码 160
9.5.2 向服务器发送JSON数据 162
9.6 小结 163
第10章 通知机制 165
10.1 本地通知和推送通知的区别 165
10.2 示例程序 166
10.3 应用设置 166
10.4 创建Development Push SSL Certificate 168
10.5 开发配置文件 171
10.6 准备自定义声音 175
10.7 注册通知 175
10.8 设置本地通知 176
10.9 接收通知 178
10.10 推送通知服务器 179
10.11 发送推送通知 179
10.12 处理APNs反馈 180
10.13 小结 181
第11章 基于CloudKit的云存储 183
11.1 CloudKit基础 183
11.2 示例程序 184
11.3 设置CloudKit项目 184
11.3.1 账户设置 184
11.3.2 启用iCloud功能 185
11.4 CloudKit概念 186
11.4.1 容器 186
11.4.2 数据库 186
11.4.3 记录 186
11.4.4 记录区域 187
11.4.5 记录标识符 187
11.4.6 asset对象 187
11.5 CloudKit基础操作 188
11.5.1 获取记录 188
11.5.2 创建并保存记录 189
11.5.3 更新和保存记录 191
11.6 订阅和推送 191
11.6.1 推送设置 192
11.6.2 数据变更的订阅 192
11.7 用户发现和管理 193
11.8 在dashboard中管理数据 197
11.9 小结 199
第12章 extension 201
12.1 extension的类型 201
12.1.1 Today 201
12.1.2 Share 202
12.1.3 Action 202
12.1.4 Photo Editing 202
12.1.5 Document Provider 202
12.1.6 Custom Keyboard 202
12.2 理解extension 202
12.3 API限制 203
12.4 创建extension 203
12.5 Today extension 205
12.6 在host app和extension间共享代码和信息 206
12.7 Apple Watch extension 207
12.8 小结 209
第13章 Handoff 211
13.1 示例程序 211
13.2 Handoff基础 211
13.3 实现Handoff 213
13.3.1 创建用户活动 213
13.3.2 继续执行一个活动 215
13.4 在基于文档的应用中实现Handoff 216
13.5 小结 218
第14章 AirPrint 219
14.1 AirPrint打印机 219
14.2 测试AirPrint 220
14.3 打印文本 221
14.3.1 打印信息 222
14.3.2 设置页面范围 222
14.3.3 UISimpleTextPrint-Formatter 223
14.3.4 错误处理 223
14.3.5 开始一个打印任务 224
14.3.6 打印机模拟器反馈 224
14.4 打印中心 225
14.5 打印呈现的HTML 226
14.6 打印PDF 227
14.7 小结 228
第15章 开始使用Core Data 229
15.1 Core Data的选择 230
15.2 示例程序 231
15.3 开始一个Core Data项目 232
15.4 创建托管对象模型 235
15.4.1 创建实体 236
15.4.2 添加特性 236
15.4.3 建立关系 237
15.4.4 自定义托管对象子类 238
15.5 设置默认数据 238
15.5.1 插入新的托管对象 239
15.5.2 其他默认的数据设置方法 240
15.6 显示托管对象 240
15.6.1 创建取回请求 241
15.6.2 根据对象ID取回托管对象 242
15.6.3 显示对象数据 244
15.6.4 使用谓词 245
15.7 取回结果控制器介绍 246
15.7.1 准备取回结果控制器 247
15.7.2 整合表视图和取回结果控制器 248
15.7.3 对CoreData变化的响应 250
15.8 添加、编辑和删除托管对象 253
15.8.1 插入新的托管对象 253
15.8.2 删除托管对象 254
15.8.3 编辑现有的托管对象 255
15.8.4 保存和回滚修改 255
15.9 小结 257
第16章 使用社交框架整合Twitter和Facebook 259
16.1 示例程序 259
16.2 用户登录 260
16.3 使用SLComposeView-Controller 261
16.4 使用自定义界面发送消息 263
16.4.1 向Twitter发送消息 263
16.4.2 向Facebook发送消息 267
16.4.3 创建Facebook应用 267
16.5 访问用户时间轴 272
16.5.1 Twitter 272
16.5.2 Facebook 277
16.6 小结 281
第17章 后台任务处理 283
17.1 示例程序 283
17.2 检查后台运行的可行性 284
17.3 在后台完成任务 285
17.3.1 后台任务标识符 286
17.3.2 超时处理程序 286
17.3.3 完成后台任务 287
17.4 实现后台活动 288
17.4.1 后台活动的类型 288
17.4.2 在后台播放音乐 289
17.5 小结 292
第18章 多线程开发的性能 293
18.1 示例程序 293
18.2 队列介绍 294
18.3 在主线程上运行 295
18.4 在后台运行 296
18.5 在操作队列中运行 298
18.5.1 并发操作 298
18.5.2 串行操作 299
18.5.3 取消操作 301
18.5.4 自定义操作 302
18.6 在调度队列中运行 303
18.6.1 并发调度队列 304
18.6.2 串行调度队列 305
18.7 小结 307
第19章 使用Keychain和TouchlD保护并访问数据 309
19.1 示例程序 310
19.2 创建和使用Keychain 310
19.2.1 创建新的KeychainItemWrapper 310
19.2.2 保存和获取PIN 312
19.2.3 Keychain特性键 312
19.2.4 保护字典对象 313
19.2.5 重置Keychain元素 315
19.2.6 在应用间共享Keychain 315
19.2.7 Keychain错误代码 316
19.3 实现Touch ID 317
19.4 小结 318
第20章 处理图片和过滤器 319
20.1 示例程序 319
20.2 基本图片数据和显示 319
20.2.1 实例化图片 319
20.2.2 显示图片 321
20.2.3 使用图片选择器 323
20.2.4 调整图片尺寸 325
20.3 Core Image过滤器 326
20.3.1 过滤器类别和过滤器 326
20.3.2 过滤器特性 328
20.3.3 初始化图片 331
20.3.4 渲染过滤后的图片 331
20.3.5 链式过滤 332
20.4 特征检测 333
20.4.1 创建人脸检测器 334
20.4.2 处理人脸特征 334
20.5 小结 336
第21章 集合视图 337
21.1 示例程序 337
21.2 集合视图介绍 338
21.2.1 创建一个集合视图 338
21.2.2 为集合视图实现数据源方法 340
21.2.3 实现集合视图委托方法 342
21.3 定制集合视图和流布局 344
21.3.1 基础定制 344
21.3.2 修饰视图 346
21.4 创建定制布局 349
21.5 集合视图动画 353
21.5.1 集合视图布局切换 354
21.5.2 集合视图布局动画 355
21.5.3 集合视图变化动画 357
21.6 小结 357
第22章 TextKit介绍 359
22.1 示例程序 359
22.2 NSLayoutManager介绍 360
22.3 动态链接检测 362
22.4 检测点击 363
22.5 路径排除 364
22.6 Content Specific Highlighting特性 365
22.7 使用Dynamic Type更改字体设置 370
22.8 小结 371
第23章 手势识别 373
23.1 手势识别的类型 373
23.2 基础手势识别的用法 374
23.3 示例程序介绍 375
23.3.1 点击识别动作 375
23.3.2 捏压识别动作 377
23.4 在一个视图中识别多个手势 378
23.4.1 手势识别的工作原理 380
23.4.2 在一个视图中识别多个手势:Redux 381
23.4.3 请求手势识别失败 382
23.5 定制UIGestureRecognizer子类 384
23.6 小结 384
第24章 访问照片库 385
24.1 示例程序 385
24.2 Photos框架 386
24.3 使用资源集合和资源 386
24.3.1 权限 387
24.3.2 资源集合 388
24.3.3 资源 391
24.4 照片库中的编辑操作 393
24.4.1 编辑资源集合 393
24.4.2 编辑资源 395
24.5 处理照片流 398
24.6 小结 398
第25章 Passbook和PassKit 399
25.1 示例程序 400
25.2 设计通行证 400
25.2.1 通行证的类型 400
25.2.2 通行证布局——登机牌 401
25.2.3 通行证布局——优惠券 401
25.2.4 通行证布局——入场券 402
25.2.5 通行证布局——通用卡 402
25.2.6 通行证布局——购物卡 402
25.2.7 通行证的显示 403
25.3 创建通行证 404
25.3.1 基础通行证标识 405
25.3.2 通行证相关信息 405
25.3.3 条形码识别 406
25.3.4 通行证视觉外观信息 406
25.3.5 通行证区域 407
25.4 通行证的签名和封装 409
25.4.1 创建Pass Type ID 409
25.4.2 创建通行证签名证书 411
25.4.3 创建清单 415
25.4.4 通行证的签名和封装 415
25.4.5 测试通行证 416
25.4.6 具体应用中的通行证交互 417
25.5 自动更新通行证 426
25.6 小结 426
第26章 调试和工具 427
26.1 调试 427
26.1.1 第一个计算机错误 427
26.1.2 Xcode基础调试 428
26.2 断点 430
26.2.1 定制断点 430
26.2.2 标志断点和异常断点 431
26.2.3 断点范围 432
26.3 使用调试器 432
26.4 工具 433
26.4.1 工具界面 434
26.4.2 Time Profiler工具 436
26.4.3 Leaks工具 438
26.4.4 进一步了解调试工具 440
26.5 小结 440