由于某种原因,由于最近以来,我无法从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。
据我了解,看起来 2 个库中存在相同的符号。不知道为什么,很可能是移动应用程序依赖项之一。
在已安装的 Pod 列表中,我既有BoringSSL-GRPC (0.0.3)
,也有OpenSSL-Universal (1.0.2.19)
BoringSSL由Firebase使用,OpenSSL由Flipper使用。
这是我使用的第三方依赖项列表:
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时,它工作正常,我可以在设备上运行我的应用。但是我需要火力基地...
知道如何解决这个问题吗?
谢谢!
这是其他人也注意到的问题 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 构建工作
希望这有帮助!
对于最新的 RN 和 Firebase 模块,我遇到了同样的问题。鳍状肢中有PR https://github.com/facebook/flipper/pull/1171,可以解决此问题,但仍未合并到master,并且似乎OpenSSL使用了1.0.2.19版本。
因此,要在真实设备中运行您的应用程序,我刚刚禁用了Flipper。为此,您需要:
- 注释 pod 文件和 AppDelegate.m 中的所有 Flipper 行 文件。
- 删除 yarn.lock 文件和 pods 文件夹
- 再次运行容器安装。
完成这些步骤后,所有步骤都将正常工作。
就像您提到的,这是由于多个生成的文件,您可以做的一件事是清理整个文件夹,然后在运行它之前重新启动计算机和 xcode .同时清除 Xcode 的派生数据文件夹。并重建它,删除"移动设备"中任何旧版本的RN APP,缓存也可以提供这个.还希望您最近没有更改目标名称?
清理项目然后运行,为模拟器编译库,并为设备创建重复项