无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序

Posted

技术标签:

【中文标题】无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序【英文标题】:Unable to compile iOS React Native app with Firebase ML Kit Vision Text Detector 【发布时间】:2018-06-21 20:59:25 【问题描述】:

我正在使用 React Native 构建一个应用程序,我已经“弹出”到它自己的 ios 原生应用程序项目中。我有兴趣使用新的 Firebase ML Kit Vision Text Detector 来使用 on-device 模型识别图像中的文本,并且我愿意为它编写自己的 NativeModule 包装器(因为它是如此新的,我在 react-native-firebase 等项目中看不到任何现有的包装器)。

所以,我使用 Cocoapods 来引入 Firebase 依赖项,但是当我尝试编译新工作区时,出现以下链接器错误:

duplicate symbol __ZN3fLB28FLAGS_nosymbolize_stacktraceE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(examine_stack_b03c119c7358b452600b1afd20ca186c.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(utilities.o)
duplicate symbol __ZN3fLB26FLAGS_symbolize_stacktraceE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(examine_stack_b03c119c7358b452600b1afd20ca186c.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(utilities.o)
duplicate symbol __ZN3fLI9FLAGS_novE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(vlog_is_on_ec23571a5409c45b7e2ca681c18af4cb.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLI7FLAGS_vE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(vlog_is_on_ec23571a5409c45b7e2ca681c18af4cb.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLS13FLAGS_vmoduleE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(vlog_is_on_ec23571a5409c45b7e2ca681c18af4cb.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLB18FLAGS_nolog_prefixE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(logging_2072041cb58f7b92d4eb8dae33e75a0d.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(logging.o)
duplicate symbol __ZN3fLB16FLAGS_log_prefixE in:
    /Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(logging_2072041cb58f7b92d4eb8dae33e75a0d.o)
    /Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(logging.o)
ld: 7 duplicate symbols for architecture x86_64

从我读到的关于 React Native 项目中重复符号错误的其他案例中,这通常是由于除了将 React 项目手动链接到主应用程序项目之外,还包含依赖于 React 的 pod(因为它最初是在弹出后设置的,以及使用react-native link 链接的其他库)。但是,情况并非如此——我通过 podfile 引入的唯一库与 Firebase 相关,所以我不确定冲突是如何发生的。

任何人的任何见解 - 可能来自致力于 iOS 新机器学习套件的 Firebase 团队?请注意,我什至还没有编写任何引用框架的代码,我只是试图让工作区配置进行编译。这是 podfile 供参考:

# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'

target 'App' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for App
  pod 'Firebase/Core'
  pod 'Firebase/MLVision'
  pod 'Firebase/MLVisionTextModel'

  target 'AppTests' do
    inherit! :search_paths
    # Pods for testing
  end

end

这是主应用程序项目中所有链接库项目的屏幕截图:

【问题讨论】:

所以,尽管 Podfile 只引用了 Firebase 库,但事实证明 React 和 Firebase 之间存在一个共享组件:glog(Google 开源 C++ 日志记录实用程序),它是符号的来源参考。我已经尝试从 React 项目配置中删除 glog 源文件,希望它可以链接到 TextDetector 框架中的 glog 符号,但是之后我得到了一组全新的 missing 符号我这样做了...谷歌的人能告诉我什么版本的 glog 被静态编译到 TextDetector 框架二进制文件中吗?! 我不熟悉 React Native,但我尝试按照 React Native 的与现有应用程序集成指南( facebook.github.io/react-native/docs/…)。我没有收到任何重复的符号错误。我的 ML Kit pod 版本是 0.9.0。 GoogleMobileVision pod(包括 GoogleMobileVision/TextDetector)是 1.3.2。而glog版本是0.3.4。所以我似乎无法重现这个问题。 我只按照 React Native 的指南安装了所有 CocoaPods,然后构建了现有的 ML Kit Quick Start MLVision 应用程序,而没有完成将 React Native 添加到应用程序的步骤。我确实验证了 ML Kit 和 React Native 的 pod(包括 glog)都显示在 xcode 项目导航器中。然后,我构建并运行了该应用程序,没有出现任何问题。 感谢您的 cmets - 我将尝试使用 ML Kit 示例应用程序遵循您描述的相同过程。但是,如果您实际上没有完成实际集成,那么我认为您不会看到问题,因为错误出现在构建过程的 linking 步骤 - 如果示例应用程序没有引用到 React Native 库,那么链接器就不需要对编译的库做任何事情,也不会显示错误。 【参考方案1】:

在将 ML kit 应用于 RN 项目时,我遇到了同样的问题。这是解决方案:

选择主要目标>构建设置>死剥离代码=是

希望它能让你度过难关。

【讨论】:

非常感谢!在附近消息和 React Native 出现类似错误后为我工作

以上是关于无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase ML kit Android 中正确绘制检测到的人脸边界框?

无法使用 firebase ML 套件检测眨眼事件

如何避免在 firebase ML Kit 的人脸检测 API 中捕获模糊图像

通过 Firebase ML Kit 人脸检测检测多张人脸的轮廓

SwiftUI:在 Firebase ML Kit 识别的元素周围绘制矩形

我可以使用 ML kit 人脸检测来判断照片是不是包含人脸吗?