Xcode项目资源组织和结构

时间:2009-07-14 22:26:08

标签: xcode resources interface-builder

嘿伙计们我对Xcode比较陌生,有一件困扰我的事情是当我添加资源时它会被添加到我项目目录的顶级目录中。因此,例如,目前,我的所有图像都位于顶级目录中,这使得事情看起来很混乱。例如,我宁愿拥有 images / 文件夹,然后在其中包含子文件夹来存储某些内容的图片,例如 tab-bar / 图标。这可能吗?或者只是将所有内容保存在顶级目录中?

freenode的#iphonedev频道中的某个人告诉我一些关于构建过程规则的事情,它看起来太复杂了我觉得我不应该打扰,并且大多数人只是把事情放在他们的根目录中考虑解决方案的复杂性。也许它并不是那么复杂,我觉得它应该更容易。

例如,我还希望为我的观看设置一个子文件夹,例如 views / ,用于存储我的所有nib文件;目前他们都在顶级目录。我的财产清单也是如此。

如果您能告诉我会议的内容,我将不胜感激,我怀疑是将所有内容存储在顶级目录中。我指的是实际的文件系统,而不是简单地在Xcode中创建“虚拟文件夹”来组织事物,因为我的项目的顶级目录仍然是一团糟。如果可以更好地组织事情,我将非常感谢如何完成它。

我想我听说在最终版本中,整个文件结构被压缩到根目录。我并不介意这么多,我只是希望在我开展项目的过程中组织起来。我认为这是'构建规则'的内容,但我不确定如何做或做什么。

谢谢!

4 个答案:

答案 0 :(得分:20)

以下是对格雷厄姆建议的更多解释:

  • 创建图像目录
  • 在Xcode中创建图像组
  • 右键单击该组并获取信息
  • “选择...”将组的目录设置为图像目录

现在,您放入图像组的任何内容都将自动进入images目录。如果您从Xcode,其他项目或Finder中拖放,或者通过右键单击images目录添加新...,则为true。 (这假设您在信息窗格中保留默认设置“相对于组”。)

这适用于您放入该组的任何内容(NIB等)。

对于imageNamed:,您只需提供基本名称。

我的建议是保留少量文件系统目录,并且主要使用Xcode中的组进行组织。但我同意,少数文件系统目录非常有用。我将所有源代码放在Classes目录中(只是因为Apple使用了该名称;我会选择“Sources”或其他东西)。我还在顶层有一个Resources目录,通常在其下创建图像和音频目录。但我通常不会创建很多真正的目录。这使事情变得更加整洁,但是使用shell更容易grep和通配符。

除了shell工具之外,按组而不是目录进行组织的一大优势是对版本控制系统(如subversion)的影响。当您突然意识到您的“视图”组太大时,您可以重新组织它而不会受到移动文件的巨大影响。

答案 1 :(得分:5)

在Xcode 4.3.2中,接受的答案对我不起作用。看起来他们删除了“获取信息”菜单选项。相反,我这样做了:

  1. 在磁盘上创建我想要的目录。

  2. 转到文件菜单

  3. 右键点击我要添加到

  4. 的群组
  5. 选择“将文件添加到PROJECTNAME”

  6. 添加了我在(1)

  7. 中创建的目录中的文件

答案 2 :(得分:3)

IDE的生活很难。他们必须在文件系统世界之间进行调解,其中编译器及其源文件存在,以及程序员工作的 UI世界

在形成当代编码文化的旧时代,每个人,编制者和人们过去常常在文件系统中生活。所以今天我们仍然倾向于认为我们想要控制源和资源驻留在磁盘上的位置。这很好,因为我们可能需要知道编译器究竟吃了什么。

无论如何,如果你认为你的IDE只是一个有趣的源代码数据库系统的前端,如果你真的对它的功能和特性(很少是这种情况)充满信心,你可以得出结论,如果作为程序员(以及作为一个人),你只是不关心你可能过上更好生活的文件系统。

你是对的想法,因为Xcode对文件系统代码组织不是很好也不友好,而且(正确)挑剔的人会学习如何在磁盘上的 right 文件夹上移动文件,以及他们的正确的 Xcode组。如果您使用“为任何添加的文件夹创建文件夹引用”,则它具有1:1的关系。

但是你会看到许多人,以及来自Apple itsef的许多项目示例,它们使用一个简单的平面文件系统树,同一文件夹中包含所有内容。

我的建议是,您至少将公共标题和资源分组到不同的文件夹中,例如Java / Maven,但没有普遍的约定。

答案 3 :(得分:2)

实际上很容易从你想去的地方到达你想去的地方。创建images/文件夹并将所有图像放入其中。现在在Xcode的项目窗口中,图像文件变红了,因为它们不再存在。获取有关它们的信息,并“选择...”新位置。

请注意,仅仅因为您在源文件系统中移动了文件(称为$SRCROOT),所以产品中文件的使用方式没有变化。如果在移动文件之前将其复制到Contents/Resources/,则会将其复制到之后。目的地不会添加任何子文件夹。

相关问题