第4讲 开发工具
第1讲中介绍了如何配置iPhone应用程序开发环境,安装了集成开发软件包,本讲将具体介绍集成开发软件包中包含的开发工具。
4.1 Xcode
4.1.1 综合开发环境Xcode的功能
第3讲中已经多次出现过Xcode的名称,集成开发软件包中最重要的开发工具就是Xcode,也是开发Mac OS X应用程序以及iPhone应用程序的核心工具。
在启动Xcode前,我们首先确认一下Xcode的安装场所,在安装了iPhone及Xcode集成开发软件包后,Xcode程序会出现在【/Developer/Applications】目录之下。双击Xcode程序,启动Xcode,下面一一介绍Xcode所提供的功能。
1. 代码编辑器
代码编辑器首先是书写程序代码用的编辑器,除了纯粹的文本编辑功能外,还提供了编程用的各种便利的功能。
2. 资源管理
编写应用程序时,需要很多如代码、图片样的文件,资源管理就是管理这些代码及资源文件的。它是以工程为单位进行管理的,关于工程的概念在4.1.2节中会有介绍。
3. 构建(Build)
需要的文件创建齐全后,就要进行编译了,按照编译(compile)、连接(link)、绑定(band)的顺序最终集中为一个命令来进行。
4. 调试(Debug)
最后可以对已经完成的应用程序进行测试,这个测试的过程通常被称为调试(debug),关于调试会在第19讲中进行介绍。
Xcode对开发的所有阶段都提供支援。通常像Xcode这样的开发用的应用程序被称为综合开发环境或IDE(Integrated Development Environment)。到现在为止,在Mac OS中进行Mac应用程序或者iPhone应用程序编程使用的IDE只有Xcode了。
4.1.2 工程窗口
为了更好地使用Xcode,下面先介绍Xcode的基本概念,已经了解了这些概念的读者可以略过此处。
首先要说的是工程的概念,这里所谓的工程就是为开发一个应用程序而需要创建所有文件工作的总和,在Xcode中,代码以及资源文件是以工程为单位进行管理的,管理的中心就是所谓工程窗口。
在Xcode中创建了工程后,会生成后缀为.xcodeproj的工程文件,如图4-1所示,其中保持了所有与工程相关的设置。双击这个文件就可以打开Xcode,从而也可以进入工程窗口。
图4-1 .xcodeproj文件
为了方便说明,我们可以打开安装iPhone SDK&Xcode软件包时自动安装到机器里的Example程序,这里我们将打开【/Developer/Examples/CircleView/CircleView. xcodeproj】文件。
1. 组与文件(Groups&Files)
打开CircleView.xcodeproj文件后,可以看到如图4-2所示的工程窗口。整个窗口分为两帧,左边的一帧就是【组与文件(Groups&Files)】,右边的一帧为【详细显示】。
图4-2 CircleView.xcodeproj的工程窗口
在工程中,可以加入代码文件及图片资源等文件。而工程窗口中将这些文件以分组的形式进行管理起来了。这些组以及文件就罗列在窗口左侧的组与文件(Groups&Files)帧中了。当你选择了对应的组或文件后,会在右侧的帧中显示其详细信息。
2. 改变外观
首先暂时关闭打开的工程窗口,选择Xcode主菜单中【Xcode】→【Preferences】选项,打开Xcode的环境设置窗口(见图4-3),选择【General(一般)】标签,下面学习如何改变Xcode的外观。
图4-3 环境设置窗口
请注意窗口左侧的Layout(外观)项目,你可以通过改变此项目来改变Xcode开发环境的外观风格。它一共有三个选项:Default(默认),Condensed(浓缩),All-in-One(合多为一)。
默认的形式如图4-3所示,Condensed的形式是按照功能分开显示窗口,而All-in-One是将所有的功能合成一个窗口(见图4-4)。
图4-4 All-in-One形式的窗口
你可以选择你喜欢的窗口形式,本书中使用的是默认窗口。
3. 文本编辑器
再一次双击【/Developer/Examples/CircleView/CircleView.xcodeproj】文件,重新打开工程窗口。
我们可以在打开的工程窗口中看到像【CircleView.h】、【CircleView.m】这样的文件,这些都是程序代码文件,双击这些文件名后可以进入文本编辑器窗口(见图4-5),在文本编辑器中,我们可以编辑、修改程序代码。
如图4-5所示为独立的窗口,我们也可以在原来的工程窗口中显示这个文本编辑器。在工程窗口的右下方有一个滑动按钮(见图4-6),将这个按钮向上拖动后就能够显示出文本编辑器(见图4-7),在上方的窗口中选择不同的文件时,文本编辑器中将显示不同的代码。这时候整个工程窗口将分割为三个部分。
独立的编辑窗口可以将多个程序代码窗口并排显示,但是需要更宽的屏幕。显示三帧的工程窗口时,窗口更紧凑,但不能并排显示不同的程序。使用时可根据需要来调整。
图4-5 文本编辑器
图4-6 滑动按钮
图4-7 向上拖动后显示出文本编辑器
4.1.3 文本编辑器的功能
下面将详细介绍文本编辑器,在这个编辑器中准备了编程时使用的各种方便的工具。
下面将以【CircleView.m】文件为例子一一说明,一些基本概念如函数、方法等,相信大家已经有所了解在此就不做讲解了。
1. 函数,方法列表
在文本编辑器窗口工具条的下方,有并排的两个下拉菜单,左侧的下拉菜单用于修改履历,右侧的下拉菜单为代码中包含的函数、方法列表。
点击右侧的下拉菜单,会显示如图4-8所示的菜单。
下拉列表中显示的是【CircleView.m】文件中包含的所有方法列表,从这个菜单中可以很方便地转到对应的方法处。
2. 码补充提示
在编程时,经常要输入很长的函数名或方法名(Mac应用程序包括iPhone应用程序的方法名尤其长),Xcode的文本编辑器中提供了减轻程序员输入负担的代码补充提示功能。
图4-8 函数、方法列表
按Esc键可以调出此功能。下面尝试调用此功能。在如图4-8所示窗口中,将光标移动到19行,即代码为【super initWithFrame:frame】的那一行,然后将光标移动到【initWithFrame】前,按Esc键后,就会显示所有候补方法(对象)下拉列表(见图4-9),选择列表中的任意一项,对应的方法或对象名将显示在文本编辑器窗口中。
图4-9 代码补充提示
使用这个代码补充提示功能后,编写代码时将会方便多了。另外关于这些候补方法(对象)的显示时机,可在环境设置的【Code Sense(代码输入辅助)】标签(见图4-10)中进行详细的设置。
图4-10 环境设置的【Code Sense(代码输入辅助)】标签
3. 改变编码,换行符
可以在环境设置窗口改变显示的代码的文字编码及换行符(换行符即表示一行结束的记号,随着使用的平台的不同易引起混乱)。可以通过主菜单的【View】→【Text】中的【File Encoding】以及【Line Endings】选项来转换不同的字符编码及换行符。
选择【File Encoding】中的任意选项时,会弹出如图4-11所示的对话框,提示信息的意思是【你需要将文件转换到指定的编码还是按照新的编码进行再解释?】,如果想转化代码可以单击【Convert】按钮,如果想修正乱码时可单击【Reinterpret】按钮。
图4-11 编码变换提示窗口
如果没有指定正确的文字编码,将会出现乱码。另外如果改行符出现问题时,行与行之间会出现空白行,那么单击【Reinterpret】按钮后可以得到修正。
还可以在打开文件时进行编码与换行符的设置。在环境设置面板的【Text Editing】标签中可以进行设置的修改(见图4-12)。
在【Test Editing】标签下有各种各样的编码方式与换行符可供选择,最常使用的文字编码为【UFT-8】,换行符为【Unix(LF)】。UFT-8的编码方式允许输入中文,LF形式的换行符多用于Mac OS X等UNIX系列OS中。
图4-12 文本编辑标签
4.1.4 开发者手册
使用Cocoa框架(在第5讲中将详细介绍)开发Mac应用程序或者iPhone应用程序时,会经常出现要调查开发文档的情况。因为Cocoa框架的类的函数非常多,任何一个熟练的程序员都不可能将所有的函数或方法的使用方法都记住。还好Xcode开发环境提供了让程序员方便地调查的开发者手册(Developer Manual)的功能。这些文档通常也被称为API参考(API Reference)。
可以通过主菜单的【Help】→【Developer Documentation】选项来启动开发者手册(Developer Manual)功能(见图4-13)。
图4-13 开发者手册
在开发者手册窗口的右上方有检索输入框,可以在此输入任何想调查的类名或者函数名,进行检索。
在窗口的左上角有名为【Home】的下拉按钮,单击此下拉按钮时可以看到三个库(Library)的文档入口,即【iPhone OS 4.0 Library】、【Mac OS X 10.6 Core Library】、【Xcode 3.2 Developer Tools Library】,选择其中的一个选项,就可以进入对应库的帮助文档首页。如图4-14中显示就是【Mac OS X 10.6 Core Library】文档的首页。
图4-14 【Mac OS X 10.6 Core Library】文档的首页
在进行Cocoa编程时,请务必利用好上述开发者手册工具,只要出现了自己不知道的类或者函数,就立即使用其进行查找,相信你的编程能力也会在不断的查找中得到逐步提高。
4.2 Interface Builder
与Xcode一起被提及的还有一个称为Interface Builder的工具。在Xcode综合集成开发环境中,Interface Builder用于用户界面外观的设计与开发工作,其图标如图4-15所示。
图4-15 Interface Builder的图标
我们可以双击【Group&Files】帧下的【Interface Builder Files】→【MainMenu. nib】文件(nib文件是Interface Builder创建的文件的后缀)来启动Interface Builder工具(见图4-16)。
图4-16 Interface Builder的界面
Interface Builder的外观看起来像作图软件,从面板、按钮到滑块这样的部件都可以从对象窗口拖曳到设计窗口中进行应用程序外观的设计,使用起来非常直观。
但是,不管怎么说,Interface Builder是一个开发工具,如果一点编程的知识都没有,使用起来还是有一定难度的,Interface Builder并非是进行单纯的外观设计,也是整个编程工作的一部分。
4.3 Dashcode
Xcode综合集成开发环境中除了Xcode与Interface Builder可用于iPhone应用程序的开发外,还提供一个名为Dashcode的开发工具(见图4-17),使用HTML+CSS+JavaScript可以开发Web型的iPhone应用程序。
图4-17 Dashcode的图标
如图4-18所示是Dashcode的开发界面,在Dashcode中使用HTML+CSS+JavaScript开发的Web型iPhone应用程序,有比传统型的iPhone应用程序花费更少精力的优势,其作为开发稍简单的iPhone应用程序的开发工具越来越受到关注。本套丛书的第二本书(《iPhone应用程序攻略之iPhone特色传感器应用》)中将有专门的实例来介绍如何使用Dashcode进行iPhone应用程序开发。
图4-18 Dashcode的开发界面
4.4 iPhone模拟器
使用Xcode或者Dashcode开发iPhone应用程序时,都不可能直接在开发软件中进行调试或测试,必须要借助模拟器,Apple公司提供了各种iPhone SDK版本的模拟器,安装了iPhone SDK后,其相应版本的iPhone模拟器也被安装了,如图4-19所示是iPhone模拟器的外观。
图4-19 iPhone模拟器
如果在开发环境中,同时安装了不同版本的iPhone SDK时,在进行测试前需要选择正确版本的iPhone模拟器,不然程序将不能正确运行。
4.5 其他工具
下面再介绍几个在Xcode综合集成开发环境中附属的其他工具。
4.5.1 FiIeMerge
FileMerge是进行两个文件间的差异比较的工具。对程序代码进行了一些编辑后,需要与过去的版本进行比较时使用此工具,其图标如图4-20所示。
图4-20 FileMerge的图标
命令行程序Diff与FileMerge的作用大致相同,但是FileMerge提供了图形化的界面,使用起来要方便得多。
4.5.2 Icon Composer
顾名思义,Icon Composer是用于制作图标文件的应用程序。在Mac OS X中图标是后缀为【.icns】的文件。此工具就是将普通的图片文件转换为后缀为【.icns】的文件,其图标如图4-21所示。
图4-21 Icon Composer的图标
4.5.3 Property List Editor
在Mac OS X中,关于应用程序的各种信息是通过所谓【属性列表(Property List)】的格式保存的,Property List Editor就是这种格式文件的专用编辑器,其图标如图4-22所示。
图4-22 Property List Editor的图标
4.6 Mac或iPhone应用程序开发的流程
在上面我们已经介绍了开发iPhone应用程序,包括Mac应用程序的各种开发工具,那到底在开发iPhone应用程序时应该做哪些工作呢?或者说iPhone应用程序开发的流程如何?有必要在此做一下梳理。
4.6.1 准备应用程序用的材料
在进行应用程序开发时,有人觉得就是编写代码。其实编写代码只是应用程序开发的一部分工作,除了编写代码文件外,还有准备图标等各种图片,对于开发图形界面的iPhone应用程序或Mac应用程序来说还需要设计图形界面,所有的工作都是为了准备应用程序用的材料。这些材料在制作时需要用到上面各节中介绍的开发工具。
1. 程序代码
首先需要的当然是程序代码文件了,程序代码中编制了应用程序应该执行的各种指令。如果是开发计算器应用程序,就需要在代码中编写各种计算处理的程序指令。
程序代码是普通的文本文件,通常使用上面介绍的Xcode文本编辑器来进行编写。当然你也可以使用Xcode文本编辑器以外的文本编辑器,从Xcode综合集成开发环境中可以调用其他的文本编辑器。前面已经介绍过了,Xcode文本编辑器拥有许多辅助代码编写的功能,使用Xcode文本编辑器还是非常方便的。
iPhone应用程序或Mac应用程序的代码文件包括以【.h】为后缀的所谓头文件,以及以【.m】为后缀的程序文件。
2. 用户界面的外观
开发具有图形用户界面的iPhone应用程序或Mac应用程序时,必须设计用户界面的外观,上面包含了窗口,用于操作的各种按钮、菜单等。这些用户界面在理论上是可以完全通过编写代码来实现的,但是编写这样的代码会非常困难。如果具有所谓【所见即所得】特征的开发工具,相信大家都会采用这样的开发工具。
Interface Builder就是用于开发iPhone应用程序或Mac应用程序的用户界面的开发工具,具有【所见即所得】特征。用户只需要将对应的部件拖曳到设计窗口,即可完成用户界面的设计,生成的文件以【.nib】为后缀。
3. 图片资源
一个iPhone应用程序或Mac应用程序通常都需要一个图标,不仅仅要有应用程序图标,还有如文档文件图标、工具条按钮图标等。这些图标的前身都是图片,只不过在iPhone应用程序或Mac应用程序中其看起来像应用程序图标,需要使用专门的工具将一般的图片转化为特定格式的图形文件。
上述所有的图片在开发应用程序时,都应该准备好。代码以外应用程序必需的文件,通常被称为资源文件。这些图片资源文件可以使用Photoshop、Illustrator等软件工具进行制做。
4. 应用程序的设置
完成了应用程序相关代码文件的编写、用户界面的设计、各种资源文件的准备后,最后就是关于应用程序有关属性的设置了。例如应用程序的名称、著作权信息、版本号等,这些信息都放置在设置文件中。
在前面已经介绍过,这个设置文件又被称为【属性列表】的特殊格式,使用Property List Editor进行编辑。
4.6.2 建立步骤
应用程序的材料准备妥当了,下一步就是要进行“组装”了,将这些代码文件、图片资源等“组装”成应用程序的工作称为建立(Build)。
图4-23中显示了建立的流程,下面分别介绍一下各个处理步骤。
1. 编译
在整个建立(Build)过程中,最重要的是编译(compile)处理过程,编译有“翻译”的意思,翻译就是翻译程序代码。
图4-23 建立流程
程序代码可以用各种编程语言来编写,这些都是为了让程序员容易阅读、理解,但对于机器来说完全不能理解,将这些用编程语言写的程序代码翻译为机器能懂的机器语言就是所谓的编译了。
编译处理后,就生成了机器能理解的文件,这些计算机能理解的文件是由“0”和“1”组成的,被称为二进制文件。编译过生成的二进制文件,以【.o】为后缀。
2. 连接
编译后,将生成与代码文件数目对应的二进制文件。下一步需要将这些二进制文件组合成一个程序文件。这个处理被称为连接(link)。连接就是将所有的二进制文件都连接到一起。
连接时,使用的框架的信息也会附加进来。这样,程序执行时,框架的有关程序会自动被调入。
完成连接后的文件被称为可执行文件,顾名思义就是能够直接运行的文件了。实际上从终端窗口中是可以启动这个程序,但是动作还是不很完善。
3. 绑定
可执行文件还不能很完美地运行,这是因为像图片资源、用户界面、应用程序设置信息等必需的信息还有没有导入进来。
将可执行文件与上述资源文件集中在一起的动作,被称为绑定(bind)。绑定后获得的就是iPhone应用程序或Mac应用程序了。生成的文件以【.app】作为后缀。
即经过编译(compile)→连接(link)→绑定(bind)的步骤后,才完成了iPhone应用程序或Mac应用程序的开发。
4.6.3 gcc
上面分别介绍了建立(build)的各个步骤,每个步骤都需要相应的应用程序,编译对应的就是编译器,连接对应的为连接器。
在Mac OS X的开发环境中(iPhone应用程序也是在Mac OS X中开发的),编译器、连接器以及绑定时使用都是名为gcc的应用程序。gcc即GNU C Compiler,是一个开放源码的编译器,除了用在Mac OS X,还广泛应用于各种计算环境中。
gcc程序是一个命令行应用程序。可在终端上输入gcc,以命令行的形式运行它。最原始的做法就是一个个编译代码文件,最后连接在一起。但是,随着代码文件的数量增加,这样的方法会越来越麻烦。这样在Mac OS X中提供了将这些编译、连接的步骤结合在一起进行管理的应用程序,这就是Xcode。