2013-02-04 63 views
3

我有一个关于Xcode和束资源复制的问题。Xcode反复复制束资源

我目前正在处理一个大型资产库的项目。因此,干净的安装或捆绑资源中的更改会保证“新”捆绑资源的副本。

但是,我目前面临的问题是,Xcode每次构建应用程序时都会复制整个资产库的一部分。这种行为是非常奇怪的,因为在我工作过的所有项目中,Xcode只会复制资源(如果它们已更改),或者它是干净的安装,或者是之前没有复制过的新东西。

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

是否有一些设置可以改变,或者我可以加入一个可以防止这种情况发生的标志?

在此先感谢您的帮助!

干杯!

+0

你确定它实际上是抄袭呢?当它完成构建时,它仍然会*列出*所有这些元素,但它会非常快速地进行,因为它只是检查是否需要复制它(尽管标题仍然是“复制”)。 – borrrden

+0

有什么共同的文件是(被认为)被重复复制? –

+1

你好。回答borrrden的问题:是的。它仍在复制它们。因为当我在模拟器上运行它时,副本不会发生(超级奇怪)。回答Michael Dautermann的问题:没有什么共同之处。所有资产都位于一个文件夹中,并且仅复制一部分资产。 – codeBearer

回答

3

自从问了这个问题已经过去了一个月,我设法找到了一种“解决方法”。

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

无论哪种方式,如果您拥有超过连续构建不会更改的超大型资产集,则此“解决方法”将可行。

我正在做的项目中有很多已经准备好的音频和视频文件,并且不会改变(除了偶尔重新录制或者沿着这些线条)。

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

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

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

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

希望这有助于!

2

我有非常相似的情况。另外,我在我的应用程序中有6 000个资源,甚至列出其中的一些(不复制)也有点慢。我发现了另一种解决方法(非常类似于你的方法,但有点简单)。它受到你的启发,所以非常感谢你!

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

一些优点:

  • 它很容易到两个目标
  • 没有必要两个写任何脚本(这是目的,我没有用您的解决方案)

乐趣与数字之间切换:

  • 从“Cmd + R”到加载屏幕出现捆绑资源58秒。
  • 对于空的“复制捆绑软件资源”部分,相同间隔20秒。不如你的改进,但仍然有差异。

希望这有助于太:)

+0

Oooo。这实际上也是一个好主意! :) 我会为未来的项目考虑这一点 - 所以也谢谢你!对于上述项目,我们有从同一来源构建3个应用程序的独特案例;这3款应用程序之间的唯一区别就是内容。其中一些内容很常见,其中一些内容是不同的,因此我们不得不使用脚本来简化管理。 :) – codeBearer