我对Xcode和捆绑资源副本有疑问。
我目前正在开发一个拥有大型资产库的项目。因此,干净安装或捆绑资源的更改需要保证“新”捆绑资源的副本。
但是,我目前面临的问题是,Xcode每次构建应用程序时都会复制整个资产库的一部分。这种行为非常奇怪,因为在我工作的所有项目中,Xcode只会复制资源(如果它们已经更改,或者它是一个干净的安装,或者是否存在以前未复制的新内容。
但是,在这种情况下,它会在干净安装(预期)上复制所有资源。但是,在每个连续的构建中,它仍然会复制一些文件。现在这是非常奇怪的,因为没有文件发生变化,也没有复制所有文件,只有一小部分文件。还有一件事 - 如果我运行相同的应用程序,在模拟器上使用相同的配置,副本就不会发生(莫尔奇怪)。
是否有一些我可以改变的设置,或者我可以包含哪些可能阻止这种情况发生的标志?
提前感谢您的帮助!
干杯!
答案 0 :(得分:3)
自问这个问题以来已经过了一个月,我找到了一种“解决方法”的解决方案。
现在,我把它作为公认答案的原因主要是因为在写这篇文章时没有发布任何其他答案/解决方案。如果发布了更好的内容(或者如果我有更新),我一定会将更好的答案标记为已接受的答案。
无论哪种方式,如果您拥有一组不会因连续构建而改变的超大资产,这种“解决方法”将会起作用。
我正在研究的项目有很多已经准备好的音频和视频文件,并且不会改变(除了偶尔的重新录制或其他内容之外)。
因此,正如我的问题所述,Xcode正在复制资源的一个子集。理想情况下,一旦资源被复制(并且没有对其进行任何更改),就不会在连续构建中重新复制(至少不应该重新复制)。在我的情况下,它在每次连续运行期间被复制,导致我的总体构建开始时间大约为15~20分钟。我还想指出,无论我们是否在构建阶段使用“运行脚本”,或者我们是否在Xcode项目中使用了媒体,我们都面临同样的问题。
解决方案: 我做的是我清理了我的项目,删除了应用程序,并进行了全新安装。因此,第一次,它使用应用程序复制所有文件。此外,我的Xcode项目中的assets目录是 NOT 。我们添加了一个“运行脚本”阶段,我们运行 rsync ,在每次构建期间将媒体从媒体文件夹复制到应用程序。
现在,一旦App完成了新的构建;它会复制所有必需的媒体文件。
然后,删除/禁用脚本,在Xcode中执行Clean(命令+ shift + K)并再次运行项目。这一次,因为没有脚本被运行,并且因为Xcode已经执行了干净,现在它认为它需要做的就是重新编译二进制文件,它构建超快。由于我 NOT 删除了应用程序,因此媒体文件夹仍在我的应用程序中,我的构建开始时间现在大约为30秒~1分钟(这包括沙盒和代码签名)。代码签名和“沙盒”应用程序仍然需要时间,但这比我每次运行时等待15~20分钟更好。 :)
希望这有帮助!
答案 1 :(得分:2)
我的情况非常相似。此外,我的应用程序中有6 000个资源,甚至列出其中一些(不是复制)有点慢。我找到了另一种解决方法(与你的非常相似,但有点容易执行)。它的灵感来自你的,所以非常感谢你!
我复制了项目的目标,将其捆绑ID设置为原始ID(它是从构建设置中使用$ {PRODUCT_NAME}自动设置的)并从“复制捆绑资源”部分中删除了所有资源。第一次(从设备应用程序中删除后)我需要使用其资源启动原始目标,但是当资源仍在设备上时,我可以构建复制的目标。
一些优点:
有趣的数字:
希望这也有帮助:)