向下一代iOS应用开发前进,你准备好了吗。
伴随着应用的下载量超过5百万,而且这一数字仍在增长,应用开发可以说是获利颇丰,但是你必须能够脱颖而出。为此,你的应用需要集成高级功能。
通过利用可用的iOS框架,使用现代的Objective-C编程规则的方式,本书将逐步引导你创建高级iOS应用。贯穿全部章节,你将发现70个贴合实际的示例程序,你可以下载这些示例并以此为起点。使用本指南,你将能够创建最前沿的应用,并为发布到App Store做好准备。
我第一次与计算机结缘是15岁那年在荷兰读高等技术学校时,在那里我结识了Sinclair ZX-81。这是一台只有16KB内存的小型计算机,但是它很神奇,我从接触它的第一天起就开始了我的编程生涯。
在1981年,当硬件和软件革命开始时,我又使用了Exidy Sourcer和Commodore 64计算机,很快我又有了我的第一台个人电脑XT(IBM Personal Computer XT)。让我着迷的事实是,你可以通过编程让计算机去精确地执行想要它们做的事情。而且,我能够为这些计算机的系统开发软件。
我开始用汇编语言编程,在一段时间后,我学会了用C、Basic、QuickBasic、Delphi、Pascal、Turbo Pascal、C++、Java、Microsoft VB.NET、Microsoft C#和Objective-C等语言编程。编程成为了我的职业,我热爱这份职业。
不管怎样,像许多程序员一样,由于之前已经获得的知识和技能,我做了分析师、软件工程师和顾问,并最终进入了管理岗位。我的编程时间开始变得越来越少,而这却是我最喜欢做的事。
在我的职业生涯中,我管理和共同成立了几家IT服务公司,并在这些公司中担任项目经理、商业顾问和董事,但是我总是能够在这些项目中找到时间去做一些软件开发工作。
在这些年里,我曾经给一些大公司交付过高端软件解决方案,例如富士胶片公司(Fuji Photo Film)、壳牌公司(Shell)、联合利华公司(Unilever)、普利斯通公司(Bridgestone)、阿尔卡特(Alcate)、理光公司(Ricoh)以及全世界的其他许多公司。我不是图像设计师,并且设计应用的视觉效果并不是我的强项。我向来关注于代码优化和新技术的探索。开发出高阶面向对象的代码而又使用极少内存占用空间的设计仍旧是一项挑战。
在2006年,我决定抛弃荷兰的繁忙生活,搬到法国,在那里我成立了一家软件公司,专注于开发后端的软件解决方案,不久后,也专注于开发iOS应用。
我的专业团队现在为澳大利亚、欧洲和美国的客户开发iPhone和iPad应用,在这一领域内,我们使用最新的SDK和现代程序开发实践,并交付从后端的管理系统到iOS应用的端到端的解决方案。
本书读者对象
这本书适用于想要提高和扩展Objective-C语言编程技能的开发人员、有经验的iOS开发者以及毫无经验的iOS开发新人。
本书需要读者掌握Xcode开发环境的一些基本知识和Objective-C语言开发的基础,这样能够理解本书提供的详细而深入的说明,以及70个编程示例代码。
本书在介绍开发高级iOS应用所涉及的技术方面,对想要加深理解其内容的每一位读者和iOS开发人员都很有价值。本书可以被当作参考书来使用,用以理解iOS SDK的细节。
本书包含编程技巧的详细说明,以及70个示例代码,这也使本书成为大学教授和培训师的理想教材。
本书主要内容:
本书涵盖了开发高级iOS应用所需要的所有主题。所有的说明和代码示例都适用于最新的iOS 7 SDK并经过测试。
本书涵盖以下主题范围:
●创建Personal Library
●UITableView
●Map Kit框架
●Action和Alert概述
●国际化
●在你的应用中使用多媒体
●使用Web服务和XML-JSON解析
●开发FTP客户端
●Core Data框架的实现
●使用通知
●实现E-mail、SMS和拨号功能
●Address Book框架的介绍和使用
●Event Kit框架编程
●Social and Accounts框架的使用
●分析你的应用
●从应用获利和Store Kit框架的使用
●证书和配置文件
●打包和发布你的应用
Interface Builder和Storyboard的用法,以及用户界面设计范例
每个iOS程序员在他们的应用中如何创建用户界面元素都有个人的喜好。在我自己的工作中,我使用代码创建所有的用户界面元素,因为我喜欢这种方式带来的可控性和可扩展性。因此,在这本书的绝大多数的课程中,你将发现使用Interface Build文件。例如,有些开发者更喜欢使用Storyboard,在任何项目中,他们都可以使用Storyboard代替Interface Builder,你也可以如此选择。这本书在两种情况下对开发者来说应该都有用处。
本书篇章结构
本书分为4个部分:
●第Ⅰ部分:开发高级UI
●第Ⅱ部分:网络和数据处理
●第Ⅲ部分:集成应用
●第Ⅳ部分:将应用运用到生产环境中
第Ⅰ部分:开发高级UI包含以下章节:
●第1章:创建Personal Library
●第2章:Tableview进阶指南
●第3章:Map Kit框架
●第4章:ActionView和Alert概述
●第5章:国际化:为全世界构建应用
●第6章:多媒体的使用
第1章以开发包含可重用代码的Personal Library类为开头,你可以将这些代码用作基础框架在每一个应用中使用。在后续的章节中,你将用更多的功能扩展这个Personal Library类。
第2章将教你构建让人眼前一亮的表视图的方法,你将学会如何构建带有下拉即出现搜索条功能的表视图。
第3章全部是关于Map Kit框架的内容。你将了解位置管理器(Location Manager)的概念,并且会以开发为目的扩展GPS模拟器。你将会开发带有自定义标注的群集地图视图。
动作视图和提醒控件是第4章要讨论的主题内容。你将学会如何在应用中实现动作视图和提醒控件,与使用应用的用户交互。
第5章将通过对本地化的技巧的讲解,以及对国际化日期和数字格式的方法的讲解,教会你如何为全世界的用户国际化应用。
第6章全部介绍的是多媒体。你将学会显示和创建PDF文档的有效方法,以及使用不同的可用框架播放和录制音频或者视频。
第Ⅱ部分:网络和数据处理包含以下章节:
●第7章:使用Web服务和解析
●第8章:使用FTP
●第9章:Core Data框架的实现
第7章将教会你如何通过REST或SOAP协议使用Web服务,以及如何使用GET和POST动作将数据发送给这些Web服务。对以XML和JSON格式返回的应答信息的解析将在本章的结尾详细阐述。
第8章将讲解文件传送协议(File Transfer Protocol,FTP)适配iOS应用架构的方法。还将讲解使用Objective-C语言怎样能够编写出简单的FTP客户端。应大多数读者的进一步要求,本章也会讲解基于Objective-C的类编写一条FTP命令的方法。
第9章将讲解所有关于Core Data框架的内容。它阐述了Core Data这个框架的概念,存储方法、实体、关系以及读取数据的方法。
第Ⅲ部分:集成应用包含以下章节:
●第10章:通知
●第11章:发送电子邮件、SMS和拨打电话
●第12章:了解Address Book
●第13章:事件编程
●第14章:与社交媒体集成
第10章将会讲解实现内部通知和外部推送通知的方法。
第11章将会讲解从应用内发送E-mail和短信消息的方法,以及拨打电话的方法。
第12章将会讲解使用Address Book框架读取和写入联系人数据库的方法。你将学会如何请求访问联系人数据库的权限,以及为了使用联系人数据而展示用户界面。
第13章将会讲解从应用内创建和管理事件和提醒的方法。
第14章将会讲解在应用中内部集成Facebook和Twitter的方法。你将学会如何展示用户的Tweet(注:Twitter上用户发送的一条消息)和Facebook用户墙上的留言,以及如何发表留言到Facebook,或者发送Tweet。
第Ⅳ部分:将应用转化为产品包含以下章节:
●第15章:分析应用
●第16章:从应用中获利
●第17章:了解iTunes Connect
●第18章:构建与发布
第15章讲解在应用中实现耗用分析的方法。
第16章讲解从应用中获利的方法。本章包含了深入的阐述和程序内购买的辅助类。本章也涵盖包括像iAd和AdMob在内的Advertisement框架的实现。
第17章讲解使用iTunes Connect为应用的提交作准备的方法。理解provisioning profile、certificate和device这几个名词对能够发布应用来说是至关重要的。
第18章,最后一章,讲解以Ad-Hoc发布版,抑或是以App Store发布版构建和发布应用的方法。
使用本书条件
为了编写iOS应用,你需要下载包含有最新iOS SDK的最新版本的Xcode。你可以在这里下载http://developer.apple.com。
本书约定
为了帮助你最大限度地理解文字内容并提醒你注意正在介绍的内容,我们在本书中使用了大量的规范。
源代码
在练习书中的示例时,可以选择手动输入代码或者使用本书附带的源代码文件。书中用到的所有源代码都可以从www.wrox.com下载。进入站点http://www.wrox.com后,只需要找到本书的书名(使用Search搜索框或书名列表),单击本书详细信息页面上的Download Code链接,就可以得到本书所有的源代码。
下载完代码后,用你喜欢的压缩工具把它解压缩。此外,也可以去Wrox的主下载页面www.wrox.com/dynamic/books/download.aspx 找到本书或Wrox出版的其他书籍的代码。
勘误表
尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果你在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。
要在网站上找到本书的勘误表,可以登录http://www.wrox.com,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/booklist.shtml。
如果在Book Errata页面上没有看到你找出的错误,请进入www.wrox.com/contact/ techsupport.shtml,填写表单,发电子邮件,我们就会检查你的信息,如果是正确的,就在本书的勘误表中粘贴一个消息,我们将在本书的后续版本中采用。
p2p.wrox.com
P2P邮件列表是为作者和读者之间的讨论而建立的。读者可以在p2p.wrox.com上加入P2P论坛。该论坛是一个基于Web的系统,用于传送与Wrox图书相关的信息和相关技术,与其他读者和技术用户交流。该论坛提供了订阅功能,当论坛上有新帖子时,会给你发送你选择的主题。Wrox作者、编辑和其他业界专家和读者都会在这个论坛上进行讨论。
在http://p2p.wrox.com上有许多不同的论坛,帮助读者阅读本书,在读者开发自己的应用程序时,也可以从这个论坛中获益。要加入这个论坛,必须执行下面的步骤:
(1) 进入p2p.wrox.com,单击Register链接。
(2) 阅读其内容,单击Agree按钮。
(3) 提供加入论坛所需的信息及愿意提供的可选信息,单击Submit按钮。
(4) 然后就可以收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。
加入论坛后,就可以发送新信息,回应其他用户的帖子。可以随时在Web上阅读信息。如果希望某个论坛给自己发送新信息,可以在论坛列表中单击该论坛对应的Subscribe to this Forum图标。
对于如何使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作原理,以及许多针对P2P和Wrox图书的常见问题解答。要阅读FAQ,可以单击任意P2P页面上的FAQ链接。
第Ⅰ部分 开发高级UI
第1章 创建Personal Library3
1.1 创建Personal Library4
1.1.1 项目基础知识4
1.1.2 启动新项目5
1.1.3 配置项目6
1.1.4 定义常量8
1.1.5 使用配置文件8
1.1.6 导入头文件10
1.2 注册——登录11
1.2.1 创建注册逻辑12
1.2.2 初始化数据15
1.2.3 初始化应用的默认设置15
1.2.4 创建登录逻辑16
1.2.5 保护密码的安全19
1.2.6 在keychain中存储密码20
1.3 崩溃管理21
1.3.1 理解崩溃21
1.3.2 实现崩溃处理程序22
1.4 本章小结28
第2章 Tableview进阶指南31
2.1 理解UITableView31
2.1.1 datasource和delegate32
2.1.2 滚动36
2.2 构建聊天视图控制器39
2.2.1 构建datasource40
2.2.2 构建聊天数据对象40
2.2.3 构建定制的UITableView控件43
2.2.4 灵活的单元格高度47
2.2.5 开发定制的单元格47
2.2.6 创建聊天用户对象51
2.2.7 融会贯通52
2.3 UITableView的下拉功能58
2.3.1 实现UISearchbar68
2.3.2 添加字母表索引73
2.4 本章小结78
第3章 Map Kit框架79
3.1 模拟iOS设备的位置移动80
3.1.1 为何需要一个GPS模拟器80
3.1.2 创建模拟器80
3.1.3 使用Google Maps创建GPS路线文件84
3.1.4 实现YDLocation-Simulator类88
3.2 使用标记90
3.2.1 创建定制的标记91
3.2.2 响应标记的批注95
3.2.3 标记群集101
3.3 本章小结119
第4章 Action View和Alert概述121
4.1 请求用户输入121
4.2 使用多个选项创建UIActionSheet122
4.3 呈现UIActionSheet126
4.3.1 使用showInView方法来呈现126
4.3.2 使用showFromTabBar方法来呈现126
4.3.3 使用showFromBarButtonItem方法来呈现129
4.3.4 使用showFromRect方法来呈现130
4.3.5 使用showFromToolbar方法来呈现132
4.3.6 用户输入的响应134
4.3.7 处理用户选项134
4.3.8 扩展UIAlertView137
4.3.9 在UIAlertView上添加UITextField137
4.4 本章小结141
第5章 国际化:为全世界构建应用143
5.1 本地化应用143
5.1.1 建立本地化144
5.1.2 本地化Interface Builder文件145
5.1.3 本地化字符串147
5.1.4 本地化图片149
5.1.5 本地化应用的名称152
5.2 使用日期格式152
5.2.1 区域的概念152
5.2.2 日历概述156
5.2.3 以通用方式存储日期158
5.3 使用数字159
5.4 本章小结164
第6章 多媒体的使用165
6.1 可携式文档格式165
6.2 使用UIWebView显示PDF文档166
6.3 Instruments分析工具介绍168
6.4 使用QuickLook显示PDF文档170
6.5 从PDF文档创建缩略图173
6.6 创建PDF文档177
6.7 播放和录制音频181
6.8 相关框架介绍181
6.8.1 AVFoundation框架181
6.8.2 Audio Toolbox框架182
6.8.3 Media Player框架182
6.9 播放来自应用包的音频文件182
6.10 从iTunes库中播放音频187
6.11 播放音频流190
6.12 录制音频193
6.13 播放和录制视频198
6.14 从iTunes库播放视频201
6.15 播放YouTube视频204
6.16 录制视频206
6.17 本章小结209
第Ⅱ部分 网络和数据处理
第7章 使用Web服务和解析213
7.1 为什么需要使用Web服务213
7.2 了解基本网络214
7.2.1 了解协议214
7.2.2 了解操作215
7.2.3 了解响应代码215
7.3 Web服务简介215
7.4 调用HTTP服务216
7.4.1 请求网站216
7.4.2 从HTTP URL下载图片219
7.4.3 使用HTTPS请求安全网站224
7.4.4 使用数据块227
7.5 调用REST服务231
7.5.1 构建请求232
7.5.2 处理响应235
7.5.3 发布到RESTful服务241
7.6 发出SOAP请求248
7.6.1 为请求做准备250
7.6.2 将值传递到操作252
7.6.3 了解安全的SOAP请求257
7.7 更多解析259
7.7.1 逗号分隔值文件260
7.7.2 将XML转换为NSDictionary266
7.8 本章小结269
第8章 使用FTP271
8.1 开发FTP客户端271
8.1.1 编写简单的FTP客户端272
8.1.2 下载远程文件276
8.1.3 创建远程目录278
8.1.4 列出远程目录279
8.1.5 上传文件283
8.1.6 从NSStream中读取284
8.1.7 写入NSStream284
8.1.8 编写复杂的FTP客户端288
8.2 使用FTP客户端296
8.3 本章小结296
第9章 实现Core Data297
9.1 Core Data简介297
9.1.1 为什么应使用Core Data298
9.1.2 托管对象上下文简介298
9.1.3 托管对象模型简介298
9.1.4 托管对象简介298
9.1.5 持久性存储简介299
9.1.6 获取请求简介299
9.2 在应用中使用Core Data299
9.2.1 创建托管对象模型300
9.2.2 创建托管对象302
9.2.3 创建持久性存储303
9.2.4 设置Appdelegate304
9.3 在应用中使用Core Data307
9.3.1 使用托管对象307
9.3.2 获取托管对象308
9.3.3 使用关系313
9.3.4 了解模型更改317
9.4 针对性能进行调优322
9.4.1 优化保存326
9.4.2 配置托管对象上下文327
9.5 通过Core Data实现并发328
9.6 本章小结330
第III部分 集成应用
第10章 通知333
10.1 实现本地通知333
10.1.1 了解本地通知333
10.1.2 创建通知335
10.1.3 接收通知338
10.2 了解推送通知338
10.2.1 配置开发者门户340
10.2.2 获取证书343
10.2.3 通过Urban Airship实现345
10.3 外部通知348
10.3.1 自定义URL模式348
10.3.2 响应URL请求349
10.4 本章小结350
第11章 发送电子邮件、SMS和拨打电话351
11.1 发送电子邮件351
11.1.1 撰写电子邮件352
11.1.2 使用附件354
11.2 发送SMS(文本消息)354
11.2.1 验证SMS是否可用355
11.2.2 撰写文本消息355
11.3 拨打电话号码356
11.4 本章小结357
第12章 了解Address Book359
12.1 Address Book框架简介359
12.2 访问Address Book360
12.2.1 选择联系人360
12.2.2 请求访问权限362
12.2.3 显示并编辑联系人365
12.2.4 创建联系人367
12.2.5 删除联系人369
12.3 以编程方式访问Address Book370
12.3.1 了解Address Book370
12.3.2 了解记录373
12.3.3 了解属性374
12.3.4 以编程方式创建联系人375
12.3.5 以编程方式删除联系人378
12.4 本章小结378
第13章 事件编程379
13.1 Event Kit框架简介379
13.2 使用EventKitUI框架380
13.2.1 请求访问权限380
13.2.2 访问日历382
13.2.3 创建和编辑日历事件384
13.3 以编程方式访问Calendar数据库385
13.3.1 创建事件385
13.3.2 编辑事件390
13.3.3 删除事件390
13.3.4 保持同步390
13.4 使用提醒391
13.4.1 创建提醒391
13.4.2 编辑提醒392
13.4.3 删除提醒392
13.4.4 使用警报392
13.5 本章小结394
第14章 与社交媒体集成395
14.1 社交媒体集成简介395
14.2 了解Accounts框架396
14.3 了解Social框架400
14.3.1 发帖401
14.3.2 检索推文409
14.4 与Facebook集成411
14.5 创建单点登录应用418
14.6 本章小结423
第Ⅳ部分 将应用运用到生产环境中
第15章 分析应用427
15.1 执行技术分析427
15.1.1 应用崩溃428
15.1.2 阻止主线程428
15.1.3 内存泄漏429
15.1.4 使用同步的HTTP请求429
15.1.5 广泛的带宽使用率430
15.1.6 电池消耗434
15.1.7 糟糕的用户界面436
15.2 执行商业分析436
15.3 本章小结437
第16章 从应用中获利439
16.1 获利简介439
16.1.1 付费应用439
16.1.2 广告440
16.1.3 In-App Purchases440
16.1.4 订阅440
16.1.5 潜在客户开发440
16.1.6 加盟销售441
16.2 开发In-App Purchases441
16.2.1 In-App Purchase简介441
16.2.2 注册产品441
16.2.3 选择产品类型441
16.2.4 了解In-App Purchase进程442
16.2.5 实现In-App Purchase443
16.3 从广告中获利464
16.3.1 iAd框架简介464
16.3.2 实现AdMob网络467
16.4 本章小结470
第17章 了解iTunes Connect471
17.1 iOS开发者会员中心472
17.1.1 获取开发者证书472
17.1.2 管理设备476
17.1.3 管理应用479
17.1.4 创建开发配置文件484
17.1.5 创建发布配置文件488
17.2 本章小结491
第18章 构建与发布493
18.1 App Store审核493
18.1.1 了解审核指南493
18.1.2 了解审核流程494
18.1.3 了解拒绝状态496
18.1.4 避免各种常见误区496
18.2 为Ad Hoc发布构建应用497
18.2.1 构建应用497
18.2.2 发布后进行测试499
18.3 为App Store发布构建应用501
18.4 本章小结507
附录A 音频代码509
附录B 图片尺寸513