【问题标题】:How should I organize my Xcode project files?我应该如何组织我的 Xcode 项目文件?
【发布时间】:2010-08-28 10:25:55
【问题描述】:

我正试图围绕 Xcode 的文件组织——或者缺少它。我可以在项目中做我想做的所有事情,并且所有“假”文件夹和结构看起来都很棒。我去看看文件系统和繁荣 HUGE 混乱。我已经尝试在选中Create Folder Reference for any added folder 选项的情况下导入文件,这确实有效。我在 Xcode 和文件系统中都得到了我想要的结构。

问题:当我将文件添加到文件系统上的文件夹中时,该文件夹是 Xcode 中的文件夹引用,当我去查看时,它不在 Xcode 中,甚至在重新加载项目后也不在 Xcode 中。文件夹引用中的文件/子文件夹不能在 Xcode 中移动。当我在文件系统上移动它们时,我在 Xcode 中得到红色链接(找不到文件?)。

我如何保持一个有组织的项目文件系统?如何设置项目以仅识别文件夹并在我的项目中显示其(当前和最新的)文件和子文件夹?

我似乎遇到的另一个问题是,如果我使用文件夹引用并更改文件,除非我进行完全清理和重建,否则该文件不会在我的应用程序中更新。如果我不使用文件夹引用,所有我的文件都被转储到应用程序包的资源文件夹中,而不是我项目中的良好结构。

我应该关心吗?我应该只使用假文件夹,让一切随处可见而不关心吗?我的应用程序包会一团糟,文件系统会一团糟,但一切都会好起来的……我希望?

编辑:

我想要一个有组织的文件系统的最大原因是资源文件(图像、声音、其他数据文件等)没有在 Xcode 中编辑。我必须通过文件系统在 3rd 方应用程序中访问它们。如果它一团糟,在其他 3rd 方应用程序中更难找到和维护。

如果我想要如下结构,也会发生什么:

  • 图像/背景/名称.png
  • 图像/图标/名称.png
  • 图片/标题/名称.png

我应该使用长文件名而不是文件夹来组织吗?

  • Images_Backgrounds_Name.png
  • Images_Icons_Name.png
  • Images_Titles_Name.png

【问题讨论】:

  • 文件系统组织很重要的一个原因是源代码版本控制系统同步文件系统。
  • @Anand - 虽然 Xcode 内置了 git,所以它也被抽象掉了。

标签: xcode filesystems organization


【解决方案1】:

我也希望 Xcode 自动保持自身和文件系统同步。

这么多,我花了一个小时手动完成一个名为acani-iphone on GitHub的项目。基本上,我只是使用 Finder 移动了一些文件,随心所欲地创建了新文件夹。然后,我切换回 Xcode,发现我刚刚移动的文件现在是红色的(因为 Xcode 认为它们是我移动它们的位置,因此找不到它们)。

更新:我刚刚发现我可以然后单击红色组或文件,按 CMD+i(从上下文菜单中获取信息,您可以通过右键单击红色文件或组来打开它),然后在“常规”选项卡下,单击“选择”,然后在文件系统中找到我将文件移动到的位置。但是,我没有这样做,这就是我所做的,它也有效:

然后,我只是突出显示了 Xcode 中的所有红色文件,然后按 command + delete 删除损坏的(红色)引用。然后,我右键单击要将文件添加到的组(通常是同一组),然后单击 Add > Existing Files...。然后,我在文件系统的新位置找到了相同的文件。我没有选中“将项目复制到目标组的文件夹(如果需要)”,我选中了单选按钮“递归地为任何添加的文件夹创建组”,如果我添加的文件被用于构建,我检查了添加到目标 acani acani iPhone 应用程序。

我一次用一个文件目录完成上述操作。有几次我更加激进,一次添加多个目录,因为我几乎总是选择单选按钮“递归地为任何添加的文件夹创建组”。

我发现文件 acani_Prefix.pchacani-Info.plist 必须保留在根文件系统目录中(尽管您可以设置一些设置以允许这些文件位于其他位置,就像我认为您可以添加一行到acani-Info.plist,以便您可以移动/重命名acani_Prefix.pch,但我可以在文件系统的根目录中使用它们。

这样做很烦人,也许甚至不值得麻烦,也许是拖延,但展望未来,在将现有文件添加到 Xcode 之前,我将首先确保它们位于我希望它们位于的位置文件系统。

【讨论】:

    【解决方案2】:

    好的,下面是它的工作原理:

    Xcode 不知道任何文件,除非你告诉它它们。也就是说,即使您在查找器中手动添加文件(通常是一个坏主意)到包含 Xcode 项目中文件的文件夹,它也不知道它们,直到您“将现有文件添加到项目”。

    将现有文件(或文件组)添加到项目(例如,您刚刚下载的一些代码)的最佳做法 (imo) 是选择“添加现有文件”,然后“将项目复制到目标组的文件夹 (如果需要)”在下一个对话框中,如果您希望您的项目拥有相关文件的副本,而不仅仅是对它们的引用(两者都有优点和缺点)。

    不要太担心 Xcode 中文件夹的命名或放置内容的位置,但请尽量保持在您的环境中有意义的标准。例如,我总是将我编写的类放在“类”中,并为我下载的用于项目的任何库代码提供单独的文件夹。我总是将图像/图标/音频等放入“资源”。

    简而言之,如果您希望项目文件夹中的内容与项目中的内容大致相同,请始终通过选择“将项目复制到目标组的文件夹”来添加现有文件

    XCode 的灵活性是有意为之的。由您决定您喜欢如何组织事物。

    【讨论】:

    • hmm.. 你所说的 XCode 中的灵活性我认为是一个主要的主要错误。为什么我希望以 1 方式在项目中组织事物,并且在 IMO 中完全在文件系统上进行 FUBARed 操作? 将项目复制到目标组的文件夹 不会在文件系统上的项目文件夹中组织文件,它只是将从项目外部添加的文件复制到项目文件夹的大混乱中。跨度>
    • 记得提交一份关于它的错误报告。除非您向正确的人投诉,否则它不会改变。
    【解决方案3】:

    我应该关心吗?我应该只使用假文件夹并让 一切都去哪儿了,不在乎?我的应用程序包将是 乱七八糟,文件系统会一团糟,但一切都会好起来的……我会的 希望?

    IMO 没有... :) 基本上。重点是 XCode 旨在为您提供最佳的编程体验。如果 Apple 希望您在实际文件系统中物理组织所有文件和文件夹,那么他们就会这样做。

    我真的不明白您为什么要以这种方式组织所有文件和文件夹?它对应用程序的运行没有任何影响,XCode 中的“假”文件夹(组)为您(和其他人)提供了必要的视觉帮助,以便在您的类和其他资源中导航。在您的文件系统中正确组织它(如您所见)肯定会使事情变得更加困难?

    【讨论】:

    • 查看我上面的编辑以了解我的推理。不幸的是,我正在查看是否要使用 XCode,然后我只需要说 F 并处理 FUBARed 文件系统组织。如果我想为 mac 开发,我需要使用 XCode,所以我想我会处理......这违背了我 20 年的编程经验,让项目文件夹变得一团糟。
    • 大声笑......好吧,他们正在改变(正如鲍勃迪伦曾经说过的那样)。我的背景是 web 开发,你所有的图像都在 images 文件夹中,你有一个单独的 psd,当你想使用图像时,你保存到 images 文件夹,所以我建议你这样做:有 Development/MyAppProject 有 @ 987654322@ 和 /MyAppProjectResources 在里面。在 MyAppProjectResources 中,您拥有 PSD 和 XML 以及其他任何内容的结构化文件系统,当您在实际应用程序中使用它们时,您可以保存到 /MyAppProject 文件夹或拖放生成的文件。
    • 您想要整理文件的原因是因为任何外部工具——比如 Git 或 Fireworks——都使用文件系统。
    【解决方案4】:

    使用Synx

    它会重新排列磁盘上的文件以匹配 Xcode 组。我尝试在提交任何更改 Xcode 组的代码之前运行它,它使项目保持整洁。

    【讨论】:

      【解决方案5】:

      如果 Xcode 可以保持自身和文件系统同步,那就太好了。不幸的是,它没有。想要它的原因之一是 SCCS 中的层次结构与 Xcode 中的层次结构相匹配。

      我回退到在 Xcode 中组织事物,并将文件系统分离成“类”和“资源”。

      【讨论】:

        【解决方案6】:

        这在 Xcode 9 中发生了变化。来自release notes

        项目导航器中的组现在与 文件系统中的目录。 (28612132)

        • 在项目导航器中的组之间拖动文件会移动文件系统中的文件并更新任何关联的 SCM 工作副本。
        • 当一个组连接到文件系统中的文件夹时,创建、重命名和删除组会更新相应的文件和 文件系统中的文件夹。
        • 要删除文件系统中组和文件夹之间的连接,请选择组,然后打开文件检查器并 点击清除路径按钮 (X)。
        • 要添加或更新从文件系统中的文件或文件夹到项目中的文件或组的关联,请选择文件或 组,打开文件检查器,然后拖动相应的文件或 文件夹到文件检查器中的位置部分。

        新行为可从“带有文件夹的新组”命令(可能仅显示为“新组”)中获得,而旧行为可从“新组文件夹”中获得命令(也可能显示为“新组”!)目标文件夹中任何现有组的主要用法似乎决定了哪个命令被标记为“新组”。这有点令人困惑,但是如果您习惯于选择其中一个,那么您的想法似乎是您可以坚持使用默认的“新建组”命令。 (见rob mayoff's far more thorough explanation.

        【讨论】:

          【解决方案7】:

          我所做的是创建一个组来代表每个文件夹,然后在向其中添加文件之前,在右侧面板的第一个选项卡中,紧挨“路径”下方,有一个图标允许您选择文件夹。在该文件夹对话框中,我创建了一个与该组匹配的文件夹并选择它。

          在 xcode3 中,这会导致从该路径开始的新建和添加文件对话框。这使它值得付出努力。但是,Xcode4 不遵守此设置。因此,它是否有任何真正的价值值得怀疑。我也希望 XCOde 能够支持更好的文件系统组织。

          考虑到文件名在项目中必须是唯一的,无论组和文件夹如何,有理由接受默认的平面文件夹结构并使用组以方便 IDE。很难来自其他不赞成这一点的平台。

          【讨论】:

          • 虽然我同意这种方法似乎可以解决单个开发人员的问题,但我认为它会导致一组开发人员之间的代码库组织性较差。与他人合作时,有一个标准很重要。根据我的经验,最好的标准是步骤最少的标准。
          【解决方案8】:

          我觉得你和个人不能不关心实际结构而只依赖工作区。

          真正很棒的是一个工具,它将检查工作区结构并相应地重新组织文件系统,处理文件夹的任何重命名等。这将是一个经典的解决方案,恕我直言,应该实现为一个选项,因为我们在移动时重新组织我们的项目。

          尽管 xcode4 可与 git 和 SVN 一起使用,但有些问题可能是源代码控制。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-20
            • 1970-01-01
            相关资源
            最近更新 更多