【问题标题】:Can't compile React Native iOS app to run on physical device, issue with React Native Firebase无法编译 React Native iOS 应用程序以在物理设备上运行,React Native Firebase 出现问题
【发布时间】:2020-05-17 07:22:59
【问题描述】:

最近由于某种原因,我无法通过 Xcode 甚至命令行在物理设备上运行我的 React Native 应用程序。我收到以下错误:

duplicate symbol '_md5_block_data_order' in:
    /XXX/Library/Developer/Xcode/DerivedData/XXXX-bdrylwsxpcqgzvgkcljteyttcdmr/Build/Products/Debug-iphoneos/BoringSSL-GRPC/libBoringSSL-GRPC.a(md5.o)
    /XXX/project/ios/Pods/OpenSSL-Universal/ios/lib/libcrypto.a(md5_dgst.o)
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

但是,它在模拟器上运行良好。而且我可以毫无问题地将应用上传到 AppStoreConnect。

据我了解,两个库中似乎存在相同的符号。不知道为什么,很可能是移动应用程序依赖项之一。

在安装的 Pod 列表中,我同时拥有 BoringSSL-GRPC (0.0.3)OpenSSL-Universal (1.0.2.19)

Firebase 使用 BoringSSL,Flipper 使用 OpenSSL。

这是我使用的第三方依赖项列表:

  pod 'Firebase/Core', '~> 6.3.0'

  pod 'Firebase/Messaging', '~> 6.3.0'

  pod 'Firebase/Firestore', '~> 6.3.0'

  pod 'Firebase/Auth', '~> 6.3.0'

  pod 'TrustKit'

  pod 'Stripe', '16.0.0'

  pod 'Amplitude-iOS', '~> 4.5'

  pod 'Intercom', '~> 5.5.1'

  flipper_pods()

当我将 Firebase 全部移除时,它运行良好,我可以在设备上运行我的应用程序。但我需要 Firebase...

知道如何解决这个问题吗?

谢谢!

【问题讨论】:

  • 您在哪种模式下运行应用程序?您可能必须将其更改为调试模式。
  • 我确实在设备上以调试模式运行它。
  • 我试图从项目中删除 Firebase,我能够在设备上运行它。但此应用需要 Firebase。
  • 你使用的是哪个 RN 版本? Flipper 在 RN 0.62 中完全实现,目前在 RC 中,RN Firebase 6.x 初始化模板在 RN 0.61 中。
  • RN 0.61.5 和 RN Firebase 5.5.6

标签: ios xcode firebase react-native react-native-firebase


【解决方案1】:

这是其他人也注意到的问题https://github.com/invertase/react-native-firebase/issues/3384

最常见的症状如下:

Pods/OpenSSL-Universal/ios/lib/libcrypto.a(bio_lib.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

这里记录了一个上游问题https://github.com/facebook/flipper/issues/485,在发现问题比预期更大之前已关闭。

我测试了一种解决方法,该解决方法目前不是最佳但可以使用,直到在传递依赖项中提供带有位码的 OpenSSL 库 - 解决方法是

  • 禁用位码进行开发(即存在 Flipper 的地方)
  • 确保您在所有地方都启用了死代码剥离
  • 为发布模式启用位码

根据我的经验,这适用于本地设备上的调试构建(之前失败的地方),并且发布模式下的 TestFlight 构建有效

希望这会有所帮助!

【讨论】:

  • 为 Debug 模式禁用 bitcode 会触发各种 Swift 问题。当我将其设置为否时,我还有 15 个其他问题。但是如果设置为是,我只有上述一个问题。
  • 您好。有其他问题的解决方法以及指导您制作虚拟 Swift 桥接头 并将其保留在原位 的安装指南。这也是推荐的fbflipper.com/docs/troubleshooting#build-errors-in-react-native - 请注意,我在 react-native-firebase 问题跟踪器中讨论了这个问题,问题最终解决了这些错误,并修复了 - 所以它有点 hacky,但它确实有效。 github.com/invertase/react-native-firebase/issues/…
  • @MikeHardy 谢谢。此解决方法仍然适用于 RN 0.63.4XCode 12.4 ?
【解决方案2】:

我对最新的 RN 和 firebase 模块也有同样的问题。脚蹼里有PRhttps://github.com/facebook/flipper/pull/1171,可以解决这个问题,但是还没有合并到master,看来OpenSSL使用的是1.0.2.19版本。

因此,为了在真实设备上运行您的应用,我刚刚禁用了 Flipper。为此,您需要:

  1. 在您的 pod 文件和 AppDelegate.m 中评论所有 Flipper 的行 文件。
  2. 删除 yarn.lock 文件和 pods 文件夹
  3. 再次运行 pod install。

完成这些步骤后,一切都会奏效。

【讨论】:

    【解决方案3】:

    清理项目然后运行,为模拟器编译库并为设备创建副本

    【讨论】:

    • 我试过了,不行。这个问题在我同事的电脑上也可以重现。
    【解决方案4】:

    就像您提到的那样,这是由于生成了多个文件,您可以做的一件事是清理整个文件夹,然后在运行它之前重新启动计算机和 xcode。同时清除 Xcode 的派生数据文件夹。并重建它,删除“移动设备”中任何旧版本的 RN APP,缓存也可以提供此功能。还希望您最近没有更改目标名称?

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2018-06-29
      • 2016-11-10
      • 2016-12-27
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多