每当我构建时,测试对我的Xcode项目的任何更改都会成为一种耐心的练习.在编译完所有源文件之后,我在Xcode顶部的活动窗口中收到以下消息:
"运行3个自定义Shell脚本中的3个"
我没有添加任何自己的自定义shell脚本,但我通过Cocoapods使用了很多依赖项,我使用2个框架构建环境,Crashlytics和Tapstream.Crashlytics要求你在构建阶段添加一个运行脚本,除了我不知道其他的来自哪里,它们似乎是我构建时间的瓶颈.
任何人都可以告诉我发生了什么以及我如何加快速度?
我无法启发你,但我可以告诉你我是如何阻止我跑步的.这也发生在安装Cocoapods之后.在我的主要项目Target
,下Build Phases
,我注意到题为两个条目Check Pods Manifest.lock
和另一个叫Copy Pods Resources
.
两者都有一个未经检查的选项Run script only when installing
.我检查了两个,至少现在我的项目构建并运行良好,无需运行脚本.
这是一个蹩脚的答案,因为我无法真正给你任何更多的信息,它甚至可能不适用于你的情况,所以希望有人出现并启发我们.
可能的外部问题
所以我在调试pod安装的库的NSLocalized字符串文件无法正常工作的问题时遇到了令人沮丧的经历.事实证明这是因为我检查了上面提到的选项.Pods-resources.sh
,有安装捆绑的行,没有在调试模式下运行.它只在安装时运行 - 当然!值得注意的事情.
这个问题的更多信息:
NSLocalizedStringFromTable无法在CocoaPod依赖项中工作
为了解决缓慢的"复制窗格资源"问题,我找到了一个解决方案,只有在以前没有复制过资源时才复制资源.
为此,我们必须修补由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