错误信息
|
|
背景信息
公司使用的是二进制化后的 pod,podspec 中使用 vendored_libraries 引入了 libFlipper-RSocket.a,然而在 pod install 的时候,出现了如上的错误,搜索一下,别人出现这个问题是两个不同的 pod 引用了相同的 .a 文件。但是我可以肯定我这里是没有这个问题的。
排查
根据报错的信息,找到源码位置:lib/cocoapods/installer/xcode/target_validator.rb,如下:
|
|
重点是如下几行:
|
|
通过断点发现了问题, libFlipper-RSocket.a 即在 vendored_libraries 里,也在需要编译的 .a 里,但是筛查 Pods/Flipper-RSocket 目录下也没有需要编译的文件,这是怎么回事?
排查思路很明确, 看看 should_build 为什么会是 true。 找到给 .should_build 赋值的地方:lib/cocoapods/target/pod_target.rb:280:
|
|
OK, source_file 目录下的文件,除去头文件,如果剩下的不为空,should_build 就为 true。 下面来看 Flipper-RSocket.podspec 里 source_files 是怎么定义的:
|
|
问题出在了 /* 上,在 rsocket/benchmarks/ 目录下,除了源文件和头文件之外,还有 CMakeLists.txt 和 README.md 文件,导致判断 source_files 不为空,should_build 就为 true 了。
解决方案
有几个方案,一是 source_files 中只包含常见源码和头文件类型,如下:
|
|
二是 exclude 掉 .txt 和 .md 文件,如下:
|
|