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

Gen*_*ain 29 shell xcode objective-c

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

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

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

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

Ram*_*sel 57

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

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

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


可能的外部问题

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

这个问题的更多信息:

NSLocalizedStringFromTable无法在CocoaPod依赖项中工作

  • 我一直在这种跋涉的节奏下发展一年,我忘记了能够按下构建和运行而没有时间做税,理发,开始乐队并且可能去厕所的感觉,回来告诉我它做一个剧本......我欠你的债,谢谢你 (8认同)
  • 看起来如果你把它变成'只在安装时运行'它很好又快,但如果你是从一个干净的,非派生的数据状态构建你可能没有本地化的字符串或xcassets.但如果你正在进行大量的迭代,你可以重新打开它,并且派生的数据/缓存应该保留你需要的资产..只要确保你下次必须关闭该选项时进行清理 (3认同)

Wer*_*her 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
> 
Run Code Online (Sandbox Code Playgroud)

在项目的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
Run Code Online (Sandbox Code Playgroud)