作译者 Maurice Sharp是一位开发老手,拥有21年在大公司(苹果公司和Palm公司)和小公司培训、开展和管理移动开发的经验。日常工作之外,他为新成立的移动项目做咨询,并运营自己的咨询公司KLM Apps。
Erica Sadun是一位畅销书作者,曾编著、合著、参与贡献出版了几十本有关移动开发和相关主题的书籍,包括广受欢迎的The Core iOS 6 Developer's Cookbook、iOS Auto Layout Demystifi ed、iOS Drawing:Pratical UIKit Solutions 以及Talking to Siri 。她还在(The Unoffi cial Apple Weblog)TUAW.com上写博客。
Rod Strougo是一位作家、讲师和开发人员,他花了15年时间为IBM和AT&T编写企业软件。目前,Rod追随自己对游戏开发和教学的热情,在bignerdranch公司(www.bignerdranch.com)担任iOS培训师。
前言 “移动互联网是未来”是近来越来越常听到的短语。提到移动互联网时,没有什么设备比得过苹果公司的用户友好性更好。
若你想要将iOS开发作为自己的技能集合的技能之一,需要从何处开始呢?需要以及选择哪些资源呢?这取决于你的学习方式。本书涵盖的为实际操作的内容,目的是让你尽可能快地操作。首先以小事情起步,然后会基于你已知的内容,进一步积累知识。
结果就形成了这样一本书,它用一种易于消化的格式向你传授编写应用程序所需的技能。你可以按照自己喜欢的速度来学习,快慢都行。当正在创建应用程序时,可以回头翻阅本书的特定部分,温习相关知识。
那么,请找个舒适的位置,将Mac和iOS设备放置身旁,开始深入钻研!
本书学习前提
在进一步学习iOS开发之前,你需要:
一台Mac电脑——运行当前或上一版本Mac OS操作系统的现代Mac电脑——当本书写作时,最新的版本是Mac OX Mountain Lion (v.10.8),Mavericks即将推出(本书未采用)。Mountain Lion之前的版本是Mac OS X Lion (v.10.7)。最理想情况是,你的Mac电脑使用最新版本的OS,拥有至少8GB的RAM,以及大量磁盘空间。
一台iOS设备——尽管Xcode包含能用于开发应用程序的桌面模拟器,但你仍需要在实际设备上运行应用程序以确保它能正确运行。使用目标客户可能使用的设备型号,有助于确保应用程序能够在这些设备上良好地运行。
确保Internet连入——下载与开发相关的资源。某些时候,可能还需要测试应用程序的无线功能。而且当然,你会想要向App Store提交你的应用。
熟悉Objective-C——你需要使用Objective-C来创建面向iOS的本地应用程序。Objective-C语言基于ANSI C,带有面向对象的扩展,这意味着你还需要了解一些C语言的知识。如果曾使用Java或C++语言进行编程,并且熟悉C语言,你会发现使用Objective-C非常简单。在第2章“Objective-C新手训练营”中,对Objective-C语言进行了简短介绍,但更清晰的理解会有助于你更快地学习。
你还需要Xcode,这是开发工具,以及苹果开发者账号,这会在第1章“初识iOS SDK”中介绍。
iOS开发路线图
一本书并不能满足每个人的所有需求。尽管我们可以尝试,但是如果我们将你所需了解的所有知识都打包到这本书中,你也不可能全部掌握。确实,针对Mac和iOS平台进行开发需要你了解很多知识。如果刚刚起步,并且没有任何编程经验,你的第一步行动应是选修一门大学级别的C语言编程课程。
在了解C语言以及如何使用编译器(在基本的C语言课程中会学到)后,接下来的部分应该很简单。基于这些,你可以立即开展对Objective-C的学习,并且探索如何使用它并依靠Cocoa框架来编程。图P-1所示的流程图展示了Pearson Education出版的一些关键书目,能向你提供成为熟练iOS开发者所需的训练。
图P-1 iOS开发路线图
在了解C语言之后,学习Objective-C语言编程有多个途径。如果想获得对这门语言的深入理解,可以阅读苹果公司的文档,或者挑选以下书籍中的一本:
Objective-C Programming: The Big Nerd Ranch Guide by Aaron Hillegass (Big Nerd Ranch, 2012)
Learning Objective-C: A Hands-on Guide to Objective-C for Mac and iOS Developers by Robert Clair (Addison-Wesley, 2011)
Programming in Objective-C 2.0, fourth edition,by Stephen Kochan (Addison-Wesley, 2012)
有这门语言作为后盾,接下来就是学习Cocoa和开发者工具,也被称作Xcode。对于这些知识,你有若干不同的选择。你又一次可以参考关于Cocoa和Xcode的苹果公司提供的文档。请参阅Cocoa Fundamentals Guide(http://developer.apple.com/mac/l ... n/Cocoa/Conceptual/ CocoaFundamentals/CocoaFundamentals.pdf),初步学习Cocoa。对于Xcode,参见A Tour of Xcode (http://developer.apple.com/mac/l ... nceptual/A_Tour_of_ Xcode/ A_Tour_of_Xcode.pdf)。如果更喜欢书籍,也可以向最牛的人学习。Aaron Hillegass,亚特兰大州的Big Nerd Ranch(www.bignerdranch.com)的创始人,是Objective-C Programming: The Big Nerd Ranch Guide一书第2版的合著者,也是很快要出第4版的Cocoa Programming for Mac OS一书的作者。Aaron所著的书在Mac开发者圈子评价很高,并且是你在cocoa-dev邮件列表中可以看到的推荐书目。至于Xcode的更多知识,在学完Sams Publishing出版,由Firiz Anderson所著的Xcode 4 Unleashed后,你就已经学得足够深入了。
. 注意:
市面上有很多其他出版商出版的其他书籍,包括最畅销的Beginning iPhone 4 Development,该书由Dave Mark、Jack Nutting和Jeff LaMarche所著(Apress,2011)。如果完全是编程新手,另外一本值得挑选的书是Beginning Mac Programming,由Tim Isted所著(Pragmatic Programmers, 2011)。不要将自己限制于一本书或一家出版商。正如你通过与不同的开发者交谈可以学到很多东西,你可以从市场上别的书籍中学到很多技巧和窍门。
要想真正掌握iOS开发,你需要查看很多信息来源:书籍、博客、邮件列表、苹果公司的文档,以及所有这些当中最好的一种——会议。如果得到了参加WWDC(苹果公司的Worldwide Developer Conference,世界开发者大会)的机会,你会了解我们所说的是什么。你在会议上与别的开发者交谈所花费的时间,以及在WWDC的案例中与苹果工程师交流的时间,是特别值得的,如果你是个认真的开发者的话。
本书组织结构
这本书的目标是使你能够针对iOS手持设备和平板设备创建iOS应用程序。它假定你熟悉Objective-C语言但是对iOS开发一无所知(尽管第2章有新手训练营,但是你会发现,如果对这门语言更加熟悉的话,从这本书中学习知识会更加轻松)。每一章会介绍一些新概念,并且如果合适的话,这些概念会基于你在前面章节所学的知识。
大多数章节除了它们的核心内容之外还涵盖了额外的材料。额外的材料未必适合特定章节的要点,但是创建应用程序时很重要。额外的材料向你展示如何使用特定的UI元素,提供一些技巧与窍门,解释代码实践,并且提供其他的有用信息。
以下是每一章的摘要:
第1章,“初识iOS SDK”——了解创建iOS应用程序时所用的工具、程序以及设备。你首先要安装Xcode,并且还要了解苹果开发者计划以及如何报名。最后两节在你设计应用程序时有用。其中第一节涵盖了手持设备的限制在各种各样的iOS技术中的体现,而最后一节介绍了型号之间的差异。
第2章,“Objective-C新手训练营”——Xcode项目是包含应用程序的代码、资源和元信息的容器。在这一章,你将创建第一个项目。你还会得到对Objective-C—应用程序开发所用的语言——的一次快速复习。
第3章,“故事板介绍”——应用程序的用户能够看到的只有界面。你可能用不可思议的代码来实现应用程序的行为,但是用户只能看到效果。在这一章,你要使用故事板,一种一次性看到应用程序的所有屏幕的方式,并开始创建应用程序界面。你要添加屏幕,并将它们连接到一起,并与代码连接起来。你从这一章得到的这些技巧是创建iOS应用程序的核心部分。
第4章,“自动布局”——迄今为止,iOS手持设备有两种不同的屏幕尺寸,并且对于每种屏幕尺寸有两种不同的屏幕方向。支持4种不同的屏幕会很有挑战性。在这一章,你将学习并使用自动布局——苹果公司的基于约束的布局引擎,以更简单地支持多种屏幕尺寸。你甚至在屏幕旋转时使用它来修改布局。
第5章,“本地化”——iOS设备至少在155个国家有售。当学习这一章时,你将创建一个支持三种语言以及很多国家的应用程序。你将基于第4章构建应用程序,使用自动布局来为不同的本地化字符长度调整界面元素。你还要实现特定于语言和国家的日期与时间格式,还有从左向右和从右向左的书写方向。
第6章,“滚动”——在典型情况下,你想要显示的信息可能会超过手持设备的屏幕大小。有时,最好的导航方式是在内容中滚动。从最简单的用例开始,你使用自带的滚动视图UI元素,从简单地让屏幕弹跳,直到在多个元素中滚动。你可以添加拖动和缩放功能,并且基于滚动位置显示元素编号。
第7章,“导航控制器I:层次结构和标签”——导航复杂信息可能非常有挑战性,特别是在手机的相对较小的屏幕上。iOS提供了导航控制器来简化这种工作。首先使用UINavigationController在信息层次结构中移动,然后使用更加先进的特性来提供进一步的定制。下一步,使用标签栏在不同类型的信息之间移动,并且学习如何操作故事版外的视图控制器。
第8章,“表视图I:基础知识”——表视图是iPhone和iPad应用程序的重要部分。在学习它们如何工作之后,你将创建汽车表格,然后实现元素的添加和删除操作。你再深入一点,使用表格的一个变种来处理汽车详细信息。做这件事时,你使用选择器视图来表示日期,使用协议在场景之间传递数据和状态。
第9章,“Core Data介绍”——Core Data实现了只需要做很少的工作即可使用完整的数据管理功能。在这一章,你将为应用程序创建Core Data模型,并且使用这些数据来表示汽车列表和汽车详细信息。下一步,使用自带的对象进一步简化管理表视图的工作。你还会学习将已有项目改为使用Core Data的办法,并且你会更加熟悉常见的错误。
第10章,“表视图II:高级话题”——表视图有一些高级特性可以让应用程序锦上添花。在这一章中,你会实现不同的特性,包括自定义表单元、表格段、排序、内容索引以及搜索。你还将学习UISegmentedControl,调试的更多相关知识,以及使用#define的更好方法。
第11章,“导航控制器II:拆分视图和iPad”——iPad应用程序通常需要与iPhone应用程序不同的设计方式。在本章,你将创建一个通用的应用程序,即在iPhone和iPad上都能运行的应用程序。你将使用iPad专用的UISplitViewController构建单独的界面。你将学习如何将iPhone视图适配到iPad,以及如何选择何时使用它们,何时创建新的东西。此外,你将实现单例,一种特殊的只能有一个实例的对象,你还将学习访问器方法的用处,并且实现自定义转场动画。
第12章,“触摸基础”——用户所做的几乎所有事情都涉及一根或多根手指的手势。一些特性,如按钮,很容易添加触摸功能。其他控件需要更多工作。在这一章,你将学习手势识别器的基础知识,并且为汽车详情视图添加轻扫手势。然后你将更加深入,创建自定义的手势识别器。最后,你将添加一个可拖曳视图。
第13章,“Block介绍”——从为视图添加动画到错误响应器,代码块是使用系统调用的一种重要工具。你将学习如何创建和使用代码块,以及用它们为视图增加脉动。你还会学习变量的作用域、只读变量与可修改变量。最后,你将用代码块代替协议。
第14章,“Instruments和调试”——应用程序开发中有两个定律:最初的实现很少能像你所预期的那样执行,并且总是会有bug。在这一章中,首先使用测量仪器修复性能问题,测量仪器是一种检查性能、内存占用,以及应用程序中其他重要部分的工具。下一步,你将学习调试器中断点的一些高级特性。然后,你将同时使用这两种工具来解决最困难类型的bug。在这一章中,你还会学到一种发现和修复问题的过程,以及使用后台任务的一种方式。
第15章,“部署应用程序”——在最后一章,你会将应用程序从你的机器搬到App Store。首先,你将创建所需的任意一种开发者证书,以及应用程序安全证书。你将添加图标和启动画面,然后学到对应用程序有用的额外功能,例如数据记录和bug报告,还有一些主要供应商。在简要地了解营销之后,你将使App Store准备好接受应用程序,构建并上传。本章以汇总继续创建给力iOS应用程序所需的资源来结尾。
关于示例代码
在学习本书的过程中,你将开发并改进代客泊车应用程序CarValet。CarValet应用程序被用作对你所学概念的实际实现。它并不是一个向大众发布的应用程序,尽管它可以作为这样一个应用程序的基础。
任一涉及创建代码的章节通常至少包含两个项目:一个包含本书之前章节代码的起始项目,以及一个包含在这一章中所做修改的完结项目。对于本书大部分内容,你可以使用自己的某一章的完整项目作为下一章的起点。有一些地方不是这样的,在这些章节中会作出解释。
除了最后的版本,示例代码项目使用相同的唯一包标识符:com.mauricesharp.CarValet。于是,你无法在虚拟机中或设备上同时安装多个版本的应用程序。如果想安装多个版本,只需将唯一的字符串添加到标识符的后边即可,例如com.mauricesharp.CarValet.CH05.portait。你将在第15章了解包标识符的重要性。
你所写的所有代码和所学的概念适用于iOS 7或更新的系统版本。在iOS 7可用的第一天末尾,超过35%的现存设备已经在使用,这是有史以来最快的采用速度。这个份额只会增加。iOS的采用速度通常很快,一般会在几个月之内达到80%或更高。
获得示例代码
所有示例代码都放到了GitHub上,网址为https://github.com/mauricesharp/Learning- iOS-Development。这些代码按章节组织,大多数文件夹包含起点项目和完结项目。某些文件夹还包括中间步骤的项目,另一些项目还包含新的资源文件,比如图片。例如,以下是第6章的文件夹:
CH06 CarValet Starter——第5章的完结项目,不包含第6章的任何修改。可使用这个项目,也可以使用自己第5章的末尾项目,作为第6章添加代码的起点。
CH06 CarValet Finished——包含第6章所有改动的项目。可使用这个项目作为应做修改的参考,或者作为下一章的起点。
CH06 Assets CarImages——一个额外的文件夹,包含本章中所做修改用到的图片资源。
这些代码会按需更新。如果看到有些地方需要修改,有遗漏,甚至是实现某些功能的更好办法,尽管……
贡献!
示例代码从来都不是固定的目标,而是随着苹果公司更新SDK以及Cocoa Touch库而演变。参与进来吧。你可通过建议bug修复与更正来作贡献,也可扩充所提供的代码。GitHub允许你对仓库打分支,用你自己的调整和特性来扩展代码,并且可以在GitHub上使用Pull Request来将这些修改分享回主仓库。如果想到新的点子或方法,请告诉我们。我们乐于采纳对于示例代码仓库或本书下一版本的好建议。
获取git
可以使用git版本控制系统来下载本书源代码。git的OS X实现版本位于http://code.google.com/ p/git-osx-installer。OS X git实现同时包含命令行和GUI解决方案,可以四处搜寻最适合开发需要的版本。
还有些第三方的git工具——有些免费,有些收费。以下两个最流行:
SourceTree:一个免费的git hub客户端工具,网址为www.sourcetree app.com。
Tower:一个付费的带有华丽UI的客户端,网址为www.git-tower.com。
访问GitHub
GitHub(http://github.com)是最大的git托管网站,包含超过150 000个公开仓库。它既提供免费的公开项目托管服务,又为私有项目提供付费托管选项。拥有可定制的网页界面,包含wiki托管和问题跟踪功能,并且着重于项目开发者的社交网络,是寻找新代码以及合作开发现存代码库的好去处。可以在http://github.com上注册免费账户。当这样做时,可以复制并修改此书的源代码仓库,或者创建自己的开源iOS项目并与他人分享。
联系作者
如果有关于本书的任何评论、问题或建议,请发Email给我,邮箱地址为learningios@ mauricesharp.com。
本书使用iOS 7和Xcode的开发者预览版本编写而成。一些不同版本也被用到,但大多数是使用DP(Developer Preview,开发者预览版) 4。本书大部分内容都使用DP 6——正式版本发布之前的最后一个预览版本——进行了检验,但是一些早期代码仍然存在,特别是在CarValet示例代码中。请检查勘误表中的更新。
现在阅读这些页面、写代码,并且完成挑战题。最后,你将懂得如何为手持设备与平板设备创建iOS应用程序。