最近在导入pod时候遇到
The 'Pods-XXX target has libraries with conflicting names: xxxx.a.
这个问题是因为两个不同的pod都依赖了同一个.a文件造成了冲突。
首先我们应该知道是那两个库冲突了,从图上看我们的内部仓库“YDOfflineOcr”肯定是依赖了“libprotobuf.a”文件。但是另外一个库就不是那么好找了。有一个笨办法就是你挨个去看每个有podspec文件的仓库,去看看都依赖了那些库。还有偷懒的办法就是把你认为冲突的库注释掉,执行pod install,看看会去除那些文件。
经过测试发现是"Firebase/Messaging" 这个仓库依赖了Protobuf这个库。我们可以去"Firebase/Messaging"的podspec看下 FirebaseMessaging.podspec
下面是我们私有库的podspec文件,导入了libs下的所有.a文件。这个文件下也有libprotobug.a
image.png如何解决
知道那两个库后就可以解决这个问题了,解决办法是自己建立一个podspec文件,把其中一个库指定到这个podspec路径,这里我选择该自己的私有库。
首先找到库的podspec文件,选择raw模式,这样就能拿到纯净的文本。
GitLab
GitHub
然后copy出来,新建一个文件叫xxx.podspec,copy文本,修改podspec文件。首先找到verdored_library,之前是我这边写的是引用Libs下所有的,那就改成挨个引入(按你们自己的实际情况来)
image.png 改为挨个引入然后建立一个仓库,把这个podspec文件放进去,上传到Git
假设地址为:
https://gitlab.corp.youdao.com/liwc/udpodspec/blob/master/YDOfflineOcr.podspec
这里要使用纯净文本,所以blob 要改为raw,确保打开连接必须是一个纯文本
就如下面这个链接这样(gitlab和github的raw模式不同,注意raw模式即可)
https://raw.githubusercontent.com/firebase/firebase-ios-sdk/master/FirebaseMessaging.podspec
Ok,我们现在有自己的podspec文件和地址了。那么只需你在引入pod时候指定podspec即可
pod 'YDOfflineOcr', :podspec => 'https://gitlab.corp.youdao.com/liwc/udpodspec/raw/master/YDOfflineOcr.podspec'
再次执行pod install,导入成功。
当然我也可以移除firbase下podspec的依赖库
把protobuf移除后,上传到自己的仓库,指定podspec
可以根据自己情况选择处理那个库。
网友评论