Flutter项目AgoraRtcEngine_iOS与agora_rtc_engine版本冲突
问题根因
报错本质是大版本不兼容的Agora iOS SDK被重复引入导致的:
- 原生屏幕共享扩展Target手动集成了3.7.0版本
AgoraRtcEngine_iOS - Flutter端5.2.0版本
agora_rtc_engine会自动内置引入4.2.6版本的Agora iOS SDK
两个版本SDK包含的xcframework文件名完全一致,pod install时会把两份同名资源同时注入Pods-Runner编译配置,直接触发重名冲突。
另外3.x和4.x版本Agora SDK的ReplayKit扩展通信协议、接口定义完全不匹配,强行把Flutter侧插件降到对应3.7.0的旧版本,既会丢失新版本功能,也会因为Flutter层和原生层接口映射错位导致屏幕共享无法正常运行。
推荐解决方案(无兼容问题,官方适配路径)
统一主工程和屏幕扩展的Agora SDK版本,完全对齐Flutter插件内置的SDK版本,不要单独给扩展引旧版SDK:
- 打开iOS工程的Podfile,删除屏幕共享扩展Target下写死的
pod 'AgoraRtcEngine_iOS', '3.7.0'依赖 - 打开终端进入iOS目录,执行以下命令清理旧的编译缓存和依赖:
pod deintegrate rm -rf Pods Podfile.lock Runner.xcworkspace pod cache clean AgoraRtcEngine_iOS --all pod cache clean AgoraReplayKitExtension --all - 在Podfile中给屏幕共享扩展Target添加和主SDK版本匹配的ReplayKit扩展依赖:
# 替换成你自己的屏幕共享扩展Target名称 target 'AgoraScreenShareExt' do use_frameworks! # 5.2.0版本agora_rtc_engine内置iOS SDK版本为4.2.6,版本号必须严格对齐 pod 'AgoraReplayKitExtension', '4.2.6' end - 重新执行
pod install,安装完成后打开工程先执行Xcode菜单栏的Product -> Clean Build Folder再编译即可。
该方案下主工程和扩展依赖同版本Agora SDK,不会出现重名xcframework冲突,扩展接口和主SDK完全匹配,屏幕共享功能可正常运行,不需要额外做兼容适配。
备选方案(仅特殊场景使用,维护成本高)
如果业务有强依赖必须保留3.7.0版本的原生Agora SDK逻辑,需要手动做依赖隔离避免重复打包:
- 找到Flutter插件缓存目录下的
agora_rtc_engine.podspec文件(路径为ios/.symlinks/plugins/agora_rtc_engine/ios/agora_rtc_engine.podspec),修改默认依赖配置,禁止插件自动引入内置的xcframework文件 - 在Podfile的
post_install钩子中添加编译脚本,给Runner Target和屏幕扩展Target分别指定各自加载的SDK路径,编译时过滤重复的同名框架引用 - 手动编写桥接代码适配3.x和4.x版本SDK的跨Target通信参数,对齐屏幕共享的视频帧传输协议
该方案需要持续跟进两个版本SDK的接口变动,每次升级Flutter插件都要重新修改配置,非必要不选择。
常见踩坑提示
- 不要尝试手动删除某一方SDK里的xcframework文件来规避冲突,会导致SDK缺少必要依赖,运行时出现找不到符号的崩溃
- 屏幕共享扩展的SDK版本必须和主工程引入的Agora SDK版本完全一致,跨版本无法建立App和扩展之间的IPC通信,屏幕共享会出现采集失败、黑屏、流中断等问题
内容的提问来源于stack exchange,提问作者Khyati Modi
相关产品推荐
相关产品推荐

