第1章 特定于设备的开发 1
1.1访问基本的设备信息 1
1.2添加设备能力限制 2
1.2.1用户权限描述 3
1.2.2其他常用的Info.plist键 4
1.3秘诀:检查设备接近度和电池状态 4
1.3.1启用和禁用接近度传感器 5
1.3.2监测电池状态 5
1.3.3检测Retina支持 8
1.4秘诀:取回额外的设备信息 8
1.5秘诀:使用加速能力“向上”定位 10
1.6处理基本的方向 12
1.7同步获取当前的加速计角度 13
1.7.1通过加速计计算方向 14
1.7.2计算相对角度 14
1.8使用加速度移动屏幕上的对象 15
1.9秘诀:基于加速计的滚动视图 18
1.10秘诀:Core Motion基础 21
1.10.1测试传感器 22
1.10.2处理程序块 22
1.11秘诀:获取和使用设备姿势 26
1.12使用运动事件检测晃动 27
1.13使用外部屏幕 29
1.13.1检测屏幕 29
1.13.2获取屏幕分辨率 30
1.13.3设置Video Out 30
1.13.4添加显示器链接 31
1.13.5过扫描补偿 31
1.13.6VIDEOkit 31
1.14跟踪用户 35
1.15还有一件事:检查可用的磁盘空间 36
1.16小结 37
第2章 文档和数据共享 39
2.1秘诀:处理统一类型标识符 39
2.1.1通过文件扩展名确定UTI 40
2.1.2从UTI转向扩展名或MIME类型 41
2.1.3测试顺应性 42
2.1.4获取顺应性列表 43
2.2秘诀:访问系统粘贴板 45
2.2.1存储数据 46
2.2.2存储公共类型 46
2.2.3获取数据 47
2.2.4被动更新粘贴板 47
2.3秘诀:监测Documents文件夹 48
2.3.1支持文档文件共享 48
2.3.2用户控制 49
2.3.3Xcode访问 49
2.3.4扫描新文档 50
2.4秘诀:展示活动视图控制器 54
2.4.1展示活动视图控制器 55
2.4.2活动项目源 55
2.4.3项目提供者 55
2.4.4项目源回调 56
2.4.5添加服务 57
2.4.6项目和服务 62
2.4.7支持HTML电子邮件 63
2.4.8排除活动 63
2.5秘诀:Quick Look预览控制器 63
2.6秘诀:添加QuickLook动作 66
2.7秘诀:使用文档交互控制器 68
2.7.1创建文档交互控制器实例 69
2.7.2文档交互控制器属性 70
2.7.3提供文档Quick Look支持 70
2.7.4检查打开菜单 71
2.8秘诀:声明文档支持 75
2.8.1创建自定义的文档类型 76
2.8.2实现文档支持 77
2.9秘诀:创建基于URL的服务 81
2.9.1声明模式 82
2.9.2测试URL 83
2.9.3添加处理程序方法 83
2.10小结 84
第3章 Core Text 85
3.1 Core Text和iOS 85
3.1.1属性 85
3.1.2 C语言与Objective-C 86
3.1.3 UIKit 87
3.2属性化字符串 87
3.3秘诀:基本的属性化字符串 90
3.4秘诀:可变的属性化字符串 91
3.5响应者样式的神秘性 94
3.6秘诀:属性栈 96
3.7秘诀:使用伪HTML创建属性化文本 101
3.8利用Core Text绘图 105
3.9创建图像图案 108
3.10秘诀:在滚动视图上绘制Core Text 110
3.11秘诀:探讨字体 112
3.12向应用程序中添加自定义的字体 114
3.13秘诀:把Core Text进行分页处理 114
3.14秘诀:把属性化文本绘制到PDF中 116
3.15秘诀:大电话文本 117
3.16小结 121
第4章 几何学 123
4.1秘诀:获取贝塞尔路径中的点 123
4.2稀释点 125
4.3秘诀:平滑绘图 128
4.4秘诀:基于速度的笔画 130
4.5秘诀:限制贝塞尔路径 132
4.6秘诀:放入路径 137
4.7处理曲线 139
4.8秘诀:沿着贝塞尔路径移动项目 143
4.9秘诀:沿着贝塞尔路径绘制属性化文本 145
4.10秘诀:视图变换 148
4.10.1基本变换 149
4.10.2揭密 149
4.10.3获取变换值 150
4.10.4设置变换值 151
4.10.5获取视图点的位置 152
4.11秘诀:测试视图相交 154
4.12小结 159
第5章 联网 161
5.1秘诀:安全凭证存储 161
5.2秘诀:输入凭证 165
5.3秘诀:处理身份验证质询 170
5.4秘诀:上传数据 172
5.5秘诀:构建简单的Web服务器 176
5.6秘诀:OAuth实用程序 180
5.7秘诀:OAuth过程 184
5.7.1第1步:从API提供商请求令牌 184
5.7.2第2步:获取和存储令牌 184
5.7.3第3步:请求用户访问 185
5.7.4第4步:获取一个OAuth验证者令牌 185
5.7.5第5步:利用访问令牌进行身份验证 187
5.8小结 191
第6章 图像 193
6.1图像源 193
6.2读取图像数据 195
6.2.1 UIImage类的便捷方法 195
6.2.2查找沙盒中的图像 197
6.2.3从URL加载图像 198
6.2.4从资产库中读取数据 198
6.3秘诀:放入和填充图像 199
6.4秘诀:旋转图像 203
6.5秘诀:处理位图表示 206
6.5.1坐标系统之间的转换 206
6.5.2查找数据 207
6.5.3在图像数据与位图数据之间转换 208
6.6秘诀:基本的图像处理 210
6.7秘诀:图像卷积 212
6.8秘诀:基本的Core Image处理 215
6.9抓取基于视图的截屏图 217
6.10绘制到PDF文件中 218
6.11秘诀:倒影 219
6.12秘诀:发射器 222
6.13小结 224
第7章 照相机 225
7.1秘诀:拍摄照片 225
7.1.1设置选择器 225
7.1.2显示图像 226
7.1.3把图像保存到相册 227
7.2秘诀:启用闪光灯 229
7.3秘诀:访问AVFoundation照相机 231
7.3.1需要照相机 231
7.3.2查询和获取照相机 232
7.3.3建立照相机会话 233
7.3.4切换照相机 235
7.3.5照相机预览 236
7.3.6布置照相机预览 236
7.3.7照相机图像助手 237
7.4秘诀:EXIF 238
7.4.1 ImageIO 238
7.4.2查询元数据 239
7.4.3包装UIImage 240
7.5图像方位 243
7.6秘诀:Core Image过滤 245
7.7秘诀:Core Image人脸检测 247
7.8秘诀:对实时馈送进行抽样 253
7.9小结 257
第8章 音频 259
8.1秘诀:利用AVAudioPlayer播放音频 259
8.1.1初始化音频播放器 259
8.1.2监测音频级别 260
8.1.3播放进度和擦除 261
8.1.4捕获播放的结束 262
8.2秘诀:循环音频 267
8.3秘诀:处理音频中断 270
8.4秘诀:录制音频 273
8.5秘诀:利用Audio Queues录制音频 279
8.6秘诀:利用MPMediaPickerController选择音频 286
8.7创建媒体查询 288
8.7.1构建查询 288
8.7.2使用谓词 289
8.8秘诀:使用MPMusicPlayerController 290
8.9小结 294
第9章 连接到Address Book 295
9.1 AddressBook框架 295
9.1.1 AddressBookUI 295
9.1.2 AddressBook及其数据库 296
9.1.3记录 296
9.1.4自定义的ABStandin类 297
9.1.5查询Address Book 301
9.1.6包装AddressBook框架 301
9.1.7使用记录函数 302
9.1.8获取和设置字符串 302
9.1.9处理日期属性 304
9.1.10多值记录属性 305
9.1.11存储多值数据 309
9.1.12处理多值项目 310
9.1.13地址、社会概况和即时消息属性 311
9.1.14Address Book中的图像 313
9.1.15创建、添加和删除记录 314
9.1.16搜索联系人 316
9.1.17对联系人排序 317
9.1.18处理群组 317
9.1.19ABContact、ABGroup和ABContactsHelper 320
9.2秘诀:搜索Address Book 321
9.3秘诀:访问联系人图像数据 323
9.4秘诀:选择人员 325
9.5秘诀:限制联系人选择器属性 327
9.6秘诀:添加和删除联系人 329
9.7修改和查看单独的联系人 332
9.7.1用户编辑 332
9.7.2委托方法 333
9.8秘诀:“未知的”人员控制器 333
9.9小结 336
第10章 位置 337
10.1授权Core Location 337
10.1.1测试位置服务 337
10.1.2重置位置和隐私 338
10.1.3检查用户权限 339
10.1.4测试Core Location特性 340
10.2秘诀:Core Location简介 341
10.2.1位置属性 343
10.2.2跟踪速度 344
10.3秘诀:地理围栏 344
10.4秘诀:使用行进方向值跟踪“North” 347
10.5秘诀:前向和反向地理编码 349
10.6秘诀:查看位置 352
10.7秘诀:用户位置注释 356
10.8创建地图注释 359
10.8.1创建、添加和删除注释 360
10.8.2注释视图 360
10.8.3自定义注释视图 361
10.8.4响应注释按钮的点按动作 362
10.9小结 365
第11章 GameKit 367
11.1启用Game Center 367
11.2秘诀:登录到Game Center 369
11.3设计排行榜和成绩 370
11.3.1构建排行榜 370
11.3.2创建成绩 372
11.4秘诀:访问排行榜 373
11.5秘诀:显示Game Center视图控制器 375
11.6秘诀:提交分数 377
11.7秘诀:检查成绩 378
11.8秘诀:把成绩报告给Game Center 379
11.9秘诀:多玩家配对安排 381
11.10秘诀:响应配对安排者 382
11.11秘诀:创建邀请处理程序 384
11.12管理配对状态 385
11.13秘诀:处理玩家状态改变 386
11.14秘诀:获取玩家名字 387
11.14.1比较玩家 388
11.14.2获取本地玩家 388
11.15游戏玩法 389
11.16序列化数据 389
11.17秘诀:同步数据 393
11.18秘诀:逐回合地安排配对 395
11.19秘诀:响应基于回合的邀请 397
11.20秘诀:加载配对 398
11.21秘诀:响应玩法 400
11.22秘诀:结束游戏玩法 404
11.23删除配对 407
11.24秘诀:Game Center语音 409
11.24.1测试聊天可用性 409
11.24.2建立播放和录制音频会话 409
11.24.3创建语音聊天 411
11.24.4开始和停止聊天 411
11.24.5聊天状态监测 411
11.24.6实现聊天按钮 412
11.24.7控制音量 413
11.25GameKit对等服务 413
11.25.1 GameKit Bluetooth的局限性 414
11.25.2 Bonjour会话 414
11.25.3服务器、客户和对等方 415
11.25.4对等连接过程 415
11.25.5发送和接收数据 418
11.25.6状态改变 419
11.25.7创建GameKit助手 420
11.25.8对等语音聊天 420
11.25.9实现语音聊天 420
11.25.10创建“联机”GameKit连接 421
11.26小结 423
第12章 StoreKit 425
12.1初识StoreKit 425
12.1.1履约 425
12.1.2StoreKit开发悖论 426
12.1.3开发和测试 427
12.1.4提交 427
12.2创建测试账户 427
12.3创建新的应用程序中的购买项目 428
12.3.1填写细节区域 429
12.3.2添加本地化描述 430
12.3.3填写定价区域 431
12.3.4提供购买GUI截屏图 431
12.3.5提交应用程序中的购买产品以进行评审 432
12.4构建店面GUI 432
12.5购买项目 434
12.5.1签出iTunes账户以进行测试 435
12.5.2在购买后重新获得程序控制 435
12.5.3注册购买 438
12.5.4恢复购买 438
12.5.5购买多个项目 439
12.5.6处理注册购买中的延迟 439
12.6验证收据 439
12.7小结 442
第13章 推送通知 443
13.1推送通知简介 443
13.1.1推送的工作原理 444
13.1.2多个提供者支持 444
13.1.3安全 445
13.1.4推送限制 445
13.1.5推送通知与本地通知 446
13.2配置推送 446
13.2.1生成新的应用程序标识符 446
13.2.2生成SSL证书 447
13.2.3特定于推送的配置 448
13.2.4创建推送兼容的应用程序 449
13.3注册应用程序 449
13.3.1获取设备令牌 449
13.3.2处理令牌请求错误 450
13.3.3响应通知 450
13.4秘诀:推送客户骨架 452
13.5构建通知有效载荷 457
13.5.1本地化的提醒 458
13.5.2从字典转换为JSON 458
13.5.3自定义的数据 458
13.5.4在启动时接收数据 458
13.6秘诀:发送通知 459
13.6.1沙盒和生产 460
13.7反馈服务 464
13.8设计推送 465
13.9小结 466