模块化平常:CocoaPods 库资源引用问题

主角:大概有 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

  1. 一开始,咱们怀疑是本地 CocoaPods 版本和 CI 服务器的 CocoaPods 冲突致使的,而后发现服务端没有安装 CocoaPods,压根不须要 pod install 操做。测试

  2. 而后咱们尝试在本地从新 pod install,以为多是咱们哪里缓存没清除,固然,通过了半小时的挣扎后后咱们排除了这个愚蠢的想法;ui

  3. 以后咱们对比了最近的几回提交,观察到 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 转载请注明原做者及以上信息。

相关文章
相关标签/搜索