Xcode重复复制bundle资源



我有一个关于Xcode和bundle资源拷贝的问题。

我目前正在进行一个大型资产库项目。因此,一个干净的安装或捆绑资源的更改保证了"新"捆绑资源的副本。

然而,我目前面临的问题是,每次构建应用程序时,Xcode都会复制我整个资产库的一部分。这种行为非常奇怪,因为在我工作过的所有项目中,Xcode只在资源发生更改、是干净安装或有以前没有复制过的新内容时才复制资源。

然而,在这种情况下,它复制了干净安装上的所有资源(预期)。然而,在每个连续的构建中,它仍然会复制一些文件。现在这非常奇怪,因为没有一个文件更改,而且它并没有复制所有文件,只复制了其中的一小部分。还有一件事——如果我在模拟器上运行相同的应用程序,使用相同的配置,复制就不会发生(moar奇怪)。

是否有一些设置我可以更改,或者我可以包含一个标志来防止这种情况发生?

提前感谢您的帮助!

干杯!

自从提出这个问题以来已经一个月了,我设法找到了一种"变通方法"解决方案。

现在,我之所以把它作为公认的答案,主要是因为截至撰写本文时,还没有发布其他答案/解决方案。如果有更好的答案发布(或者我有更新),我一定会把更好的答案标记为已接受的答案。

无论哪种方式,如果您拥有一组在连续构建中不会发生变化的超大资产,那么这种"变通方法"都会起作用。

我正在做的项目有很多音频和视频文件已经准备好了,不会改变(除了偶尔重新录制或类似的东西)。

所以,正如我的问题所说,Xcode正在复制资源的一个子集。理想情况下,一旦资源被复制(并且没有更改),就不会在连续的构建中重新复制(至少不应该重新复制)。在我的情况下,它在每次连续运行时都会被复制,导致我的总构建开始时间大约为15~20分钟。我还想指出,无论我们在构建阶段是否使用"运行脚本",或者我们的Xcode项目中是否有媒体,我们都面临着同样的问题。

解决方案:我所做的是清理我的项目,删除应用程序,并重新安装。所以,第一次,它用应用程序复制所有文件。此外,在我的Xcode项目中,assets目录是NOT。我们添加了一个"运行脚本"阶段,在该阶段,我们运行rsync,在每次构建过程中将媒体从媒体文件夹复制到应用程序。

现在,一旦应用程序完成了新的构建;它会复制所有需要的媒体文件。

然后,REMOVE/DISABLE脚本,在Xcode中执行Clean(命令+shift+K),然后再次运行该项目。这一次,由于没有脚本正在运行,而且Xcode已经执行了一次清理,现在它认为所需要做的就是重新编译二进制文件,所以它构建得非常快。由于我已NOT删除了应用程序,媒体文件夹仍在我的应用程序中,我的构建开始时间现在约为30秒~1分钟(包括沙盒和代码签名)。代码签名和"沙盒"应用程序仍然需要时间,但这比每次运行都要等待15到20分钟要好得多。:)

希望这能有所帮助!

我也遇到过类似的情况。此外,我的应用程序中有6000个资源,即使列出其中一些(不是复制)也有点慢。我找到了另一种解决方法(与您的方法非常相似,但执行起来有点容易)。它受到了你的启发,所以非常感谢你!

我复制了该项目的目标,将其捆绑包id设置为原始id(它是从构建设置中自动设置为${PRODUCT_NAME}的),并从"复制捆绑包资源"部分删除了所有资源。第一次(从设备应用程序中删除后)我需要启动原始目标及其资源,但之后我可以在资源仍在设备上时构建复制的目标。

一些优点:

  • 在两个目标之间切换非常容易
  • 不需要两个人写任何脚本(这就是我没有使用您的解决方案的目的)

有趣的数字:

  • 从"Cmd+R"到加载屏幕显示捆绑包资源58秒
  • 20秒,间隔相同,"复制捆绑资源"部分为空。不如你的进步好,但仍然会有所不同

希望这也有帮助:)

最新更新