是否可以编写脚本将源文件目录添加到 Xcode 项目中进行编译?

Posted

技术标签:

【中文标题】是否可以编写脚本将源文件目录添加到 Xcode 项目中进行编译?【英文标题】:Is it possible to script adding a directory of source files into an Xcode project for compile? 【发布时间】:2017-11-27 07:26:34 【问题描述】:

作为 Unity 构建过程的一部分,我们将 Unity IDE 生成的 C 源文件目录拖放到我们的 ios XCode 项目中。我们希望 XCode 为文件“创建组”,因为在使用“创建文件夹引用”时编译器似乎无法识别头文件。

我想知道是否有一种方法可以编写脚本,这样我们就不必每次都手动将目录拖到 XCode 中。仅当我选择“创建文件夹引用”时,添加“复制文件”构建阶段似乎才有效。当我选择“创建组”时,“复制文件”部分仍然为空。这是 XCode 中的错误还是我做错了什么?我正在使用 XCode 9.1。

我知道 Apple 建议创建一个框架,而不是复制到源文件目录中。我们不能这样做的原因是因为我们依赖于 Unity 构建过程,它为我们提供了一堆 C 源文件。谢谢!

【问题讨论】:

我认为这是一个有效的问题。无论如何,不​​给出理由的否决票不是很有建设性的! 也许是一个有效的问题,但有点不清楚。您的目标是添加要编译的文件吗?或者是这些资源文件或两者兼而有之。看起来像是要编译的文件。您是否还想正常使用 Xcode(即,在您所说的拖放操作之外添加任意文件?)。为什么存在这样的需求(即,为什么文件变化如此之大以至于您需要这个?)。只是因为这让我对一般的构建过程有点怀疑...... 这些是编译时需要存在的 C 源文件。我们仍然需要能够独立地对 XCode 项目进行其他更改。每次我们创建新的 Unity 构建时,这些 C 源文件都会更改。 这和“复制”有什么关系??您无需“复制”任何内容即可使其成为项目的一部分。您只需将其添加到项目中即可进行构建。 你是对的。我编辑了这个问题,不使用“复制”这个词。谢谢。 【参考方案1】:

在 Xcode 中,您可以在选择应用目标时在“构建阶段”选项卡下管理构建过程。除非某些阶段另有规定(例如:您可以选择仅在应用首次安装时运行某个阶段),否则这些任务会在您的应用的每次构建中执行。

单击 + 按钮,您可以添加“复制文件阶段”,将您选择的文件复制到应用程序中。添加文件时,您可以选择添加的文件夹是否会创建组或文件夹引用。

您还可以添加自定义的“运行脚本阶段”并编写一些 bash 代码来做任何您喜欢的事情,甚至可以运行一个外部脚本来完成更复杂的工作。

【讨论】:

添加“复制文件”构建阶段似乎只有在我选择“创建文件夹引用”时才有效,但文件夹引用对我们没有用,因为显然编译器不会识别源文件如果它们位于文件夹引用而不是组中。当我选择“创建组”时,“复制文件”部分仍然为空。这是 XCode 中的错误吗?我正在使用 XCode 9.1。 关于“运行脚本阶段”方法,我能够在这个问题的答案中找到一个示例脚本,但它似乎只适用于添加图像或数据等资源。您能否提供一个示例脚本,用于在 xcode 项目中包含源文件以供编译时使用? ***.com/questions/1371351/… 没有具体的例子,但如果它适用于资源,它应该相对容易处理各种文件。您可以在 Xcode 项目中创建一个空的参考文件夹,然后在构建步骤中使用您的脚本复制文件。一个重要的注意事项 - 如果您想要编译复制的文件,您需要将此阶段定位在“编译源”上方(您可以通过拖动阶段重新排序)。这适用于复制和运行脚本阶段类型 我认为不可能为此使用参考文件夹,因为必须可以访问文件进行编译。如果我将文件复制到“文件夹引用”中,编译器将无法识别它们。我必须选择“创建组”,但我认为没有任何方法可以编写脚本。我发现的唯一可能的方法是使用 rb-appscript,如下面的链接,但我试过了,似乎任何版本的 XCode 都不支持它。 ***.com/questions/6685637/… 当您在复制阶段使用创建组时,您确保首先定位它? (在编译源阶段之上)。否则我没有更好的建议:)【参考方案2】:

Xcode 可以使用“构建阶段”选项卡将资源文件(例如图像)添加到项目文件中,但这不适用于需要在编译时识别的源代码文件。幸运的是,我设法遇到了一个不错的社区开发的 Python 脚本,它确实允许我们这样做。

https://github.com/kronenthaler/mod-pbxproj

使用此脚本,我们可以对项目文件进行各种修改,包括添加或删除文件。

有关可用操作的完整列表,请参阅此链接:

https://github.com/kronenthaler/mod-pbxproj/wiki

【讨论】:

【参考方案3】:

xcode->Build Phases-> 点击 (+) 按钮 -> New Copy Files Phase / New Run Script Phase

【讨论】:

您能详细说明一下这个答案吗?我知道如何调用脚本,但不确定如何编写该脚本,以便将源文件复制到 Xcode 项目中进行编译。 Xcode 似乎不再支持 rb-appscript 。也许您可以详细说明您设想的脚本是什么? 我之前有添加以下脚本的经验。 ,> 该脚本用于剥离 Realm 框架的框架,似乎与我关于复制源文件进行编译的问题无关。

以上是关于是否可以编写脚本将源文件目录添加到 Xcode 项目中进行编译?的主要内容,如果未能解决你的问题,请参考以下文章

PHP脚本循环遍历目录中的所有文件?

如何将 JPEG 添加到 Xcode 中的资产目录?

如何将 Xcode Bot 集成编号添加到构建脚本中

CentOS 7 添加开机启动项

使用 SPM 在 XCode11 中添加本地依赖项

是否可以将构建脚本的输出定向到 Xcode 构建日志?