主角:大概有 20 个库git
原由:前段时间在给某 App 作组件化,发了一堆奇怪的 CocoaPods 库,今天到了某个版本发布,而后将这些库引入了主工程,用测试机进行编译 / 打包 / 提测,嗯,没有任何问题,开心。而后发布系统编译打包,嗯,失败了。编译失败嘛,很正常,查日志啦。唉,打开日志发现,并无返回任何错误日志...啥状况?调了一天,无果,找 CI 大佬们帮忙解决,而后发现打包系统是用直接下载 zip 压缩包的方式进行编译的,没有走 git,咱们心想:有什么不一样么,本地都能编译成功啊?而后试了试,卧槽,真的编不过,而后为啥不返回错误信息的问题也找到了,由于 Xcode 真的没有返回错误信息啊喂!缓存
如上图所示,就一句:bash
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.
复制代码
而后就开始了一下午的排错之路...组件化
通过:post
一开始,咱们怀疑是本地 CocoaPods 版本和 CI 服务器的 CocoaPods 冲突致使的,而后发现服务端没有安装 CocoaPods,压根不须要 pod install
操做。测试
而后咱们尝试在本地从新 pod install
,以为多是咱们哪里缓存没清除,固然,通过了半小时的挣扎后后咱们排除了这个愚蠢的想法;ui
以后咱们对比了最近的几回提交,观察到 Build Phases
中的 [CP] Copy Pods Resources
部分,貌似有大量的资源文件引用方式的变动,遂发现,貌似有资源文件被重复引用了唉...this
最后发现,若 CocoaPods 库中资源文件夹(默认是 Assets)中包含 .xcassets 类型的文件,则不能使用 s.resources = '[库名]/Assets/**/*' 递归引用全部文件,这样会形成对 .xcassets 文件中资源文件的重复添加,反正因为一系列奇怪的缘由最后会致使咱们的 CI 没法正常编译和打包咱们的 App。spa
这个问题十分具备隐蔽性,由于咱们在本机编译 / 打包 / Lint / Push 是彻底没有问题不会报任何错误的,因此若是资源文件夹中包含 .xcassets 类型的文件,只能指定一级目录的包含 s.resources = '[库名]/Assets/*' 或者麻烦一些,手动指定 / 匹配全部资源文件。
接下来的工做就简单(并不)了,排查全部的 Pod 库,把资源引用方式有问题的库进行修改 / Lint / PR / 发版 / 引入,而后就浪费了一天的时间,开心(并不),🙄。
结论:原来 Xcode 还能够在不报任何具体错误的状况下强行构建失败...
若有任何知识产权、版权问题或理论错误,还请指正。 https://juejin.im/post/5a67544a6fb9a01ca10b1072 转载请注明原做者及以上信息。