Xcode自定义shell脚本正在减慢编译时间

时间:2013-12-18 03:45:54

标签: objective-c xcode shell

每当我构建时,测试对我的Xcode项目的任何更改都会成为一种耐心的练习。在编译完所有源文件之后,我在Xcode顶部的活动窗口中收到以下消息:

“运行3个自定义Shell脚本中的3个”

我没有添加任何自己的自定义shell脚本,但我通过Cocoapods使用了很多依赖项,我使用2个框架构建环境,Crashlytics和Tapstream。 Crashlytics要求你在构建阶段添加一个运行脚本,除了我不知道其他的来自哪里,它们似乎是我构建时间的瓶颈。

任何人都可以告诉我发生了什么,以及我如何加快速度?

8 个答案:

答案 0 :(得分:56)

我无法启发你,但我可以告诉你我是如何阻止我跑步的。这也发生在安装Cocoapods之后。在我的主要项目Target中,在Build Phases下,我注意到两个名为Check Pods Manifest.lock的条目和另一个名为Copy Pods Resources的条目。

两者都有一个未经检查的选项Run script only when installing。我检查了两个,至少现在我的项目构建并运行良好而不运行脚本。

这是一个蹩脚的答案,因为我无法真正给你更多的信息,甚至可能不适用于你的情况,所以希望有人出现并启发我们。


可能的外部问题

所以我在调试pod安装库的NSLocalized字符串文件无法正常工作的问题时遇到了令人沮丧的经历。事实证明这是因为我检查了上面提到的选项。具有安装捆绑包的行的Pods-resources.sh未在调试模式下运行。它只在安装时运行 - 当然!值得注意的事情。

此问题的更多信息:

NSLocalizedStringFromTable not working in CocoaPod dependency

答案 1 :(得分:17)

修复慢速"复制播客资源"问题我找到了一个解决方案,只有复制资源才能复制它们。

为此,我们必须修补由cocoapods创建的* -resources.sh文件,这样只有当目标目录中生成的文件不存在时才会发生复制过程(它是在第一次复制时创建的) )。只要此目标目录存在并包含此自动生成的文件,就会跳过复制资源阶段。这在我的项目中节省了大约30秒(当然取决于你的项目规模)。要完成此任务,请执行以下操作:

创建一个名为' copy_pod_resources_once.patch'的补丁文件。在您的项目根目录中,包含以下内容:

5a6,13
> NONCE_FILE="${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/copyresources-done.nonce"
> if [ -f "$NONCE_FILE" ]; then
>    echo "already copied resources"
>    exit 0
> else
>    touch "$NONCE_FILE"
> fi
> 

在项目的Podfile中添加以下post install hook:

post_install do |installer_representation|
    system('find "./Pods/Target Support Files" -name "*-resources.sh" | xargs -I{} patch -p0 {} -i ./copy_pod_resources_once.patch')

    <other post install stuff>
end

答案 2 :(得分:2)

对我来说,这是Crashlytics。由于Crashlytics会对其文件进行自动更新,因此有一些未完成的更改。我重置/删除它们并重建并通过它。

因此,一般的答案可能是检查任何第三方组件并确保它们正常工作。

答案 3 :(得分:0)

正如拉塞尔在这个答案中所说的, https://stackoverflow.com/a/21318086/1752988 在尝试了大多数其他解决方案之后,我还去了Build Phases并清除了所有可能的POD链接,并且显示了关于Pods的三个构建问题。

但是在XCode Project导航器下没有列出的一个文件丢失了,但它们在Downloaded Git Zip文件夹中!显然,我复制它并放入XCode项目并尝试运行它干净利落地运行! :)

答案 4 :(得分:0)

我的项目中有类似的问题(但不使用Cocoapods)。它最终成为一个问题,Xcode(Spritebuilder)外部的应用程序在崩溃时以某种方式保留在我的Xcode项目中的资源上。我强迫非xcode应用程序关闭,现在问题已经消失

答案 5 :(得分:0)

检查您的项目文件夹名称是否有任何空格。因为空间在目录路径中产生问题,如“SRCROOT”。我删除了空格,项目运行正常。

答案 6 :(得分:0)

我发现这种情况经常发生在我身上。确切原因未知,但似乎是在git分支之间切换,这些分支在正在使用的pod中有所不同。在我的情况下,只需触摸Pods-xxx-Resources.sh shell脚本文件就可以加快备份速度。

答案 7 :(得分:-1)

可能不适合你,但清洁项目为我修好了(产品 - &gt;清洁)