You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动