Xcode - 自动将文件夹中的所有文件添加到目标

47

在Xcode中,有没有一种方法可以指定一个目标编译文件夹中的所有文件。例如,“测试”目标自动编译“Tests”文件夹中的所有文件,而“应用程序”目标则编译“Sources”文件夹中的所有内容。

目前,我所采取的方式是每次创建文件时将其添加到目标中。这感觉有点容易出错和冗余,因为文件已经按正确的文件夹组织好了。

谢谢。


自从多年前,文件夹引用就已经无法使用了;按照苹果的方式看待它:“如果我们允许来自文件夹引用的文件编译,人们可能只需在Xcode中创建一次结构,然后就可以使用其他某些IDE进行开发”(更多第三方IDE选项意味着苹果赚取的钱会减少)。 - Top-Master
更多第三方IDE选项意味着苹果赚的钱会更少。是啊,因为我们花了那么多钱买Xcode。 - Michael Long
9个回答

22

在Xcode中,这个功能完全失效了。按照文件夹引用(@Pavel的回答)应该是正确的方法——但它根本不起作用。请参见https://dev59.com/7Wsz5IYBdhLWcg3w8Mir#42600782。我使用的是Xcode 8.3 (更新: 在Xcode 11中仍然失效),但在此之前的很多版本中都已经失效。

虽然没有完美的解决办法,但这是我所做的:

  1. 将目录拖入项目中
  2. 当被询问时,请按以下选项设置:
    • 选择为添加的任何文件夹创建组(即与您认为正确的相反)
    • 取消选择如有必要复制文件(因为您需要的是链接而不是副本)。

现在,共享目录中的任何文件更改都会反映在Xcode中,这很好。

但是,没有办法刷新组。(如果我漏掉了一些明显的东西,请有人告诉我。)所以,如果您向目录添加了新文件,则必须在Xcode中删除该组并重新添加才能显示那些文件。这显然很不方便,但至少不容易出错——比逐个手动添加文件要好。

必须说,我觉得在开发环境中如此简单和必要的功能如此失效是非常难以置信的。


这个 bug 有雷达吗?我猜在 XCode 9 中它仍然是坏的。 - rmooney
我还没有在Xcode 9中进行过检查。老实说,我发现Xcode充满了许多漏洞,其中许多已经被报告但从未得到解决,以至于我已经完全失去了对苹果开发流程的信心。 - HughHughTeotl
好的解决方法,让我能够工作而不必一个个添加文件或复制它们,这种情况本来是不可原谅的。 - Bogatyr
@MottiShneor 你的意思是,例如一旦添加了组,那么只需将新的源文件拖入即可添加新的源文件?在某些情况下可能会有所帮助,但对于大型目录和添加/删除多个文件来说,这种方法容易出现人为错误。最好的方法是删除并重新添加该组。 - HughHughTeotl
2
@MottiShneor 这是一个奇怪的“未损坏”的定义。说 Xcode 是有意这样工作的(破碎的要求/设计),比直接承认它是一个 bug 更糟糕。 - WestCoastProjects
显示剩余3条评论

9
当您将文件添加到Xcode项目时,在文件选择对话框中您有两个选项可供选择:
1.为添加的任何文件夹创建组。 2.为添加的任何文件夹创建文件夹引用。
您需要选择第二个选项。在这种情况下,Xcode将始终反映所选文件夹的文件和子文件夹的更改。
虽然这似乎是一个很久以前的问题,但它仍然在谷歌搜索结果的第一位,希望对某些人有所帮助。

13
很遗憾,它已经不能用了。 Xcode不再将文件夹引用添加到“编译源”中。对于Xcode 4我不确定,但是在Xcode 5中,它肯定无法工作。苹果删除了很多方便的功能,例如此功能和将文件夹拖动到另一个项目中。 - superarts.org
在XCode 7.3中,您应该添加文件夹并在按下左侧的“选项”按钮之前。您应该按下它并选择任何添加文件夹的创建组选项。 - user2067656
以苹果的方式看待它:“如果我们允许来自文件夹引用的文件进行编译,人们可能只需在Xcode中创建一次结构,然后使用其他某些IDE进行开发”(更多第三方IDE选项意味着苹果赚取的钱会减少)。 - Top-Master

5
您可以使用此功能将多个文件添加到目标中。但是需要些过滤工作以确定您想要的文件。
项目>目标>编译源代码>cmd + A选择所有文件>筛选.m文件>点击“添加”
类似于其他资源,
项目>目标>复制捆绑资源>筛选.png .wav .strings .xib .storyboard等文件>点击“添加”

2

1
这些都与此无关。第一个与资源文件有关,而Akshay问的是源文件。第二个也不相关,该项目的链接已失效,并且与依赖跟踪不兼容;在启动构建后修改Xcode项目就像在编译源文件时修补二进制编译器一样,可能会起作用,但我不会依赖于此。 - Mecki
@Mecki Minit项目已被删除,但https://github.com/expanz/xcode-editor项目仍然存在。修改Xcode项目更像是修改make文件,可能不是最安全的事情,但是可以做到。通过正确的工具和流程组合,它将能够正常工作。这取决于你想要做什么。 - ThomasW

1
我只是按类型排序,所以我的所有源文件都会连续列出。
然后我按住Shift+Cmd并按下向下箭头键选择我想要的所有文件。
一旦选择了,我就可以勾选所有内容以添加到特定目标 :)

0

是的 - 只需选择文件夹中的所有文件并使用检查器窗口(目标选项卡)。


5
但是,每次创建新文件时,都需要指定目标。如果有一种方法可以根据文件所在的文件夹自动设置目标,那就太好了。这样,就不需要每次为文件分配目标,因为它们会在正确的文件夹中。例如,上面提到的Test、App示例。 - Akshay Rawat
@Akshay:我明白你的意思 - 是的,这可能会节省一些时间。您可以使用Apple Bug Reporter来提出此类功能请求。 - Paul R
2
刚刚从谷歌搜索中发现了这个 - 一定有方法可以做到,我敢打赌。正在寻找如何做同样的事情。 - taber
你可以尝试在苹果的Xcode邮件列表上询问:“Xcode用户”xcode-users@lists.apple.com - Paul R

0

0
据我所知,关于这个问题,Xcode 没有任何 bug,而且 Xcode 从未支持这样的机制(根据文件系统中的可用性自动添加/删除目标源)。
组变体(表示文件夹的组与“常规”组)仅允许您在项目树上以视觉方式灵活地呈现 - 它应该紧密遵循磁盘上的存储库,还是更具“人类可读性”和描述性 - 无论源在存储库中的位置如何。
我说的是我使用过的所有 Xcode 版本 - 即 v1.0b2 到 v11.3
无论如何,我承认如果有这样的机制作为新功能,那将是不错的(我们可以向 Apple 请求这个功能)。
现在可以做的一种方法是构建一个微小的新“编译器”,其输入是文件夹路径,其“生成的代码”将是该文件夹中的源文件集。如果我们将这样的“编译器”作为构建规则添加到我们的目标中 - 我们可能会实现所需的效果。
如果您想深入了解此内容,请按照 Protobuf 可以添加到 Xcode 项目的方式以及如何在 Xcode 目标中处理 CoreML 模型的方式进行操作。

-1

Xcode可以使用shell脚本进行扩展。您可以设置在构建时运行shell脚本,因此您基本上可以让Xcode执行任何您想要的操作。您只受限于自己的shell脚本能力,我相信您也可以找到相关帮助。


那会是什么样子呢?当然它不应该每次都重新编译所有文件等。 - Albert

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