iOS框架集成Firebase/MLKit OCR遇重复类实现问题求助
解决Firebase/MLKit在iOS框架与主App中重复类的报错问题
我之前也碰到过一模一样的问题!这种重复类的警告是因为主App和你的框架都独立引入了Firebase相关依赖,导致同一个内部类(就是报错里的GMVx_PHTPhenotypeSSOAccountService)被编译了两次,系统没法确定用哪一个。下面是几个我亲测有效的解决方案,你可以按顺序试试:
方案1:切换为动态链接框架(最推荐)
Firebase现在完全支持动态链接,这能从根源上避免静态链接带来的符号重复问题:
- 打开主App的
Podfile,把顶部的use_frameworks!替换成:use_frameworks! :linkage => :dynamic - 如果你的框架也用单独的
Podfile管理,同样做上述修改 - 执行以下命令清理并重新安装依赖:
pod deintegrate pod install - 最后清理Xcode的Derived Data(
Xcode > Settings > Locations > Derived Data,点击路径旁边的箭头删除文件夹),重启Xcode后重新构建项目
方案2:让框架共享主App的Firebase依赖
如果不想用动态链接,可以把Firebase的依赖只放在主App中,框架通过依赖传递来使用:
- 如果你用Podspec管理框架,在框架的
.podspec文件中添加Firebase的依赖声明:spec.dependency 'Firebase/MLVision' - 移除框架自身
Podfile中对Firebase的直接引入 - 在主App的
Podfile中,同时引入你的框架和Firebase相关组件:pod 'YourCustomFramework' pod 'Firebase/MLVision' - 重新执行
pod install,这样框架会复用主App的Firebase依赖,不会重复编译
方案3:排查并移除重复的依赖引入
有时候可能是不小心在主App和框架里都手动添加了Firebase的.framework文件:
- 检查主App和框架的
Build Phases > Link Binary With Libraries列表,确保Firebase相关的.framework只出现一次 - 如果是手动导入的Firebase资源,删除框架中重复的文件,只保留主App的导入
方案4:临时排除重复文件(不推荐,仅作为最后手段)
如果上述方案都无效,可以尝试临时排除重复的类文件,但可能会有潜在风险:
- 在主App或框架的
Podfile中,修改Firebase的引入语句,排除重复的类:pod 'Firebase/MLVision', :exclude_files => '**/GMVx_PHTPhenotypeSSOAccountService.*' - 注意:这个方法可能会影响Firebase内部的某些功能,只有在其他方案都失效时再尝试
一般来说,方案1或方案2就能解决问题了。我当时用方案1一次性搞定,你可以先试试这个!
内容的提问来源于stack exchange,提问作者Oskar Lisiecki




