3

我有一个关于 Xcode 和捆绑资源副本的问题。

我目前正在从事一个拥有大型资产库的项目。因此,全新安装或捆绑资源的更改需要“新”捆绑资源的副本。

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

然而,在这种情况下,它复制了全新安装的所有资源(预期)。但是,在每次连续构建时,它仍然会复制一些文件。现在这很奇怪,因为没有任何文件发生变化,而且它没有复制所有文件,只复制了其中的一小部分。还有一件事 - 如果我在模拟器上运行相同的应用程序,并使用相同的配置,则不会发生复制(莫名的奇怪)。

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

在此先感谢您的帮助!

干杯!

4

2 回答 2

4

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

现在,我将其作为已接受的答案的原因主要是因为在撰写本文时尚未发布其他答案/解决方案。如果发布了更好的答案(或者如果我有更新),我一定会将更好的答案标记为已接受的答案。

无论哪种方式,如果您拥有一组不会在连续构建中发生变化的超大型资产,则此“解决方法”将起作用。

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

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

解决方案:我所做的是清理我的项目,删除应用程序,然后重新安装。因此,第一次,它使用应用程序复制所有文件。此外,资产目录不在我的 Xcode 项目中。我们添加了一个“运行脚本”阶段,其中我们运行rsync以在每次构建期间将媒体从媒体文件夹复制到应用程序。

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

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

希望这可以帮助!

于 2013-03-06T22:56:16.843 回答
2

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

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

一些优点:

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

有趣的数字:

  • 从“Cmd+R”到出现捆绑资源的加载屏幕需要 58 秒。
  • 相同的时间间隔为 20 秒,“复制捆绑资源”部分为空。不如您的改进,但仍然有所作为。

希望这也有帮助:)

于 2013-09-19T16:43:08.610 回答