【问题标题】:Xcode - Automatically add all files in a folder to a targetXcode - 自动将文件夹中的所有文件添加到目标
【发布时间】:2011-02-21 13:55:58
【问题描述】:

在 Xcode 中,有没有办法指定文件夹中的所有文件都由目标编译。例如。 “Test”目标自动编译“Tests”文件夹中的所有文件,而“App”目标编译“Sources”文件夹中的所有文件。

今天,我这样做的方式是在每次创建文件时将文件添加到目标。这感觉有点容易出错和多余,因为文件已经组织在正确的文件夹中。

谢谢。

【问题讨论】:

    标签: xcode build build-process build-automation


    【解决方案1】:

    这在 Xcode 中完全被破坏了。通过文件夹引用添加文件夹(@Pavel 的回答)应该是正确的 - 但它只是不起作用。另见https://stackoverflow.com/a/42600782/2518722。我正在使用 Xcode 8.3(更新:在 Xcode 11 中仍然被破坏),但它之前也被破坏了很多代。

    没有完美的解决方法,但我就是这样做的:

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

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

    但是,没有办法刷新组。 (如果我在这里遗漏了一些明显的东西,请告诉我。)因此,如果您已将新文件添加到目录中,则必须在 Xcode 中删除该组并在这些文件出现之前重新添加它。这显然很不方便,但至少不太容易出现用户错误 - 并且比手动逐个添加文件要好。

    不得不说,开发环境的一个如此简单而必要的功能在这里被破坏了,这让我难以置信。

    【讨论】:

    • 这个bug有雷达吗?我假设它在 XCode 9 中仍然存在问题。
    • 我还没有检查过 Xcode 9。老实说,我发现 Xcode 中充满了 bug,其中很多都被报告但从未解决,以至于我对 Apple 的开发过程完全失去了信心。
    • 解决不可原谅的情况的好方法,让我无需逐个添加文件或复制它们即可工作。
    • 没有损坏 - 因为它从来没有那样工作过,并且超出了 Xcode 定义。
    • @MottiShneor 这是一个奇怪的未损坏定义。 更糟糕说 xcode 本来打算以这种方式工作(破坏 requirements / design)然后直接将其识别为错误
    【解决方案2】:

    当您将文件添加到 Xcode 项目时,您将在文件选择对话框中有两个选项可供选择:

    1. 为任何添加的文件夹创建组。
    2. 为任何添加的文件夹创建文件夹引用。

    您需要选择第二个选项。在这种情况下,Xcode 将始终反映对所选文件夹的文件和子文件夹的更改。

    这个问题似乎是很久以前提出的,但它仍然在谷歌搜索中排名第一,所以希望它对某人有所帮助。

    【讨论】:

    • 不幸的是,它不再起作用了。 Xcode 不会将文件夹引用添加到“编译源”。不确定 Xcode 4,但 Xcode 5 肯定不行。苹果删除了许多方便的功能,例如这个并将文件夹拖到另一个项目中。
    • 在 XCode 7.3 中,您应该添加文件夹,然后在按下左侧的“选项”按钮之前。您应该按下它并选择为任何添加的文件夹创建组选项。
    【解决方案3】:

    您可以使用此功能将多个文件添加到目标。但它需要一些工作来过滤你想要的文件。

    Project > Target > Compile Sources > cmd+A 选择所有文件 > 过滤 .m 文件 > 点击“添加”

    与其他资源类似,

    Project > Target > Copy Bundle Resources > 过滤 .png .wav .strings .xib .storyboard 等 > 点击“添加”

    【讨论】:

      【解决方案4】:

      以下是有关 stackoverflow 尝试处理此问题的其他一些问题:

      Add files to an Xcode project from a script?

      Automatically adding generated source files to an xcode project

      【讨论】:

      • 这些都与这里无关。第一个是关于资源文件的,Akshay 询问了源文件。第二个也不相关,该项目的链接已失效,并且无法很好地进行依赖跟踪;在构建开始后修改 Xcode 项目就像在编译源文件时修补二进制编译器。它可能会起作用,尽管我一秒钟都不会依赖它。
      • @Mecki minit 项目被删除,但github.com/expanz/xcode-editor 项目还在。修改 Xcode 项目更像是修改 make 文件,可能不是最安全的做法,但可行。通过正确组合工具和流程,它将起作用。这取决于你想做什么。
      【解决方案5】:

      我只是按类型排序,所以我所有的源文件都是连续列出的。

      然后我按住Shift+Cmd 并按向下箭头键选择我想要的所有文件。

      一旦选择,我可以检查所有以添加到特定目标:)

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 但是这样,每次创建新文件时,都需要指定目标。如果有一种方法可以根据文件所在的文件夹自动设置此目标,那就太好了。那么,就不需要每次都为文件分配目标,因为它们会在正确的文件夹中。例如。测试,上面的 App 示例。
        • @Akshay:我明白你在说什么——是的,这可能会节省一点时间。您可以使用 Apple Bug Reporter 提出这样的功能请求。
        • 刚刚从谷歌搜索中发现了这个——我敢打赌,一定有办法做到这一点。想做同样的事情。
        • 您可以尝试在 Apple 的 Xcode 邮件列表中询问:“Xcode 用户”
        【解决方案7】:

        您可以采取的一种方法是使用 CMake 为您生成 Xcode 目标。

        详情:CMake - Automatically add all files in a folder to a target?

        另一个可能的途径是配置自定义构建阶段。

        【讨论】:

          【解决方案8】:

          据我所知,Xcode 中没有关于此的错误,并且 Xcode从不支持这样的机制(根据文件系统中的可用性)。

          Group 变体(groups-representing-a-folder vs. "regular" groups)仅允许您灵活地调整项目树的外观 - 如果它紧跟磁盘上的存储库,或者更加“人类可读”和描述性 - 无论源在存储库中的位置如何。

          我说的是我使用过的所有 Xcode 版本 - 即 v1.0b2 到 v11.3

          无论如何,我承认拥有这样的机制作为一项新功能会很好(我们可以为此向 Apple 承诺)。

          现在的一种方法是构建一个小的新“编译器”,其输入是文件夹路径,其“生成的代码”将是该文件夹中的一组源文件。如果我们将这样一个“编译器”作为构建规则添加到我们的目标中——我们可能会达到预期的效果。

          如果您想深入了解这一点,请遵循 Protobuf 可以添加到 Xcode 项目中的方式,以及如何在 Xcode 目标中处理 CoreML 模型。

          【讨论】:

            【解决方案9】:

            Xcode 可以使用 shell 脚本进行扩展。您可以将 shell 脚本设置为在构建时运行,这样您基本上可以让 xcode 做任何您想做的事情。你只受到你的 shell 脚本能力的限制,我相信你也能找到帮助。

            【讨论】:

            • 那会是什么样子?当然它不应该一直重新编译所有文件,等等。
            猜你喜欢
            • 2021-12-31
            • 2013-12-17
            • 2015-10-25
            • 2013-01-12
            • 2019-05-13
            • 1970-01-01
            相关资源
            最近更新 更多