错误信息
|
|
背景信息
公司使用的是二进制化后的 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
文件,如下:
|
|