解决Pod" target has libraries with conflicting names"冲突

最近在导入pod时候遇到

 The 'Pods-XXX target has libraries with conflicting names: xxxx.a.

这个问题是因为两个不同的pod都依赖了同一个.a文件造成了冲突。

解决Pod

首先我们应该知道是那两个库冲突了,从图上看我们的内部仓库“YDOfflineOcr”肯定是依赖了“libprotobuf.a”文件。但是另外一个库就不是那么好找了。有一个笨办法就是你挨个去看每个有podspec文件的仓库,去看看都依赖了那些库。还有偷懒的办法就是把你认为冲突的库注释掉,执行pod install,看看会去除那些文件。

解决Pod

经过测试发现是"Firebase/Messaging" 这个仓库依赖了Protobuf这个库。我们可以去"Firebase/Messaging"的podspec看下 FirebaseMessaging.podspec

解决Pod

下面是我们私有库的podspec文件,导入了libs下的所有.a文件。这个文件下也有libprotobug.a

image.png

如何解决

知道那两个库后就可以解决这个问题了,解决办法是自己建立一个podspec文件,把其中一个库指定到这个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的依赖库


解决Pod

把protobuf移除后,上传到自己的仓库,指定podspec
可以根据自己情况选择处理那个库。

其实正确的做法是pod里不直接放.a文件。通用的三方库用依赖的方式导入。
podspec中写
s.dependency 'xxx', '~> 3.1'

有些依赖库在内部引用并不是根据名字来引用的,比如外面的私有库引用了xxx.a。这个.a文件是直接在包里面的。这时候我只需要改一下.a的名字。就可以过pod校验。并且运行起来完全没问题

你可能感兴趣的:(解决Pod" target has libraries with conflicting names"冲突)