我正在使用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'
任何帮助将不胜感激!提前谢谢。
乔治。
答案 0 :(得分:18)
对我来说,我刚刚将Firebase框架安装到Xcode,而不是因为其他无法解决的问题而使用CocoaPods。在构建之后,存在类似的错误,例如“未找到架构x86_64的符号”。 (也许是因为我在VMWare上使用Xcode)
然后我必须手动转到常规链接的框架和库并添加:
libsqlite3.tbd,libz.tbd,libc ++。tbd
让项目有效。
答案 1 :(得分:10)
刚刚发现了一个类似的问题,并通过清除Pod-Cache来解决了这个问题。
清除CocoaPods缓存
pod解集成&& pod缓存清理-全部
重新安装吊舱
pod安装
答案 2 :(得分:4)
这似乎是衍生数据的一个小故障。我退出了Xcode,我删除了/Users/USER_NAME/Library/Developer/Xcode/PROJECT_NAME
重新启动Xcode,已编译并且所有工作都按预期工作,无需更改Active Architecture Only
或任何内容中的任何内容。
答案 3 :(得分:4)
在没有CocoaPods(https://firebase.google.com/docs/ios/setup#frameworks)的集成步骤中,我遇到了同样的问题,其他答案都没有帮助我。
对我有用的是从目标的“构建设置”上的“其他链接器标志”中删除-ObjC。
即使在添加该标志的步骤上明确写出了什么,我仍然不确定为什么行得通,只是想分享对我有用的内容,以帮助别人。
答案 4 :(得分:2)
我在这个问题上尝试了解决方案,没有任何效果。还在SO和GitHub问题中找到了其他线程。什么都没有帮助。我正在使用Xcode 9.2,Swift 4,最新版本的可可豆荚。这对我有用......
首先,我的podfile只包含一个firebase pod,因为此时我只使用了Analytics,但是如果你使用更多,解决方法应该是相同的。
pod'Firebase / Core'
其次,与文档状态一样,确保将-ObjC添加到您的其他链接器标志中。我在项目和目标级别的构建设置中都这样做了。他们是不同的。
第三个也是最重要的,在项目级别的构建设置,其他链接器标志,添加以下
-framework
“FirebaseCore”
-framework
“FirebaseAnalytics”
-framework
“FirebaseInstanceID”
-framework
“FirebaseNanoPB”
-framework
“FirebaseCoreDiagnostics”
-framework
“nanopb”
答案 5 :(得分:2)
我尝试了“清除Cocoapods缓存”和“删除派生数据”解决方案,但是没有用。对我有用的是我在迦太基设置中找到的一个步骤(我仍在使用Cocoapods)
在“构建”的“其他链接器标志”中添加
$(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:Mojave 10.14.5 Beta |语言:Swift 4.2 |平台目标:iOS 11.0 +
答案 6 :(得分:1)
当我不使用CocoaPod而为模拟器构建手动集成Firebase时,遇到了相同的错误。 (仅设备构建没有问题。)
这是一个古老的问题,但它是相关的,因此我展示了我最近的解决方案。
首先,我放弃了仅用于模拟器的构建。
构建时间太长,但是我将“仅构建活动架构”设置为“否”以构建包括模拟器在内的所有目标。
我还在“构建设置”的“排除的体系结构”中添加了“任何iOS模拟器SDK-arm64”,因为我的Mac OS体系结构不是“ arm64”而是“ x86_64”。
如有必要,您还应该添加“任何iOS模拟器SDK-i386”。 Firebase包含“ i386”体系结构,但其他一些Ad SDK不再支持“ i386”。
那是我可以接受的解决方案。
答案 7 :(得分:1)
如果没有任何帮助,请尝试将Firebase Pod降级。我将其降级为“ 6.27.0”,它就像一个魅力。我阅读了此解决方案here。
pod 'Firebase/Core', '6.27.0'
答案 8 :(得分:1)
检查您的其他链接器标记:有时添加或删除$(inherited)
可解决此问题。
答案 9 :(得分:1)
我之前遇到过此问题,看来您需要:
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
答案 10 :(得分:1)
按照Firebase网站中的说明,使用CocoaPods为Firebase安装了pod之后,也遇到了这个问题:
https://firebase.google.com/docs/ios/setup?hl=es-419#prerequisites
pod“ Firebase / Analytics” pod“ Firebase / Auth”
在安装吊舱期间,我收到一条警告,告知:
[!] 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:
在此答案之前,我尝试了以下答案的解决方案,它很吸引人:
The target ... overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig
基本上,解决方案是(如@Ankish Jain所解释的):
转到您的目标构建设置->其他链接器标记->双击-> +按钮。将$(继承)添加到新行。
此后,我成功编译,并将新标志自动添加到“构建设置”中。
答案 11 :(得分:1)
遇到了同样的问题,对我来说,问题是我手动下载了Firebase SDK,然后下载了整个Firebase SDK,然后手动将Messaging框架导入到项目中(我没有使用Cocoapods或Carthage)。我没有在同一文件夹“ Protobuf.framework”中导入其他框架。添加Protobuf并确保目标成员资格包括我的项目目标后,它就可以正常工作。
答案 12 :(得分:0)
对我来说,问题是xCode在我拖入新框架时存在错误,无法正确设置目标成员身份。
展开所有文件夹,然后转到在开始发生此操作之前已拖入的.framework文件或.m文件,突出显示每个文件夹,按cmd + option + 1并确保已选中目标成员资格框并将其设置为必需:
答案 13 :(得分:0)
就我而言,仅使用Firebase Auth和Firebase Firestore以及Cocoapods进行安装,我所要做的就是单击+
和Debug
部分下的Release
符号{1}}在构建设置中。 Other Linker Flags
标志是自动添加的。在那之后建造就好了!
答案 14 :(得分:0)
就我而言,从$(inherited)
删除Other Linker Flags
后一切正常
答案 15 :(得分:0)
也有这个问题...
在构建设置中的其他链接器标志中添加了$(inherited)
,现在一切正常
答案 16 :(得分:0)
我已经尝试了所有建议,但只有这一条可行!!!我的错误是在安装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