将文件移动到Xcode中的真实文件夹

181
当我开始我的项目时,我很高兴使用Xcode中的组而不是字面意义上的文件夹:由于我在Xcode中使用浏览器访问所有内容,因此东西被很好地组织,我很开心。
但是,现在该项目即将共享进行版本控制,项目文件夹本身对于那些通过终端扫描它的人来说是个恐怖展示,有大约300个文件,其中超过一半是图形。
我现在正在尝试重新组织东西,创建真正的文件夹并将它们导入Xcode。不幸的是,Xcode不会像处理组那样让我处理它们。例如,如果我右键单击添加的实际文件夹(蓝色,而不是黄色)并选择添加现有文件,它实际上不会将它们放在该文件夹中,而是将它们放在其根目录中。
同样,我无法将一个来自伪文件夹(一个组)的文件移动到真正的文件夹中:Xcode并不认为真正的文件夹是有效的移动位置。
我错过了什么?如何说服Xcode让我像使用组那样使用文件夹?这里有一个类似的问题的答案,但它实际上并没有解决我的问题,因为我正在使用现有文件。
12个回答

179

一种现代而又极简单的方法(2017年适用,Xcode 6、7、8以及有时候9也可以自动完成一部分):

如果你要将大量文件移动到一个新文件夹中,并且要保持子目录结构,那么比逐个移动每个文件要简单得多:

  1. 在Xcode文件夹树中创建新组,并按照想要的方式将文件组织到这些组中。
  2. 在Finder中创建相应的物理文件夹树,并按照步骤1中所做的方式组织物理文件。
  3. Xcode中的所有引用现在应该都是红色的(没关系!)。
  4. 在身份和类型管理器中,选择要重新定位的,然后从信息面板中单击文件夹图标:

  5. 在Finder选择对话框中,找到为此组创建的相应新文件夹。这个组中的所有文件现在都会自动被重新发现!

很不错吧?最多只需重复这5个步骤一次,就可以为每个新组创建一个(这比逐个移动每个文件要好得多!)

额外加分项!

假设你不小心搞砸了移动操作,现在有许多文件变成了红色,并且找不到了:选择多个出问题的文件,在步骤4中截图所示的相同文件夹图标使用,找到包含这些文件的正确文件夹,它们将自动解决缺失的路径问题。


3
然而,这样做会使Git中的文件变为未跟踪状态。当然,我可以重新添加文件,但我是否遗漏了什么? - SleepNot
2
@jeraldo 不确定你使用的是哪种Git版本,但我从未遇到过这个问题。不过,您可以轻松地执行git add . - brandonscript
1
啊,我想通了!第二步对我来说有点晦涩。如果我要重写它,我会说类似于“创建一个匹配的物理文件夹树,然后使用Xcode的在Finder中显示命令来定位你在第一步中添加到新组中的文件,并将这些文件物理移动到你刚刚创建的文件夹中。”就像这样... - hkatz
我已经这样做了,但仍然收到警告“users/directory/File.* 丢失”。虽然项目仍然可以构建和运行,但我应该收到这些错误吗? - Mahmud Ahmad
尝试清理它? - brandonscript
显示剩余4条评论

122

2017年6月进一步编辑:Xcode 9会自动完成此操作,不需要特别努力。这个答案和Brandon的回答仅适用于Xcode 8及更早版本。

2016年12月编辑:现在Brandon的答案是更好的解决方案。当这个答案在2010年创建时,这是我能找到的唯一选择。我现在建议下面的Brandon's answer


事实证明,将文件移动到真正的文件夹中是可行的,尽管并不像应该那样简单。

我从这里的一个问题中获得了基本信息:Xcode组织文件和文件夹(核心数据模型对象-iPhone),但沿途学到了重要的事情。

##流程

将文件移动是一个有多个子步骤的双步骤过程:

  1. 告诉Xcode你想把文件放在哪里
  • 右击或控制点击您要移动的文件或文件组,然后选择获取信息。出现上下文菜单。出现组信息文件信息窗口。

  • 路径区域中,单击窗口最右侧的选择按钮。会出现一个对话框。

  • 导航到您要将文件移动到的文件夹。如果需要,请创建一个新文件夹。单击对话框右下角的选择按钮,然后关闭组信息/文件信息窗口。

  • 组中文件/文件的名称将变为红色,以指示Xcode找不到它们的位置。

  1. 移动实际文件
  • 在Finder(或Git)中将步骤1中选择的文件移动到您想要的实际文件夹中。

  • 切换回Xcode。文件/文件夹应该已经变成黑色。如果还有红色的,则表示您错过了将某些文件移动到正确文件夹中。

##提示 我在调整此项目中的约300个文件时学到了一些重要的事情:

  • 有些文件拒绝以这种方式移动;也就是说,当您导航到新目标时,“选择”按钮和“新建文件夹”按钮都被禁用了。解决方法是,先使用Xcode将这些文件放入一个组中(右键/按住控制键单击文件,然后选择“组”,并为组命名),然后将该组移动到新位置。在实际在Finder中移动文件之后,您可以从组中删除它们(将它们拖放到新父组/文件夹中并删除该组)。

  • 每完成步骤2中的若干文件后,请停下来并构建项目。构建将告诉您是否已经搞砸了什么,从而在您造成太大损失之前更容易地返回并修复问题。

  • 如果文件无法移动到您想要的位置——我曾经遇到过在Classes文件夹中创建的一些文件非常难以移动——您可以将它们从Finder中的旧位置拖出到方便的地方(如桌面),然后在Xcode中删除对它们的引用,最后通过右键/按住控制键单击“添加现有文件”选项重新导入它们。

  • 如果您过去使用 Xcode 删除文件的引用而不将它们移动到项目垃圾箱中,您会发现一些文件不需要被移动,而只是静静地存在。请注意不要像我一样混淆正在移动的当前一组文件的名称和旧的、不再链接的文件的名称,坚持让 Xcode 导入它们,因为您认为它很迟钝。

  • 2
    把所有文件放在同一个目录下真的让我很烦恼。谢谢你! - Curtis Shipley
    @bshirley非常正确,如果主目录中的所有文件都需要在项目中,那么可以节省很多时间。不幸的是,在涉及多个人或随着时间推移发布了很多版本的项目中,可能会有任何数量的不应该添加到项目中的文件。在这种情况下,您必须跟踪您删除了哪些文件以便恢复它们,或者类似的操作。 - Matthew Frederick
    11
    在 Xcode 4 中,我需要采取不同的操作方式-右键点击时没有看到任何上下文的“获取信息”链接。相反,我需要显示身份和类型视图(可能是我不知道的名称)。这是Xcode4标题栏中视图选项中最右边的按钮。我首先在文件系统上移动文件,然后单击路径旁边的奇怪图标,并告诉 Xcode 新文件的位置。 - Evan Pon
    6
    移动文件的问题在于,当它们已经在SVN控制下时,您需要确保使用诸如Versions或Cornerstone这样的应用程序来移动文件...否则,您将面临可怕的版本控制问题!我希望苹果可以放弃“组”这个概念,并将所有内容放在实际的文件夹中,就像Eclipse一样... - jowie
    我正在使用Android Studio和Xcode开发我的产品应用程序(Android和Swift)。在过去几年中,当我看到这两个IDE的增长时,我发现Xcode非常缓慢,并且缺少许多常见的基本功能,这真的很令人沮丧。 - Ravindra Shekhawat
    显示剩余5条评论

    104

    在Xcode 5或Xcode 6中:

    1. 在Finder中创建与你的组相对应的文件夹。
    2. 将文件移动到Finder中的这些文件夹中。
    3. 在左侧的Xcode侧边栏中选择每个标记为红色的文件。
    4. 单击"显示/隐藏实用程序"按钮以显示右侧边栏(见图)。
    5. 在"身份和类型"下,单击小按钮并选择文件位置(见图)。

    输入图像描述

    祝好运!


    1
    提示一下部分用户,如果您收到一个“在编译头信息之后进行了更改”的错误,请对产品进行清理操作,问题就会得到解决! - quantum
    我在Xcode 5.1.1中采用了以下方法将头文件移动到物理文件夹中。我成功地移动了该文件。但是在构建项目时,Xcode会显示“找不到文件”。请问你能帮忙解决吗? - Rashmi Ranjan mallick

    22

    我发现绕过Xcode令人讨厌的设计最可靠的方法是在Finder中组织所有文件,原因如下:

    1. 与Xcode的用户界面不同,Finder不会出现“错误”
    2. 一旦在Finder中组织好文件,您可以将整个Finder文件夹拖放到Xcode中,它将完全按您想要的方式进行操作,而不需要任何努力。

    即使是移动现有的Xcode文件,也可以更快地完成以下操作:

    1. 在Finder中选择文件
    2. 为它们在Finder中创建一个文件夹
    3. 将它们拖放到文件夹中(自动移动)
    4. 将Finder文件夹拖放到Xcode中(自动:创建Xcode文件夹,并添加Finder文件夹中的每个文件)
    5. 在Xcode中cmd-select每个现在看到的“红色”文件(因为您已将它们移动),然后按删除键

    注意:我从不使用“创建带有子组的拖动文件夹”选项,因为在XCode 3中,这常常会出现严重的错误并可能导致项目损坏。显然,苹果公司(依我之见)内部没有使用此功能,否则它就不可能如此容易出错;如果苹果公司不使用某个功能,通常也不安全使用它-他们测试不够充分:)


    2
    明天我要试一下这个.. 这是我一直在寻找的简单解决方案。为什么他们把它做得那么难呢?如果它只是镜像文件系统,那就会少得多混乱。谢谢! - delux247
    这是我尝试的第四个解决方案,也是唯一一个能在xcode 5.1.1中正常工作的。另外,由于某种原因,这对我的任何类别都不起作用。我不得不把它们直接移到垃圾桶里,再把它们拿出来,然后重新添加到xcode中,最终才使其工作。 - user3344977

    21

    这里有一个简单易用的命令行工具 - "synx",可以在Github上找到。

    它可以重新组织Xcode项目文件夹,使其与Xcode项目中的分组匹配。

    您可以在这里找到它: https://github.com/venmo/synx

    更新: XCode 9默认支持此功能。所以不再需要使用其他工具了!


    这是一个很棒的工具,但在大型项目中会变得非常缓慢(可能需要几分钟才能完成任务),而且似乎已经不再受支持了。 - Lukasz

    6

    Xcode 9

    看起来Xcode 9现在已经默认支持此功能。当您将文件从一个组移动到另一个组时,该文件也会从旧文件夹移动到新文件夹中。这是在2017 WWDC上宣布的。


    3

    2

    通常我会在Finder中直接将文件移动到目录中,然后在XCode中通过“获取信息”对话框修复红色命名的文件:点击“选择...”按钮并选择文件的新位置。这是我想要在XCode中移动文件时的第一反应,而且它有效。


    1

    XCode 8最简单的技术...

    假设您有逻辑组中的文件A、B、C,但想将它们移动到硬盘上的一个文件夹中。

    1. 通过Finder创建目标文件夹
    2. 使用选项面板将该文件夹添加到XCode中(文件->添加文件),选择一个文件夹引用(不是组)
    3. 在项目导航器中,将A、B、C文件从(旧)组拖到(新)文件夹引用中。XCode会将文件移动到项目和磁盘上的文件夹中。

    完成。


    1

    从Xcode 4.5开始,当您拖入文件夹结构时,它会自动转换为项目导航器中的嵌套组。然后,如果您在磁盘上查看(例如右键单击并选择“在Finder中显示”),则文件夹结构已被保留。

    我发现尝试从旧项目中修复问题只是一种痛苦。事实证明,只需删除这些文件并再次拖入即可轻松解决问题。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接