美文网首页
报错处理: [!] The 'Pods-你的项目' target

报错处理: [!] The 'Pods-你的项目' target

作者: revolution丶 | 来源:发表于2024-03-18 14:01 被阅读0次

关键词: 原生iOS接入腾讯云-实时音视频-语音聊天室 pod冲突 duplicate symbols 符号冲突 TXSoundtouch.xcframework TXFFmpeg.xcframework.

背景: 最近接手一个社交项目,里面已经做了IM即时通讯,用的是腾讯云,现在新需求是做一个语音聊天室,继续用腾讯云的SDK,按照腾讯的文档做的时候,第一步就卡住了.... 在按照文档添加了TUIVoiceRoom后
pod 'TXAppBasic', :path => "TX/TUIVoiceRoom/TXAppBasic/"  # path 为TXAppBasic.podspec相对于Podfile文件的相对路径
pod 'TUIVoiceRoom', :path => "TX/TUIVoiceRoom/", :subspecs => ["TRTC"]  # path 为TUIVoiceRoom.podspec相对于Podfile文件的相对路径  

pod install,然后报错

[!] The 'Pods-你的项目target' target has frameworks with conflicting names: txsoundtouch.xcframework and txffmpeg.xcframework.

分析处理报错

在搜索引擎上搜报错(无论国内外)大概就是两个结果:
1.同时接入网易云信NIMSDK和NERtGSRK时类似的两个库冲突报错
2.报错相同,也是腾讯云的两个SDK冲突,但是是Flutter版本
个人先尝试参考2的Flutter版本去解决,但是无果.
接着尝试参考1的方法,在Xcode中搜索这两个库
如图:

搜索TXSoundTouch.png 搜索TXFFmpeg.png
同理,如果show in Finder,如图:
show in Finder.png 就是删除调这两个库.删除后你会发现pod install成功了?并没有!
并没有.png
库确实没有冲突了,不过TUIVoiceRoom还有点问题.解决方法cocopods也写明了两种:
  • podfile中增加use_frameworks!
  • 在podfile中,在MJRefresh, MJExtension, TUICore 这三个库后面增加,:modular_headers => true
    经过实测,对于我手头的这个纯OC项目,方法1会带来衍生问题,方法2修改后pod install正常完成.
    pod install正常.png
    然而这一切并没有结束,打开xcode后run项目,继续报错:
    继续报错.png
    这个报错的原因就是duplicate symbols(符号冲突),也就是引入的第三方库有冲突,感觉瞬间回到了问题开头....
    经过腾讯云人工技术支持,工单和腾讯云售后服务群工作人员轮番交流和尝试(然而大部分回复都是把文档列出的问题粘给你,并非专门解决)

我在pods文件层级里发现了一个情况:

pods文档.png
冲突的是TXLiteAVSDK_ProfessionalTXLiteAVSDK_TRTC库,他们中都包含TXFFmpeg.xcframeworkTXSoundTouch.xcframework,其实他们两本来也都是同一个功能的专业版和简略版.问题是,我在podfile中既没有引用TXLiteAVSDK_Professional也没有引用TXLiteAVSDK_TRTC,那为什么pods中会有这两个库呢?其实是因为,有其他库用到了这两个库.
查看podfile:
  • 其中在pod库后增加了:subspecs => ["Professional"]就是它引用了TXLiteAVSDK_Professional库.
  • 而在pod库后增加了:subspecs => ["TRTC"] 就是它引用了TXLiteAVSDK_TRTC库.
    而只有我刚从腾讯文档复制过来TUIVoiceRoom的引入有:subspecs => ["TRTC"] ,也正是这个引入造成了冲突,那么既然TXLiteAVSDK库功能都是相同的,我也可尝试让TUIVoiceRoom去引用Professional库而非文档的TRTC库.
pod 'TUIVoiceRoom', :path => "TX/TUIVoiceRoom/", :subspecs => ["Professional"]  # path 为TUIVoiceRoom.podspec相对于Podfile文件的相对路径

pod install成功,run成功,调用TUIVoiceRoom初始化方法

[[TRTCVoiceRoom sharedInstance] login:LIVE_IM_APPID userId:user.id userSig:[GenerateUserSig genTestUserSig:user.id] callback:^(int code, NSString * _Nonnull message) {
  if (code == 0) {
    NSLog(@"聊天室初始化成功");
  }
}];

初始化成功,如图


初始化成功.png

注意

如果你pods文件夹中TXLiteAVSDK_Professional内如果不含有TXFFmpeg.xcframework和TXSoundTouch.xcframework,那么你run是不成功的,因为少库.所以,你应该在尝试删除冲突库之前,即开始接入的时候,用上面pod语句,而非腾讯云官方文档的pod语句,才会成功.

除此之外

其实打开TUIVoiceRoom.podspec,可以看到他是包含了3个版本的引用,意味着其实你是可以使用Professional或者Enterprise,并非一定用TRTC. TUIVoiceRoom.podspec.png

个人总结

  • 平时写podfile的时候要注意语句的意思,写完看一遍,这次就是不知道:subspecs => []的意思,只顾着复制粘贴才卡住自己的.而解决问题同样是因为手闲查了下:subspecs => []的意思才启发了灵感.
  • 尽信书则不如无书,引入库要参照着库文档来做,但是也要有自己的判断,文档给出的是通解,但现实情况往往很负责,这个时候要勇敢的试试不按照文档去做,去试试特解
  • 如果引入的库出了问题,去看库本身,去看xxx.podspec文件,多比较前后差异,就有激发处理的灵感.

最后

  • 若有错误,恳请斧正。

相关文章

网友评论

      本文标题:报错处理: [!] The 'Pods-你的项目' target

      本文链接:https://www.haomeiwen.com/subject/lhnazdtx.html