第1章 iOS开发入门

iOS是一个强大的系统,被广泛地应用于苹果公司的系列产品iPhone、iPad和iTouch设备中。iOS通过这些移动设备展示了一个多点触摸界面、可始终在线、视频以及众多内置传感器的界面。本章将带领大家认识iOS这款神奇的系统,为读者步入本书后面知识的学习打下基础。

1.1 iOS系统介绍

iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Mac World大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X操作系统一样,本来这个系统名为iPhone OS,直到2010年6月7日WWDC大会上才宣布改名为iOS。2014年5月,根据互联网数据中心(IDC)公布的世界移动电话系统的市场占有率数据显示:2014年第一季度,苹果iOS的市场占有率增长稳定。

1.1.1 iOS发展史

iOS最早于2007年1月9日的苹果Macworld展览会上公布,随后于同年的6月发布第一版iOS操作系统,当初的名称为“iPhone运行OS X”。

2007年10月17日,苹果公司发布了第一个本地化iPhone应用程序开发包(SDK)。

2008年3月6日,苹果发布了第一个测试版开发包,并且将“iPhone runs OS X”改名为“iPhone OS”。

2008年9月,苹果公司将iPod touch的系统也换成了“iPhone OS”。

2010年2月27日,苹果公司发布iPad,iPad同样搭载了“iPhone OS”。

2010年6月,苹果公司将“iPhone OS”改名为“iOS”,同时还获得了思科iOS的名称授权。

2010年第四季度,苹果公司的iOS占据了全球智能手机操作系统26%的市场份额。

2011年10月4日,苹果公司宣布iOS平台的应用程序已经突破50万个。

2012年2月,应用总量达到552 247个,其中游戏应用最多,达到95 324个,比重为17.26%;书籍类以60 604个排在第二,比重为10.97%;娱乐应用排在第三,总量为56 998个,比重为10.32%。

2012年6月,苹果公司在WWDC 2012上推出了全新的iOS 6,提供了超过200 项新功能。

2013年6月10日,苹果公司在WWDC 2013上发布了iOS 7,几乎重绘了所有的系统APP,去掉了所有的仿实物化,整体设计风格转为扁平化设计。

2013年9月10日,苹果公司在2013秋季新品发布会上正式提供iOS 7下载更新。

2014年6月3日,苹果公司在WWDC2014开发者大会上正式发布了全新的iOS 8操作系统。

1.1.2 全新的版本——iOS 8

北京时间2014年6月3日凌晨,苹果年度全球开发者大会 WWDC 2014 在美国加利福尼亚州旧金山莫斯考尼西中心(Moscone Center)拉开帷幕。本次大会上苹果正式公布了最新版iOS系统版本iOS 8。全新的iOS 8继续延续了iOS 7的风格,只是在原有风格的基础上做了一些局部和细节上的优化、改进和完善,更加令人愉悦。iOS 8系统最突出的新特性如下所示。

(1)短信界面可以发送语音。

iOS 8很特别的一个新功能,短信界面除了可以发送文字和图片之外,还可以直接录制语音或者视频并直接发送给对方,这一功能和国内的交友软件——微信十分类似。

(2)输入法新功能:支持联想/可记忆学习。

iOS 8内建的输入法增加了和SwiftKey类似的功能,这是一款在安卓手机中非常流行的输入方式。iOS 8的全新输入功能名为QuickType,最突出的特点就是为用户提供“预测性建议”,它会对用户的习惯进行学习,进而在其录入文字的时候为其提供建议,从而大幅提升文字输入速度。

(3)更加实用的通知系统。

在iOS 8系统下,用户可以直接在通知中进行回复,包括短信、微博等在内的所有消息,即便是在锁屏界面也可以进行操作。另外,当双击Home按键开启任务栏界面后,会在上方显示一行最常用的联系人,用户可以直接在上面给其中某一个人发短信、打电话。

(4)正式挺进方兴未艾的健康和健身市场。

在iOS 8系统中内置了Healthbook应用,这是一款在iOS 8系统中运行的应用程序,苹果将利用它挺进方兴未艾的健康和健身市场,这一直是可穿戴设备公司追逐多年的重要领域。苹果公司的Healthbook应用程序将对用户的身体信息进行跟踪统计,其中包括步数、体重、卡路里燃烧量、心率、血压,甚至人体的水分充足状况。

(5)其他新特性。

消息推送新方式:用户可直接下拉通知栏回复消息。

多任务管理界面:在其上方新增最近联系人,并可直接进行发邮件、打电话等操作。

邮件:用户可直接在邮件界面快速调出日历,快速创建日程事项,此外,还可以在侧边栏通过手势快速处理邮件。

全局搜索更强大:用户可以在设备中实现搜索电影、新闻、音乐等。

iMessage功能更强大:加入群聊功能,可以添加/删除联系人,并且新增了语音发送功能。

iPad新增接听来电功能:用iPad也可以接听电话。

新增iCloud Drive云盘服务:实现在所有的Mac电脑和iOS设备,甚至Windows电脑之间共享文件。

企业服务方面:进一步增强易用性和安全性。

Family Sharing(家庭共享):家庭成员间可共享日程、位置、图片和提醒事项等。另外,还可以通过该功能追踪家庭成员的具体位置。

照片新功能:新的Photo加入了更多的编辑功能,以及更智能的分类建议,此外还加入iCloud(5GB免费空间),实现多设备之间共享。

Siri进一步更新:可直接用“hey siri”唤醒。

支持中国农历显示,增强输入法和天气数据。

(6)针对开发者的新特性。

支持第三方键盘。

自带网页翻译功能,如在线即时翻译功能。

指纹识别功能开放,使用第三方软件可以调用。

Safari浏览器可直接添加新的插件。

可以把一个网页上的所有图片打包分享到Pinterest。

支持第三方输入法:将是否授权输入法的选择留给用户。

Home Kit智能家居:可以利用iPhone对家居,如灯光等进行控制。

3D图像应用Metal:可以更充分利用CPU和GPU的性能。

引入全新基于C语言的编程语言Swift。

全新的Xcode。

相机和照片API也实现开放。

1.2 iPhone和iPad

强大的iOS系统被广泛地应用于苹果的移动系列产品中,开发人员无需纠结于开发的程序是否能在不同的硬件设备中运行,其实只要是iOS程序,就可以在支持iOS系统的设备中运行。不同设备之间的差异,只是表现在屏幕大小的区别而已。在当前的iOS开发项目中,主要是开发两类程序:iPhone程序和iPad程序,这两者的屏幕大小不一样。

1.2.1 令人称奇的iPhone

iPhone是一个集合了照相、个人数码助理、媒体播放器以及无线通信设备的掌上智能手机。iPhone最早由乔布斯在2007年1月9日举行的Macworld上宣布推出,2007年6月29日在美国上市。2007年6月29日,iPhone 2G在美国上市,2008年7月11日,苹果公司推出3GiPhone。2010年6月8日凌晨1点,乔布斯发布了iPhone 4。2011年10月5日凌晨,iPhone 4S发布。2012年9月13日凌晨(美国时间9月12日上午)iPhone 5发布。2013年9月10日,苹果公司在美国加州的新闻发布会上,推出两款新iPhone型号:iPhone 5C及iPhone 5S,全新的iPhone 5S如图1-1所示。

图1-1 全新的iPhone 5S

根据专家预测,屏幕更大的iPhone 6将于2014年9月发布。

1.2.2 改变世界的iPad

iPad是一款苹果公司于2010年发布的平板电脑,定位介于苹果的智能手机iPhone和笔记本电脑产品之间,通体只有4个按键,与iPhone布局一样。提供浏览互联网、收发电子邮件、看电子书、播放音频或视频等功能。

2010年1月27日,在美国旧金山芳草地艺术中心举行的苹果公司发布会上,平板电脑iPad正式发布。

2012年3月8日,苹果公司在美国芳草地艺术中心发布第三代iPad。第三代iPad的外形与iPad 2相似,但电池容量增大,有3块4000mAh锂电池,芯片速度更快,使用A5X双核处理器,图形处理器功能增强,配四核GPU。

2012年10月24日,苹果公司举行新品发布会发布第四代ipad平板电脑。

2013年10月22日,苹果公司发布配备Retina(视网膜)屏幕的iPad mini(iPad mini with Retina Display)。原有的iPad mini不再提供32GB以上容量的机型,但容量16GB机型仍继续提供。

2013年10月23日,苹果公司发布iPad Air,屏幕尺寸为9.7英寸,更轻、更薄,最低售价499美元,于2013年11月1日开售。iPad Air继续采用视网膜显示屏,边框更窄;厚度为7.5毫米,比上一代薄了20%;重量是1磅(约合454克),上一代重量则是1.4磅,轻了近30%。在内部元器件方面,iPad Air平板电脑采用苹果A7处理器,并搭配了M7协处理器,CPU处理性能是上代产品的8倍,图形处理能力更是提高了72倍。后置摄像头像素是500万,支持1080p高清视频FaceTime;电池续航能力达到10小时,iPad Air如图1-2所示。

图1-2 iPad Air

1.3 iOS开发之旅

要想成为一名iOS开发人员,首先需要拥有一台Intel Macintosh台式机或笔记本电脑,并运行苹果的操作系统,如Snow Leopard或Lion。硬盘至少有6GB的可用空间,开发系统的屏幕空间越大,就越容易营造高效的工作空间。Lion用户甚至可将Xcode切换到全屏模式,将分散注意力的元素都隐藏起来。对于广大读者来说,还是建议购买一台Mac机器,因为这样的开发效率更高,也避免一些因为不兼容所带来的调试错误。除此之外,还需要加入Apple开发人员计划。

其实无需任何花费即可加入到Apple开发人员计划(Developer Program),然后下载iOS SDK(软件开发包)、编写iOS应用程序,并且在Apple iOS模拟器中运行它们。但是毕竟收费与免费之间还是存在一定的区别:免费会受到较多的限制。例如,要想获得iOS和SDK的beta版,必须是付费成员。要将编写的应用程序加载到iPhone中或通过App Store发布它们,也需支付会员费。本书的大多数应用程序都可在免费工具提供的模拟器中正常运行,因此,接下来如何做由你决定。

注意:如果不确定成为付费成员是否合适,建议读者先不要急于成为付费会员,而是先成为免费成员,在编写一些示例应用程序并在模拟器中运行它们后再升级为付费会员。显然,模拟器不能精确地模拟移动传感器输入和GPS数据等。

如果读者准备选择付费模式,付费的开发人员计划提供了两种等级:标准计划(99美元)和企业计划(299美元),前者适用于要通过App Store发布其应用程序的开发人员,而后者适用于开发的应用程序要在内部(而不是通过App Store)发布的大型公司(雇员超过500)。你很可能想选择标准计划。

注意:其实无论是公司用户还是个人用户,都可选择标准计划(99美元)。在将应用程序发布到AppStore时,如果需要指出公司名,则在注册期间会给出标准的“个人”或“公司”计划选项。

无论是大型企业还是小型公司,无论是要成为免费成员还是付费成员,我们的iOS开发之旅都将从Apple网站开始。首先,访问Apple iOS开发中心(http://www.apple.com.cn/developer/ios/index.html),如图1-3所示。

图1-3 Apple iOS的开发中心页面

如果通过使用iTunes、iCloud或其他Apple服务获得了Apple ID,可将该ID用作开发账户。如果目前还没有Apple ID,或者需要新注册一个专门用于开发的新ID,可通过注册的方法创建一个新Apple ID,注册界面如图1-4所示。

图1-4 注册Apple ID的界面

单击图1-4中的“Create Apple ID”按钮后可以创建一个新的 Apple ID账号,注册成功后输入登录信息登录,登录成功后的界面如图1-5所示。

图1-5 使用Apple ID账号登录后的界面

在成功登录Apple ID后,可以决定是加入付费的开发人员计划还是继续使用免费资源。要加入付费的开发人员计划,请再次将浏览器指向iOS开发计划网页(http://developer.apple.com/programs/ios/),并单击“Enron New”链接加入。阅读说明性文字后,单击“Continue”按钮开始进入加入流程。

在系统提示时选择“I’m Registered as a Developer with Apple and Would Like to Enroll in a Paid Apple Developer Program”,再单击“Continue”按钮。注册工具会引导我们申请加入付费的开发人员计划,包括在个人和公司选项之间做出选择。

1.4 工欲善其事,必先利其器——搭建开发环境

学习iOS开发也离不开好的开发工具的帮助,如果使用的是Lion或更高版本,下载iOS开发工具将很容易,只需通过简单地单击操作即可。为此,在Dock中打开Apple Store,搜索Xcode并免费下载它,坐下来等待Mac下载大型安装程序(约3GB )。如果你使用的不是Lion ,可以从iOS开发中心(http://developer.apple.com/ios)下载最新版本的iOS开发工具。

注意:如果是免费成员,登录iOS开发中心后,很可能只能看到一个安装程序,它可安装Xcode和iOS SDK (最新版本的开发工具);如果你是付费成员,可看到指向其他SDK版本(5.1、6.0等)的链接。本书的示例必须在5.0+系列iOS SDK环境中运行。

1.4.1 Xcode 6介绍

要开发iOS的应用程序,需要一台安装有Xcode工具的Mac OS X计算机。Xcode是苹果提供的开发工具集,提供了项目管理、代码编辑、创建执行程序、代码调试、代码库管理和性能调节等功能。这个工具集的核心就是Xcode程序,提供了基本的源代码开发环境。

Xcode是一款强大的专业开发工具,可以简单快速,并以我们熟悉的方式执行绝大多数常见的软件开发任务。相对于创建单一类型的应用程序所需要的能力而言,Xcode要强大得多,它设计目的是使我们可以创建任何想得到的软件产品类型,从Cocoa及Carbon应用程序,到内核扩展及Spotlight导入器等各种开发任务,Xcode都能完成。Xcode独具特色的用户界面可以帮助我们以各种不同的方式来漫游工具中的代码,并且可以访问工具箱下面的大量功能,包括GCC、javac、jikes和GDB,这些功能都是制作软件产品需要的。它是一个由专业人员设计、又由专业人员使用的工具。

由于能力出众,Xcode已经被Mac开发者社区广为采纳。而且随着苹果电脑向基于Intel的Macintosh迁移,转向Xcode变得比以往任何时候都更加重要。这是因为使用Xcode可以创建通用的二进制代码,这里所说的通用二进制代码是一种可以把PowerPC和Intel架构下的本地代码同时放到一个程序包执行的文件格式。事实上,对于还没有采用Xcode的开发人员,转向Xcode是将应用程序连编为通用二进制代码的第一个必要的步骤。

Xcode的官方地址是:https://developer.apple.com/xcode/downloads/,如图1-6所示。

图1-6 Xcode的官方地址

截止到2014年6月,市面中最主流版本是Xcode 5,最新版本是Xcode 6 beta,其最突出的特点如下所示。

(1)Xcode 6增加了一个全新的iOS模拟器,允许开发者根据设备调整应用尺寸,除了“Resizable iPhone”和“Resizable iPad”之外,还包括iPhone 5/5S、iPad 2/Retina/Air等具体设备,如图1-7所示。

图1-7 全新的iOS模拟器

(2)完全支持Swift编程。

Xcode 6为开发者引入了一种全新的设计和开发应用的方式,深度支持Swift编程,开发者不仅能使用100%的Swift代码来创建一款崭新的应用,还可以向已存在的应用添加Swift代码或框架,并在Swift或Objective-C中查看文档。例如“Jump to Definition”、“Open Quickly”等在Swift中均能很好地工作,甚至Objective-C的头定义在Swift语法中也能良好地呈现。

(3)实时的代码效果预览。

现在,开发者在使用Interface Builder设计界面时,能够实时地预览代码效果。当程序运行时,自定义对象将在设计时展现。当开发者修改自定义视图代码时,Interface Builder的设计画布则会自动更新,而无需任何的构建和运行操作。

此外,其所包含的API还支持向IB Inspector添加参数来快速修改视图,甚至开发者还可以预先填充示例数据视图来让界面更加准确。而支持UIKit大小类的iOS脚本则能够让开发者为所有iOS设备开发单一的通用脚本,不仅能为特定的设备尺寸或方向进行行为选择,还可以保持接口的一致性,且易于维护。

(4)新增View Debugging功能。

Xcode 6实现了此前备受开发者期待的View Debuger。现在,调试应用UI就像按单击按钮那样简单,开发者可以轻而易举地看到为什么一个视图可能会被裁剪或隐藏,并在Inspector中检查和调试约束及其他参数。当然,Xcode还包含了其他新的调试工具,比如调试Gauge来监控I/O用法、增强版的iCloud Gauge等,而Debug Navigator也将显示更有用的信息,包括栈框架记录和块队列等。

1.4.2 iOS SDK介绍

iOS SDK是苹果公司提供的iPhone开发工具包,包括了界面开发工具、集成开发工具、框架工具、编译器、分析工具、开发样本和一个模拟器。在iOS SDK中包含了Xcode IDE和iPhone模拟器等一系列其他工具。苹果官方发布的iOS SDK则将这部分底层API进行了包装,用户的程序只能和苹果提供的iOSSDK中定义的类进行对话,而这些类再和底层的API进行对话。

最明显的例子就是OpenGL ES,苹果官方发布的iOS SDK中的OpenGL ES实际是和底层API中CoreSurface这个框架进行对话,来实现渲染功能。

1.iOS SDK的优点和缺点

苹果官方iOS SDK的缺点如下所示。

CoreSurface(硬件显示设备)、Celestial(硬件音频设备)以及其他几乎所有和硬件相关的处理无法实现。

无法开发后台运行的程序。

需要代码签名才能够在真机上调试。

只能在Leopard 10.5.2以上版本、Inter Mac机器上进行开发。

苹果官方iOS SDK的优点如下所示。

开发环境几乎和开发Mac软件一样,一样的XCode、Interface Builder、Instruments工具。

最新版本的iOS SDK可以使用Interface Builder制作界面。

环境搭建非常容易。

用代码签名可以避免恶意软件。

使用官方iOS SDK开发的软件需要经过苹果的认可才可发布到苹果的App Store上。用户可以通过App Store直接下载或通过iTunes下载软件并安装到iPhone中。

2.iOS程序框架

总的来说iOS程序有两类框架,一类是游戏框架,另一类是非游戏框架,接下来将要介绍的是非游戏框架,即基于iPhone用户界面标准控件的程序框架。

典型的iOS程序包含一个Window (窗口)和几个UIViewController (视图控制器),每个UIViewController可以管理多个UIView (在iPhone里你看到的、感觉到的都是UIView ,也可能是UITableView、UIWebView、UIImageView等)。这些UIView之间如何进行层次迭放、显示、隐藏、旋转、移动等都由UIViewController进行管理,而UIViewController之间的切换,通常情况是通过UINavigationController、UITabBarController或UISplitViewController进行切换。

(1)UINavigationController。

是用于构建分层应用程序的主要工具,它维护了一个视图控制器栈,任何类型的视图控制器都可以放入。它在管理以及换入和换出多个内容视图方面,与UITabBarController(标签控制器)类似。两者间的主要不同在于UINavigationController是作为栈来实现,它更适合用于处理分层数据。另外,UINavigationController还有一个作用是用作顶部菜单。

当你的程序具有层次化的工作流时,就比较适合使用UINavigationController来管理UIViewController,即用户可以从上一层界面进入下一层界面,在下一层界面处理完以后又可以简单地返回到上一层界面,UINavigationController使用堆栈的方式来管理UIViewController。

(2)UITabBarController。

当我们的应用程序需要分为几个相对比较独立的部分时,就比较适合使用UITabBarController来组织用户界面。如图1-8所示,屏幕下面被划分成了两个部分。

图1-8 UITabBarController的作用

(3)UISplitViewController。

UISplitViewController属于iPad特有的界面控件,适合用于主从界面的情况(Master view→Detail view),Detail view跟随Master view进行更新。如图1-9所示,屏幕左边(Master View)是主菜单,单击每个菜单则屏幕右边(Detail View)就进行刷新,屏幕右边的界面内容又可以通过UINavigationController进行组织,以便用户进入Detail View进行更多操作,用户界面以这样的方式进行组织,使得程序内容清晰,非常有条理,是组织用户界面导航很好的方式。

图1-9 UISplitViewController的作用

1.4.3 下载并安装Xcode 6

其实对于初学者来说,我们只需安装Xcode即可。通过使用Xcode,既能开发iPhone程序,也能够开发iPad程序。并且Xcode还是完全免费的,通过它提供的模拟器就可以在计算机上测试iOS程序。如果要发布iOS程序或在真实机器上测试iOS程序,就需要花99美元了。

1.下载Xcode

(1)下载的前提是先注册成为一名开发人员,打开苹果开发主页面https://developer.apple.com/,如图1-10所示。

图1-10 苹果开发页面主页

(2)登录到Xcode的下载页面https://developer.apple.com/xcode/downloads/,找到“Xcode 6 beta”选项,如图1-11所示。

图1-11 Xcode的下载页面

(3)如果是付费账户,可以直接在苹果官方网站中下载获得。如果不是付费会员用户,可以从网络中搜索热心网友们的共享信息,以此达到下载Xcode 6的目的。

注意:我们可以使用App Store来获取Xcode,这种方式的优点是完全自动,操作方便。

2.安装Xcode

(1)下载完成后单击打开下载的“.dmg”格式文件,然后双击Xcode文件开始安装,如图1-12所示。

图1-12 打开下载的Xcode文件

(2)双击Xcode下载到的文件开始安装,在弹出的对话框中单击“Continue”按钮,如图1-13所示。

图1-13 单击“Continue”按钮

(3)在弹出的欢迎界面中单击“Agree”按钮,如图1-14所示。

图1-14 单击“Continue”按钮

(4)在弹出的对话框中单击“Install”按钮,如图1-15所示。

图1-15 单击“Continue”按钮

(5)在弹出的对话框中输入用户名和密码,然后单击 “好”按钮,如图1-16所示。

图1-16 单击“Agree”按钮

(6)在弹出的新对话框中显示安装进度,进度完成后的界面如图1-17所示。

图1-17 完成安装

(7)Xcode 6的默认启动界面如图1-18所示。

图1-18 启动Xcode 6后的初始界面

注意:

(1)考虑到许多初学者没有购买苹果机的预算,可以在Windows系统上采用虚拟机的方式安装OS X系统。

(2)无论读者是已经有一定Xcode经验的开发者,还是刚开始迁移的新用户,都需要对Xcode的用户界面及如何用Xcode组织软件工具有一些理解,这样才能真正高效地使用这个工具。这种理解可以加深您对隐藏在Xcode背后的开发思想的认识,并帮助您更好地使用Xcode。

(3)建议读者将Xcode安装在OS X的Mac机器上,也就是装有苹果系统的苹果机上。通常来说,在苹果机器的OS X系统中已经内置了Xcode,默认目录是“/Developer/Applications”。

1.5 使用Xcode开发环境

经过本章第1.4节中的内容讲解之后,在接下来开始讲解使用Xcode开发环境的基本知识,为读者步入后面Objective-C知识的学习打下坚实的基础。

1.5.1 使用Xcode创建程序的基本步骤

使用Xcode创建程序的基本步骤如下。

(1)启动Xcode应用程序。

(2)如果开发新项目,依次选择File→New Project命令。

(3)为应用程序类型选择Command Line Utility、Foundation Tool,然后单击Choose按钮。

(4)选择项目名称,还可以选择在哪个目录中存储项目文件,然后单击Save按钮。

(5)在右上窗格中,会看到文件progl.m(或者是你为项目起的其他名称,后面是.m)。突出显示该文件。在该窗口下面出现的编辑窗口中输入你的程序。

(6)依次选择File→Save,保存已完成的更改。

(7)选择Build、Build and Run或单击Build and Go按钮构建并运行程序。

(8)如果出现任何编译器错误或输出内容不符合要求,对程序进行所需的更改并重复执行步骤6和步骤7。

1.5.2 Xcode的基本功能

1.改变公司名称

通过Xcode编写代码,代码的头部会有类似于图1-19所示的内容。

图1-19 头部内容

在此需要将这部分内容改为公司的名称或者项目的名称,注意在Xcode 3.2.x之前,需要命令行设置变量。之后就可以通过Xcode的配置项进行操作了,操作步骤分别如图1-20和图1-21所示。

图1-20 选择“Edit Project Settings”选项

图1-21 设置显示的内容

这样如果再创建文件,就会产生如图1-22所示的效果。

图1-22 新创建文件时自动生成的内容

2.通过搜索框缩小文件范围

当项目开发到一段时间后,源代码文件会越来越多。再从Groups & Files的界面去选择效率比较差。可以借助Xcode的浏览器窗口,如图1-23所示。

图1-23 Xcode的浏览器窗口

在图1-23的搜索框中可以输入关键字,这样浏览器窗口里只显示带关键字的文件了,比如只想看Book相关的类,如图1-24所示。

图1-24 输入关键字

3.格式化代码

例如,在图1-25所示的界面中,有很多行都顶格了,此时需要进行格式化处理。

图1-25 多行都顶格

选中需要格式化的代码,然后在上下文菜单中进行查找,这是比较规矩的办法,如图1-26所示。

图1-26 在上下文菜单中进行查找

Xcode没有提供快捷键,当然自己可以设置。我又比较喜欢用快捷键。我的做法是:Ctrl+A(全选文字)、Ctrl+X(剪切文字)、Ctrl+V(粘贴文字)。Xcode会对粘贴的文字格式化。

4.缩进代码

有的时候代码需要缩进,有的时候又要做相反的操作。单行缩进和其他编辑器类似,只需使用Tab键即可。如果选中多行则需要使用快捷键了,其中Command+]表示缩进,Command+[表示反向缩进。

5.代码的自动完成

使用IDE工具的一大好处是,工具能够帮助我们自动完成比较冗长的类型名称。Xcode提供了这方面的功能。比如下面的的输出日志:

NSLog(@"book author: %@",book.author);

如果都自己敲会很麻烦的,可以先敲ns,然后使用快捷键“Ctrl+.”,会自动出现如下代码:

NSLog(NSString * format)

然后填写参数即可。快捷键“Ctrl+.”的功能是自动给出第一个匹配ns关键字的函数或类型,而NSLog是第一个。如果继续使用“Ctrl+.”,则会出现比如NSString的形式。依此类推,会显示所有ns开头的类型或函数,并循环往复。或者,也可以用“Ctrl+,”快捷键,比如还是ns,那么会显示全部ns开头的类型、函数、常量等的列表。可以在这里选择。其实,Xcode也可以在你敲代码的过程中自动给出建议。比如咱们要敲NSString。当敲到NSStr的时候:

NSString

此时后面的ing会自动出现,如果和我预想的一样,只需直接按tab键确认即可。也许你想输入的是NSStream,那么可以继续敲。另外也可敲ESC键,这时就会出现结果列表供选择了,如图1-27所示。

图1-27 出现结果列表

如果是正在输入方法,那么会自动完成如图1-28所示的样子。

图1-28 自动完成的结果

我们可以使用Tab键确认方法中的内容,或者通过快捷键“Ctrl+/”在方法中的参数来回切换。

6.文件内查找和替代

在编辑代码的过程中经常会做查找和替代的操作,如果只是查找则直接按“Command+F”组合键即可,在代码的右上角会出现如图1-29所示的对话框。只需在里面输入关键字,不论大小写,代码中所有命中的文字都高亮显示。

图1-29 查找界面

也可以实现更复杂的查找,比如是否大小写敏感,是否使用正则表达式等。设置界面如图1-30所示。

图1-30 复杂查找设置

通过图1-31所示的“Find & Replace”可以切换到替代界面。

图1-31 “Find & Replace”替换

例如图1-32所示的界面将查找设置为大小写敏感,然后替代为myBook。

图1-32 替代为myBook

另外,也可以单击按钮进行全部替代,或查找一个替代一个等。如果需要在整个项目内查找和替代,则依次单击“Edit”→“Find”→“Find in Project…”命令,如图1-33所示。

图1-33 “Find in Project…”命令

还是以找关键字book为例,则实现界面如图1-34所示。

图1-34 在整个项目内查找“book”关键字

替代操作的过程也与之类似,在此不再进行详细讲解。

7.快速定位到代码行

如果想定位光标到选中文件的行上,可以使用快捷键“Command+L”来实现;也可以依次单击“Edit”→“Go to Line”命令实现,如图1-35所示。

图1-35 “Go to Line”命令

在使用菜单或者快捷键时都会出现下面的对话框,输入行号和回车后就会来到该文件的指定行,如图1-36所示。

图1-36 输入行号

8.快速打开文件

有时候需要快速打开头文件,例如图1-37所示的界面。要想知道这里的文件Cocoa.h到底是什么内容,可以鼠标光标选中文件Cocoa.h来实现。

图1-37 一个头文件

依次单击“File”→“Open Quickly…”命令,如图1-38所示。

图1-38 “Open Quickly…”命令

此时会弹出如图1-39所示的对话框。

图1-39 “Open Quickly…”对话框

此时双击文件Cocoa.h的条目就可以看到如图1-40所示的界面。

图1-40 文件Cocoa.h的内容

9.使用书签

使用Eclipse的用户会经常用到TODO标签,比如正在编写代码的时候需要做其他事情,或者提醒自己以后再实现的功能时,可以写一个TODO注释,这样可以在Eclipse的视图中找到,方便以后找到这个代码并修改。其实Xcode也有类似的功能,比如存在一段如图1-41所示的代码。

图1-41 一段代码

这段代码的方法printInfomation是空的,暂时不需要具体实现。但是需要记下来,便于以后能找到并补充。那么让光标定位在方法内部,然后单击鼠标右键,选择“Add to Bookmarks”命令,如图1-42所示。

图1-42 选择“Add to Bookmarks”命令

此时会弹出一个对话框,可以在里面填写标签的内容,如图1-43所示。

图1-43 填写标签的内容

这样就可以在项目的书签节点找到这个条目了,如图1-44所示。此时单击该条目,可以回到刚才添加书签时光标的位置。

图1-44 在项目的书签节点找到这个条目

10.自定义导航条

在代码窗口上边有一个工具条,此工具条提供了很多方便的导航功能,例如图1-45所示的功能。

图1-45 一个导航条

也可以用来实现上面TODO的需求。这里有两种自定义导航条的写法,其中下面是标准写法。

#pragma mark

而下面是Xcode兼容的格式。

// TODO: xxx

// FIXME: xxx

完整的代码如图1-46所示。

图1-46 完整的代码

此时会产生如图1-47所示的导航条效果。

图1-47 产生的导航条效果

11.使用Xcode帮助

如果想快速查看官方API文档,可以在源代码中按下“Option”键并用鼠标双击该类型(函数、变量等),如图1-48所示的是NSString的API文档对话框。

图1-48 NSString的API文档对话框

如果单击图1-48中标识的按钮,会弹出完整文档的窗口,如图1-49所示。

图1-49 完整文档的窗口

12.调试代码

最简单的调试方法是通过NSLog打印出程序运行中的结果,然后根据这些结果判断程序运行的流程和结果值是否符合预期。对于简单的项目,通常使用这种方式就足够了。但是,如果开发的是商业项目,需要借助Xcode提供的专门调试工具。所有的编程工具的调试思路都是一样的。首先要在代码中设置断点,此时可以想象一下,程序的执行是顺序的,可能怀疑某个地方的代码出了问题(引发bug),那么就在这段代码开始的地方,比如方法的第一行,或者循环的开始部分,设置一个断点。那么程序在调试时会在运行到断点时终止,接下来可以一行一行地执行代码,判断执行顺序是否是自己预期的,或者变量的值是否和自己想的一样。

设置断点的方法非常简单,比如想对红框表示的行设置断点,就单击该行左侧红圈位置,如图1-50所示。

图1-50 单击该行左侧红圈位置

单击后会出现断点标志,如图1-51所示。

图1-51 出现断点标志

然后运行代码,比如使用“Command+Enter”命令,这时将运行代码,并且停止在断点处。如图1-52所示。

图1-52 停止在断点处

可以通过“Shift+Command+Y”命令调出调试对话框,如图1-53所示。

图1-53 调试对话框

这和其他语言IDE工具的界面大同小异,因为都具有类似的功能。下面是主要命令的具体说明:

Continue:继续执行程序。

step over, step into, step out:用于单步调试,具体说明如下。

●step over:将执行当前方法内的下一个语句。

●step into:如果当前语句是方法调用,将单步执行当前语句调用方法内部第一行。

●step out:将跳出当前语句所在方法,到方法外的第一行。

通过调试工具,可以对应用做全面和细致的调试。

1.6 启动iOS 8模拟器

Xcode是一款功能全面的应用程序,通过此工具可以轻松输入、编译、调试并执行Objective-C程序。如果想在Mac上快速开发iOS应用程序,则必须学会使用这个强大的工具的方法。在接下来将简单介绍使用Xcode编辑启动模拟器的基本方法。

(1)Xcode位于“Developer”文件夹内中的“Applications”子文件夹中,快捷图标如图1-54所示。

图1-54 Xcode图标

(2)启动Xcode 6后的初始界面如图1-55所示,在此可以设置创建新工程还是打开一个已存在的工程。

图1-55 启动一个新项目

(3)单击“Create a new Xcode project”后会出现如图1-56所示的窗口。

图1-56 启动一个新项目:选择应用程序类型

(4)在New Project窗口的左侧,显示了可供选择的模板类别,因为我们的重点是类别iOS Application,所以在此需要确保选择了它。而在右侧显示了当前类别中的模板以及当前选定模板的描述。就这里而言,请单击模板“Empty Application(空应用程序)”,再单击Next(下一步)按钮,窗口界面效果如图1-57所示。

图1-57 单击模板“Empty Application(空应用程序)”

(5)选择模板并单击“Next”按钮后,在新界面中Xcode将要求您指定产品名称和公司标识符。产品名称就是应用程序的名称,而公司标识符创建应用程序的组织或个人的域名,但按相反的顺序排列。这两者组成了束标识符,它将您的应用程序与其他iOS应用程序区分开来,如图1-58所示。

图1-58 Xcode文件列表窗口

例如,我们将创建一个名为“exSwift”的应用程序,设置域名是“apple”。如果没有域名,在开发时可以使用默认的标识符。

(6)单击“Next”按钮,Xcode将要求我们指定项目的存储位置。切换到硬盘中合适的文件夹,确保没有选择复选框Source Control,再单击“Create(创建)”按钮。Xcode将创建一个名称与项目名相同的文件夹,并将所有相关联的模板文件都放到该文件夹中,如图1-59所示。

图1-59 选择保存位置

(7)在Xcode中创建或打开项目后,将出现一个类似于iTunes的窗口,您将使用它来完成所有的工作,从编写代码到设计应用程序界面。如果这是您第一次接触Xcode,令人眼花缭乱的按钮、下拉列表和图标将让您感到不适。为让您对这些东西有大致认识,下面首先介绍该界面的主要功能区域,如图1-60所示。

图1-60 Xcode界面

(8)运行iOS模拟器的方法十分简单,只需单击左上角的figure_0041_0061按钮即可,运行效果如图1-61所示。

图1-61 iPhone模拟器的运行效果

1.7 iOS的常用开发框架

为了提高开发iOS程序的效率,除了可以使用Xcode集成开发工具之外,还可以使用第三方提供的框架,这些框架为我们提供了完整的项目解决方案,是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易。在OSX下的Mac操作系统中,大约存在80个框架,这些框架可以用来开发应用程序,处理Mac的Address Book结构、刻制CD、播放DVD、使用QuickTime播放电影、播放歌曲等。

在iOS的众多框架中,其中有两个最为常用的框架:Foundation框架和Cocoa框架。

1.7.1 Foundation框架简介

在OSX下的Mac操作系统中,为所有程序开发奠定基础的框架称为Foundation框架。该框架允许使用一些基本对象,例如数字和字符串,以及一些对象集合,如数组、字典和集合。其他功能包括处理日期和时间、自动化的内存管理、处理基础文件系统、存储(或归档)对象、处理几何数据结构(如点和长方形)。

Foundation头文件的存储目录是:

/System/Library/Frameworks/Foundation.framework/Headers

上述头文件实际上与其存储位置的其他目录相链接。请读者查看这个目录中存储在系统上的Foundation框架文档,熟悉它的内容和用法简介。Foundation框架文档存储在我们计算机系统中(位于/Develop/Documentation目录中),另外Apple网站上也提供了此说明文档。大多数文档为HTML格式的文件,可以通过浏览器,同时也提供了Acrobat pdf文件。这个文档中包含Foundation的所有类及其实现的所有方法和函数的描述。

如果正在使用Xcode开发程序,可以通过Xcode的Help菜单中的Documentation窗口轻松访问文档。通过这个窗口,可以轻松搜索和访问存储在计算机本机中或者在线的文档。如果正在Xcode中编辑文件并且想要快速访问某个特定头文件、方法或类的文档,可以通过高亮显示编辑器窗口中的文本并右键单击的方法来实现。在出现的菜单中,可以适当选择Find Selected Text in Documentation或者Find Selected Text in API Reference。Xcode将搜索文档库,并显示与查询相匹配的结果。

看一看它是如何工作的。类NSString是一个Foundation类,可以使用它来处理字符串。假设正在编辑某个使用该类的程序,并且想要获得更多关于这个类及其方法的信息,无论何时,当单词NSString出现在编辑窗口时,都可以将其高亮显示并右键单击。如果从出现的菜单中选择Find Selected Text in API Reference,会得到一个外观与图1-62类似的文档窗口。

图1-62 NSString类的文档

如果向下滚动标有NSString Class Reference的面板,将发现(在其他内容中间)一个该类所支持的所有方法的列表。这是一个能够获得有关实现哪些方法等信息的便捷途径,包括它们如何工作以及它们的预期参数。

读者们可以在线访问developer.apple.com/referencelibrary,打开Foundation参考文档(通过Cocoa、Frameworks、Foundation Framework Reference链接),在这个站点中还能够发现一些介绍某些特定编程问题的文档,例如内存管理、字符串和文件管理。除非订阅的是某个特定文档集,否则在线文档要比存储在计算机硬盘中的文档从时间上讲更新一些,如图1-62所示。

在Foundation框架中包括了大量可供使用的类、方法和函数。在Mac OS X上,大约有125个可用的头文件。作为一种简便的形式,我们可以使用如下代码头文件。

#import <Foundation/Foundation.h>

因为Foundation.h文件实际上导入了其他所有Foundation头文件,所以不必担心是否导入了正确的头文件,Xcode会自动将这个头文件插入到程序中。虽然使用上述代码会显著地增加程序的编译时间,但是通过使用预编译的头文件,可以避免这些额外的时间开销。预编译的头文件是经过编译器预先处理过的文件。在默认情况下,所有Xcode项目都会受益于预编译的头文件。在本章使用每个对象时都会用到这些特定的头文件,这会有助于我们熟悉每个头文件所包含的内容。

1.7.2 Cocoa框架简介

Application Kit框架包含广泛的类和方法,它们能够开发交互式图形应用程序,使得开发文本、菜单、工具栏、表、文档、剪贴板和窗口等应用变得十分简便。在Mac OS X操作系统中,术语Cocoa是指Foundation框架和Application kit框架。术语Cocoa Touch是指Foundation框架和UIKit框架。由此可见,Cocoa是一种支持应用程序提供丰富用户体验的框架,它实际上由如下两个框架组成:

Foundation框架;

Application Kit(或AppKit)框架。

其中后者用于提供与窗口、按钮、列表等相关的类。在编程语言中,通常使用示意图来说明框架最顶层应用程序与底层硬件之间的层次,如图1-63所示就是一个这样的图。

图1-63 应用程序层次结构

图1-63中各个层次的具体说明如下所示。

User:用户。

Application:应用程序。

Cocoa(Foundation and AppKit Frameworks):Cocoa(Foundation和AppKit框架)。

Application Services:应用程序服务。

Core Services:核心服务。

Mac OS X kernel:Mac OS X内核。

Computer Resources (memory, disk,display, etc.):计算机资源(内存、磁盘、显示器等)。

内核以设备驱动程序的形式提供与硬件的底层通信,它负责管理系统资源,包括调度要执行的程序、管理内存和电源,以及执行基本的I/O操作。

核心服务提供的支持比它上面层次更加底层或更加“核心”。例如,在Mac OS X中主要了对集合、网络、调试、文件管理、文件夹、内存管理、线程、时间和电源的管理。

应用程序服务层包含对打印和图形呈现的支持,包括Quartz、OpenGL和Quicktime。由此可见,Cocoa层直接位于应用程序层之下。正如图中指出的那样,Cocoa包括Foundation和AppKit框架。Foundation框架提供的类用于处理集合、字符串、内存管理、文件系统、存档等。通过AppKit框架中提供的类,可以管理视图、窗口、文档等用户界面。在很多情况下,Foundation框架为底层核心服务层(主要用过程化的C语言编写)中定义的数据结构定义了一种面向对象的映射。

Cocoa框架用于Mac OS X桌面与笔记本电脑的应用程序开发,而Cocoa Touch框架用于iPhone与iTouch的应用程序开发。Cocoa和Cocoa Touch都有Foundation框架。然而在Cocoa Touch下,UIKit代替了AppKit框架,以便为很多相同类型的对象提供支持,比如窗口、视图、按钮、文本域等。另外,CocoaTouch还提供使用加速器(它与GPS和Wi-Fi信号一样都能跟踪位置)的类和触摸式界面,并且去掉了不需要的类,比如支持打印的类。

1.8 常用的第三方工具

在iOS开发应用中,为了提高开发效率,需要借助第三方开发工具。例如测试程序需要模拟器iPhone Simulator,设计界面需要Interface Builder。在本节的内容中,将简单介绍这两个工具的基本知识。

1.8.1 iPhone Simulator

iPhone Simulator是iPhone SDK中的最常用工具之一,无需使用实际的iPhone/iPod Touch就可以测试应用程序。iPhone Simulator位于如下文件夹中。

/Developer/iPhone OS <version> /Platforms/iPhoneSimulator.platform/Developer/Applications/

通常不需要直接启动iPhone Simulator,它在Xcode运行(或是调试)应用程序时会自动启动。Xcode会自动将应用程序安装到iPhone Simulator上。iPhone Simulator是一个模拟器,并不是仿真器。模拟器会模仿实际设备的行为。iPhone Simulator会模仿实际的iPhone设备的真实行为。但模拟器本身使用Mac上的QuickTime等库进行渲染,以便效果与实际的iPhone保持一致。此外,在模拟器上测试的应用程序会编译为X86代码,这是模拟器所能理解的字节码。与之相反,仿真器会模仿真实设备的工作方式。在仿真器上测试的应用程序会编译为真实设备所用的实际的字节码。仿真器会把字节码转换为运行仿真器的宿主计算机所能执行的代码形式。

iPhone Simulator可以模拟不同版本的iPhone OS。如果需要支持旧版本的平台以及测试并调试特定版本的OS上的应用程序所报告的错误,该功能就很有用。

启动Xcode后选择左边的iPhone OS下面的Application,然后依次选择“View”→“based Application”,然后为项目命名,如图1-64所示。

图1-64 Xcode界面

在新建的项目中不作任何操作,直接单击“Build and Run”按钮后即可在模拟器中运行程序,如图1-65所示。

图1-65 模拟器界面

1.8.2 Interface Builder

Interface Builder(IB)是Mac OS X平台下,用于设计和测试用户界面(GUI)的应用程序(非开源)。为了生成GUI,IB并不是必需的,实际上Mac OS X下所有的用户界面元素都可以使用代码直接生成,但是IB能够使开发者简单快捷地开发出符合Mac OS X human-interface guidelines的GUI。通常只需要通过简单的拖拽(drag-n-drop)操作来构建GUI就可以了。

IB使用Nib文件储存GUI资源,同时适用于Cocoa和Carbon程序。在需要的时候,Nib文件可以被快速地载入内存。Interface Builder是一个可视化工具,用于设计iPhone应用程序的用户界面。可以在Interface Builder中将视图拖拽到窗口上并将各种视图连接到插座变量和动作上,这样它们就能以编程的方式与代码交互。

Interface Builder的设计界面如图1-66所示。

图1-66 Interface Builder界面