首页 » iOS编程基础:Swift、Xcode和Cocoa入门指南 » iOS编程基础:Swift、Xcode和Cocoa入门指南全文在线阅读

《iOS编程基础:Swift、Xcode和Cocoa入门指南》6.3 项目文件及其依赖

关灯直达底部

项目导航器(Command-1)中的第1项表示项目本身(在本章之前创建的Empty Window项目中,它叫作Empty Window)。以层次方式依赖它的则是用于项目构建的各种条目。这些条目与项目本身都对应于磁盘上项目目录中的条目。

为了了解这种对应关系,我们同时在Finder和Xcode项目窗口中看一看。在项目导航器中选中项目清单,然后选择File→Show in Finder。Finder会显示出项目目录中的内容(如图6-6所示)。

图6-6:项目导航器与项目目录

然而,绝对不要在Finder中修改项目目录中的任何文件,除了双击项目文件以打开项目。不要将任何文件直接放到项目目录中。不要删除项目目录中的任何文件。不要重命名项目目录中的任何文件。重申一次,不要修改项目目录中的任何文件!请通过Xcode的项目窗口来处理项目(如果你是个Xcode超级用户,那么你应该清楚何时可以违背该原则。但现在请严格遵守该原则)。

之所以会有上述警告,原因在于项目期望项目目录中的文件能够符合一定的格式。如果直接在Finder中对项目目录进行修改,那么项目目录就会被破坏,这也会破坏项目。当在项目窗口中工作时,Xcode本身会对项目目录做必要的修改,这不会导致任何问题。

项目目录中最重要的文件是Empty Window.xcodeproj。它是项目文件,对应于项目导航器中所列出的项目。Xcode关于项目的所有信息(包含了哪些文件以及如何构建项目)都存储在该文件中。要想从Finder中打开项目,请双击项目文件。此外,还可以将项目目录拖曳到Xcode的图标(位于Finder、Dock或应用目录中)上,Xcode就会找到该项目文件并将其打开;你永远都不需要打开项目目录!

项目导航器中显示的分组与文件是按照层次结构依赖于项目文件的,它们对应于磁盘上的文件,这一点可以通过Finder看到(图6-6)。回忆一下,分组是一个技术术语,对应于项目导航器中所显示的类似于目录的对象:

·Empty Window分组直接对应于磁盘上的Empty Window目录。项目导航器中的分组并不一定对应于Finder中磁盘上的目录;同时,Finder中磁盘上的目录也不一定对应于项目导航器中的分组。不过在该示例中,二者之间存在着对应关系!

·Empty Window分组中的文件(如AppDelegate.swift)对应于磁盘上Empty Window目录中的真实文件。如果创建了其他代码文件(在实际开发中,你肯定会在项目开发的过程中创建文件),那么你会将这些文件放在项目导航器的Empty Window分组中,这样它们就会位于磁盘上的Empty Window目录中。(然而这么做并不是必需的;文件可以位于任何地方,项目也不会出现任何问题。)

·Empty Window分组中的两个文件Main.storyboard与LaunchScreen.storyboard位于Finder的Base.lproj目录中,该目录并没有出现在项目导航器中。这与本地化有关,我将在第9章对其进行介绍。

·项目导航器中的条目Assets.xcassets对应于磁盘上专门的结构化目录Assets.xcassets。这是个资源目录;你可以在Xcode中向资源目录添加图片,它会在磁盘上维护该目录。在本章后面以及第9章将会详细介绍资源目录。

你可能想要找到诸如此类的所有不一致的地方。千万不要这么做!记住,不要直接通过Finder操纵磁盘上的项目目录。你已经看到了,并且知道它里面有内容,同时也清楚它与项目导航器之间存在一定的关联关系。将注意力放在项目导航器上,在这里修改项目,这样就不会出现任何问题了。

在开发项目和向其中添加文件时,你可以随意向项目导航器中添加额外的分组。分组的目的旨在让项目导航器更好用!它们并不会影响应用的构建方式,在默认情况下,也不会对应于磁盘上的任何目录;它们只是为了在项目导航器中更方便地进行组织。要想创建新的分组,请选择File→New→Group。要想重命名分组,请在项目导航器中将分组选中,然后按下回车键使分组名变成可编辑状态。比如,如果有些代码文件与应用有时会弹出的登录界面相关,那么你可以将其放到Login分组中。如果应用包含了一些声音文件,那就可以将其放到Sounds分组中,诸如此类。

Products分组及其内容并不对应于项目目录中的任何一项。Xcode会生成对可执行包的引用(通过构建项目中的每个目标生成),按照惯例,这些引用会出现在Products分组中。

另一个便捷的分组是Frameworks分组,它会列出代码所依赖的框架。代码会依赖一些框架,但在默认情况下,这些框架并不会出现在项目导航器中,项目导航器中没有Frameworks分组,因为这些框架并没有显式链接到构建中;相反,代码会使用模块,这意味着文件顶部的import语句就可以隐式链接了。不过,如果显式链接到了某个框架,那么它就会列在项目导航器中;接下来,你会创建一个Frameworks分组,将这些框架放到该分组中。本章后面将会对框架进行介绍。