介绍
Xcode是一个强大的专业开发工具,可以简单快速、而且以您熟悉的方式执行绝大多数常见的软件开发任务。相对于创建单一类型的应用程序所需要的能力而言,Xcode要强大得多,它的设计目的是使您可以创建任何想像得到的软件产品类型,从Cocoa及Carbon应用程序,到内核扩展及Spotlight导入器等各种开发任务,Xcode都能完成。Xcode独具特色的用户界面可以帮助您以各种不同的方式来漫游工程中的代码,并且使您可以访问工具箱下面的大量功能,包括GCC,javac,jikes,和GDB,这些功能都是制作软件产品需要的。它是一个由专业人员设计的、又由专业人员使用的工具。
由于能力出众,Xcode已经被Mac开发者社区广为采纳。而且随着苹果电脑向基于Intel的Macintosh迁移,转向Xcode变得比以往的任何时候更加重要。这是因为使用Xcode可以创建通用的二进制代码,这里所说的通用二进制代码是一种可以把PowerPC和Intel架构下的本地代码同时放到一个程序包的执行文件格式。事实上,对于还没有采用Xcode的开发人员,转向Xcode是将应用程序连编为通用二进制代码的第一个必要的步骤。
无论您是已经有一定Xcode经验的开发者,还是刚刚开始迁移的新用户,都需要对Xcode的用户界面及如何用Xcode组织软件工程有一些理解,这样才能真正高效地使用这个工具。这种理解可以大大加深您对隐藏在Xcode背后的哲学的认识,并帮助您更好地使用Xcode。
Xcode 工程定义的信息
在Xcode中的所有活动,从文件的创建和编辑,到应用程序的连编和调试,都是围绕着工程来进行的。Xcode工程对创建软件产品需要用到的文件和资源进行组织,并使您可以对其进行访问。无论您创建的是什么样的产品,Xcode都会为您管理三种类型的信息:
- 源文件的引用,包含源代码、图像、本地化的字符串文件、数据模型、以及更多的信息。
- 目标,定义要制作的产品。目标将制作产品需要的文件和指令组织为一个可以执行的连编动作序列。
- 执行环境,您可以在这个环境中运行和测试软件产品。执行环境定义了运行产品时使用的程序。在很多情况下,这个程序就是产品的本身,但是不一定是这样。另外,执行环境还可以定义命令行参数和需要用到的环境变量。
Xcode工程中的三个元素按图1所示的方式关联在一起。
图1:Xcode如何使用源文件引用、目标、和执行环境。
当您执行连编和运行命令(Command-R)时,Xcode会对指定的目标进行处理,该目标则执行一系列对源代码进行操作的动作,并最终生成一个产品。然后,Xcode就用当前活动的执行环境运行该产品。
"但是请等一下" ,您可能会问:"为什么要建立一个执行环境呢?难道我们不能直接运行产品吗?" 这是个好问题。如果这仅仅是运行一个连编了的Cocoa应用程序的话,则定义一个执行环境就太过复杂了。然而,有很多产品,比如插件,要求定义一个宿主应用程序才能运行产品。执行环境也用于在调试器中运行产品。您甚至可以定义多个执行环境,以便以不同的方式运行同样的产品。
工程的组&文件列表
在Xcode的用户界面上,组成工程的源文件引用、目标、和执行环境都显示在组&文件(Groups & Files)列表中。您现在已经认识这些组件了,让我们接着看看各个组件在组&文件列表中的位置,如图2所示。下面我们看一下DotView实例程序。
如果您喜欢的话,可以自行进行操作。打开/Developer/Examples/AppKit/DotView/DotView.xcodeproj文件就可以了。
图2:组&文件列表将很多不同类型的信息封装在一个简洁的界面上
您可以看到,所有的源文件引用都在一个工程中,您可以展开工程中的每个产品,看看它们是如何组织在一起的,如图3所示。
图3:将一个产品展开可以显示其所有的连编组件,本例显示的是一个Cocoa应用程序。
同样地,您也可以展开一个目标,其内容是生成产品所需要的各个步骤,如图4所示。
图4:展开一个目标,显示生成产品需要的所有步骤。
工程漫游
组&文件列表中的源代码文件、工程、目标、和执行环境的下面是一组对工程内容进行漫游的工具。这些条目以智能组(Smart Groups)的形式存在,智能组的工作方式和Finder中的智能文件夹(Smart Folders)及iTunes中的智能播放列表(Smart Playlists)一样。这些工具如图5所示。
图5:Xcode的组&文件列表中含有几个工具,可以帮助您在工程中进行漫游。
在某些时候,Xcode的新用户会发现组&文件列表提供的功能太多了,特别是和他们在其它环境中用惯了的简单文件列表相比较的时候。然而,一旦您熟悉了这些项目的功能,工程面板就会变成一个强大的工具,帮助您访问Xcode提供的所有功能。
深入理解源文件引用
现在,您已经了解了Xcode工程的基本组件,是时候将我们的注意力关注在源文件引用上了。如果您双击一个源文件引用,Xcode就会弹出一个适合的编辑器,使您可以对该文件进行修改。然而,您可能可以从上面的图示中推断出来,一个源文件引用也意味着一套指令,在源文件被加入到某个目标的时候执行。举例来说,当您将一个Objective-C源代码文件(带有.m后缀)加入到工程、并和某个目标相关联的时候,该文件将会被加入到目标中的
编译源代码(Compile Sources)步骤中,由GCC编译器进行处理。
您可以通过Xcode的工程界面来控制一个源文件引用是否为某个目标的一部分,如图6所示。
图6:Xcode界面,使您可以快速调整源文件引用和目标的关联关系。
您也可以通过源文件引用的Get Info(获取信息)窗口来调整这些设置,访问File > Get Info菜单项或者输入Command-I可以打开该窗口。该窗口如图7所示。
图7:文件引用的Info窗口,使您可以指定当前文件属于哪个目标,以及设置其它连编选项。
将之前图示的Objective-C源文件包含到活动的目标中会使其被GCC编译,并连接到最后的执行文件中。如果您不希望将它包含到最后的产品中,则简单地将它从生成产品的目标中删除就可以了。
目标是如何被处理的
现在,让我们把注意力转移到目标上,并关注目标是如何被处理的。如果您详细察看组&文件中的目标,就可以大致看出生成产品时发生了什么。图8更加详细地解释了生成DotView产品的过程。
图8:文件被加入到目标后进行的动作。
通过图9所示的连编结果(Build Results)窗口,您可以看到连编一个目标的整个工作过程。您可以访问Build > Build Results菜单项或输入Command-Shift-B来弹出连编结果窗口。
图9:连编结果窗口中按步骤显示的目标连编过程。
连编规则和设置
那么,Xcode怎么知道如何处理目标中的文件引用呢?这个问题很简单:Xcode根据与目标相关联的连编规则和设置来进行连编。缺省的规则和设置指定:任何使用GCC支持的语言写成的代码文件,都由GCC来编译。然而,如果您希望用先前的GCC版本来编译C的源代码文件,则可以通过目标的Info窗口来简单地进行设置,如图10所示。
图10:目标的连编设置和连编规则,可以在相应的Info窗口进行修改。
现在,您已经详细了解了源文件引用和目标,让我们看看Xcode工程的最后一部分:执行环境。
执行环境
我们之前已经说过,执行环境指的是产品如何在Xcode中运行。执行环境定义了Xcode应该运行什么程序,以及如何运行这个程序。您可以建立多个执行环境,以便在不同的条件下对产品进行测试。
简单地说,执行环境定义了下列内容:
- 使用什么执行文件,可能是目标连编之后生成的产品之一,或者系统中的其它执行文件。
- 要传递给执行文件的命令行参数。
- 启动执行文件之前需要在执行环境中设置的环境变量。
- 应该使用的调试器,以及如何在调试器中运行执行文件。
您可以在Info窗口中看到如何为执行文件定义这些项目,如图11所示。
图11:您可以通过执行文件的Info窗口考察产品运行的细节。