[英]React Native Firebase Analytics: Undefined symbols for architecture x86_64
[英]Firebase Undefined symbols for architecture x86_64
我正在使用 firebase 作为我在 iOS 中工作的项目的一部分,当我尝试针对 iPhone 6 或 7 模拟器编译我的代码进行测试时,我偶然发现了以下链接错误。
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_GTMSessionUploadFetcher", referenced from:
objc-class-ref in FirebaseStorage(FIRStorageUploadTask_d5061b1e2b5f1bb249816cc5fc42ff62.o)
"_OBJC_CLASS_$_GTMLogger", referenced from:
objc-class-ref in FirebaseMessaging(GIPReachability_ae5504e4a6a28a1d8997c6f38e8bff8b.o)
"_kGTMSessionUploadFetcherStandardChunkSize", referenced from:
-[FIRStorageUploadTask enqueue] in FirebaseStorage(FIRStorageUploadTask_d5061b1e2b5f1bb249816cc5fc42ff62.o)
"_GTMFetcherStandardUserAgentString", referenced from:
-[FIRAuthBackendRPCIssuerImplementation init] in FirebaseAuth(FIRAuthBackend_ea73237c278bd1b78e1c76db2a16775a.o)
"_OBJC_CLASS_$_GTMSessionFetcher", referenced from:
objc-class-ref in FirebaseStorage(FIRStorageDownloadTask_c390366e83519f6636ca985ecb70e5d0.o)
objc-class-ref in FirebaseStorage(FIRStorage_691ea9ac7cb4d224d37df2ff8a911989.o)
"_OBJC_CLASS_$_GTMSessionFetcherService", referenced from:
objc-class-ref in FirebaseAuth(FIRAuthBackend_ea73237c278bd1b78e1c76db2a16775a.o)
objc-class-ref in FirebaseStorage(FIRStorage_691ea9ac7cb4d224d37df2ff8a911989.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我正在使用 Xcode 8.2.1,swift 3.0,我的项目中还有以下 Pod 文件
pod 'Braintree'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Core'
pod 'Firebase/Storage'
pod 'Firebase/Messaging'
pod 'Firebase/RemoteConfig'
pod 'GeoFire', :git=>'https://github.com/firebase/geofire-objc.git'
pod 'ObjectMapper', '~> 2.2'
我已经做了一个 pod 更新以防万一有些东西已经过时了,但没有运气。 当我使用 iPhone 4 或 5 模拟器时,代码可以正常编译和运行。
编辑:
我已将 Build Active 架构设置为 No,在有效架构中我列出了 arm64、armv7、armv7s,现在 Objectmapper 失败,即使在文件中声明了import ObjectMapper
Use of undeclared type 'Mappable'
任何帮助将不胜感激。 先感谢您。
乔治。
刚刚发现了一个类似的问题,并通过清除 Pod-Cache 解决了它。
清除 CocoaPods 缓存
pod deintegrate && pod cache clean --all
重新安装 Pod
吊舱安装
对我来说,我只是将 Firebase 框架安装到 Xcode,由于其他无法解决的问题,我没有使用 CocoaPods。 构建后有类似上面的错误,“没有找到架构 x86_64 的符号”。 (也许是因为我在 VMWare 上使用 Xcode)
然后我必须手动转到General - Linked Frameworks and Libraries并添加:
libsqlite3.tbd、libz.tbd、libc++.tbd
使项目正常工作。
使用 CocoaPods 为 Firebase 安装 pod 后也遇到了这个问题,如 Firebase 站点中所述:
https://firebase.google.com/docs/ios/setup?hl=es-419#prerequisites
吊舱“Firebase/Analytics”吊舱“Firebase/Auth”
在安装 Pod 的过程中,我收到了一条警告:
[!] The target `myTarget [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The target `myTarget [Release]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
当我编译时,我收到了几个文件的错误:
Undefined symbols for architecture x86_64:
我在本答案中的答案之前尝试了以下答案的解决方案,它很有魅力:
目标 ... 覆盖 `Pods/Pods.xcconfig 中定义的 `OTHER_LDFLAGS` 构建设置
基本上解决方案是(如@Ankish Jain 所解释的):
转到您的目标构建设置 -> 其他链接器标志 -> 双击 -> + 按钮。 将 $(inherited) 添加到新行。
之后我编译成功,新标志自动添加到构建设置中。
我尝试了“清除 Cocoapods 缓存”和“删除派生数据”解决方案,但没有奏效。 对我有用的是我在 Carthage 设置中找到的一个步骤(我仍在使用 Cocoapods)
将
$(OTHER_LDFLAGS) -ObjC
标志$(OTHER_LDFLAGS) -ObjC
到“构建设置”中的“其他链接器标志”。
你可以在这里看到这个步骤: https : //github.com/firebase/firebase-ios-sdk/blob/master/Carthage.md
我的信息
安装:Cocoapods | SDK:FirebaseAnalytics (6.1.2) | IDE:Xcode 11.0 | macOS:莫哈韦沙漠 10.14.5 测试版 | 语言:Swift 4.2 | 平台目标:iOS 11.0+
派生数据似乎有问题。 我退出了 Xcode,我删除了/Users/USER_NAME/Library/Developer/Xcode/PROJECT_NAME
所有派生数据
重新启动 Xcode,编译并按预期工作,无需更改Active Architecture Only
或任何内容。
也遇到了这个问题...
将$(inherited)
添加到构建设置中的其他链接器标志,现在一切正常
我尝试了这个问题中的解决方案,但没有任何效果。 还在 SO 和 GitHub 问题中找到了其他线程。 没有任何帮助。 我正在使用 Xcode 9.2、Swift 4、最新版本的可可豆荚。 这对我有用...
首先,我的 podfile 只包含一个 firebase pod,因为此时我只使用 Analytics,但是如果您使用更多,解决方法应该是相同的。
吊舱“Firebase/核心”
其次,像文档说明一样,确保将 -ObjC 添加到您的其他链接器标志中。 我在项目和目标级别的构建设置中都这样做了。 他们是不同的。
第三个也是最重要的,在项目级别的构建设置,其他链接器标志,添加以下内容
-框架
“火力地基核心”
-框架
“Firebase 分析”
-框架
“FirebaseInstanceID”
-框架
“FirebaseNanoPB”
-框架
“FirebaseCoreDiagnostics”
-框架
“纳米”
在没有 CocoaPods ( https://firebase.google.com/docs/ios/setup#frameworks ) 的情况下进行集成的步骤之后,我遇到了同样的问题,其他答案都没有帮助我。
对我有用的是从目标的构建设置上的其他链接器标志中删除 -ObjC。
我仍然不确定为什么它会起作用,即使它明确地写在添加这个标志的步骤上,只是想分享对我有用的东西,以尝试帮助其他人。
遇到了同样的问题,对我来说问题是我手动导入了 FirebaseMessaging 框架,方法是下载整个 Firebase SDK,然后手动将 Messaging 框架导入到项目中(我没有使用 Cocoapods 或 Carthage)。 我没有在同一个文件夹“Protobuf.framework”中导入另一个框架。 添加 Protobuf 并确保目标成员资格包括我的项目目标后,它就起作用了。
我之前遇到过这个问题,看来您需要:
rm -rf ios/Podfile ios/Podfile.lock ios/Pods ios/Runner.xcworkspace
然后运行flutter run
来源: https : //github.com/flutter/flutter/issues/41900
更新:也运行此修复问题: rm -f ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
检查您的其他链接器标志:有时添加或删除$(inherited)
可以解决问题。
如果没有任何效果,请尝试降级 firebase pod。 我将它降级为“6.27.0”,它的作用就像一个魅力。 我在这里阅读了这个解决方案。
pod 'Firebase/Core', '6.27.0'
当我在不使用 CocoaPod 的情况下手动集成 Firebase 并为模拟器构建时,我遇到了同样的错误。 (仅设备构建没有问题。)
这是一个老问题,但它是相关的,所以我展示了我最近的解决方案。
首先,我放弃了只为模拟器构建。
构建时间太长,但我将“仅构建活动架构”设置为“否”以构建包括模拟器在内的所有目标。
我还在构建设置的“排除架构”中添加了“任何 iOS 模拟器 SDK - arm64”,因为我的 Mac OS 架构不是“arm64”而是“x86_64”。
如有必要,您还应该添加“Any iOS Simulator SDK - i386”。 Firebase 包含“i386”架构,但其他一些 Ad SDK 不再支持“i386”。
这是我可以接受的解决方案。
在“构建设置”中,删除“ -ObjC”标志,仅保留“ $(继承)”有效。
如果不起作用,请确保已链接了所有需要的框架(如果未使用自动链接)。 所需的库可以在框架“ Modules / module.modulemap”文件中看到。
在我的情况下,从Other Linker Flags
删除$(inherited)
后一切正常
就我而言,为了仅使用 Firebase Auth 和 Firebase Firestore,使用 Cocoapods 进行安装,我所要做的就是单击 Build Settings 中Other Linker Flags
下的Debug
和Release
部分的+
号。 $(inherited)
标志是自动添加的。 在那之后建造得很好!
我已经尝试了所有的建议,但只有这个有用!!! 安装 firebase pod 后,我的错误是这样的:
Undefined symbols for architecture x86_64
error: linker command failed with exit code 1 (use -v to see invocation)
这是对我有用的唯一解决方案:
pod deintegrate && pod cache clean --all
rm -rf ~/Library/Developer/Xcode/DerivedData
然后将以下版本的 Firebase 添加到您的 pod 文件中
pod 'Firebase', '6.27.0'
进而
pod install
在这里尝试了其他答案中的大部分建议,但没有一个修复它。 最终修复它的是将以下内容添加到 Podfile 的顶部:
$RNFirebaseAsStaticFramework = true
这是此处说明的一部分,但我一定错过了它: https ://rnfirebase.io/#altering-cocoapods-to-use-frameworks
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.