主角:大概有 20 个库
起因:前段时间在给某 App 做组件化,发了一堆奇怪的 CocoaPods 库,今天到了某个版本发布,然后将这些库引入了主工程,用测试机进行编译 / 打包 / 提测,嗯,没有任何问题,开心.然后发布系统编译打包,嗯,失败了.编译失败嘛,很正常,查日志啦.唉,打开日志发现,并没有返回任何错误日志... 啥情况?调了一天,无果,找 CI 大佬们帮忙解决,然后发现打包系统是用直接下载 zip 压缩包的方式进行编译的,没有走 git,我们心想:有什么不同么,本地都能编译成功啊?然后试了试,卧槽,真的编不过,然后为啥不返回错误信息的问题也找到了,因为 Xcode 真的没有返回错误信息啊喂!
如上图所示,就一句:
Build operation failed without specifying any errors. Individual build tasks may have failed for unknown reasons.
展开以后的详情为:
Build operation failed without specifying any errors. Individual build tasks may have failed for unknown reasons.
One possible cause is if there are too many (possibly zombie) processes; in this case, rebooting may fix the problem.
Some individual build task failures (up to 12) may be listed below.
然后就开始了一下午的排错之路...
经过:
一开始,我们怀疑是本地 CocoaPods 版本和 CI 服务器的 CocoaPods 冲突导致的,然后发现服务端没有安装 CocoaPods,压根不需要 pod install 操作.
然后我们尝试在本地重新 pod install,觉得可能是我们哪里缓存没清除,当然,经过了半小时的挣扎后后我们排除了这个愚蠢的想法;
之后我们对比了最近的几次提交,观察到 Build Phases 中的
[CP] Copy Pods Resources
部分,貌似有大量的资源文件引用方式的变更,遂发现,貌似有资源文件被重复引用了唉...
最后发现,若 CocoaPods 库中资源文件夹(默认是 Assets)中包含 .xcassets 类型的文件,则不能使用 s.resources = '[库名]/Assets/**/*' 递归引用所有文件,这样会造成对 .xcassets 文件中资源文件的重复添加,反正由于一系列奇怪的原因最后会导致我们的 CI 无法正常编译和打包我们的 App.
这个问题十分具有隐蔽性,因为我们在本机编译 / 打包 / Lint / Push 是完全没有问题不会报任何错误的,所以如果资源文件夹中包含 .xcassets 类型的文件,只能指定一级目录的包含 s.resources = '[库名]/Assets/*' 或者麻烦一些,手动指定 / 匹配所有资源文件.
接下来的工作就简单(并不)了,排查所有的 Pod 库,把资源引用方式有问题的库进行修改 / Lint / PR / 发版 / 引入,然后就浪费了一天的时间,开心(并不),
来源: https://juejin.im/post/5a67544a6fb9a01ca10b1072