Firebase架构x86_64的未定义符号

时间:2017-02-17 07:38:48

标签: ios firebase

我正在使用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'

任何帮助将不胜感激!提前谢谢。

乔治。

17 个答案:

答案 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并确保已选中目标成员资格框并将其设置为必需:enter image description here

答案 13 :(得分:0)

就我而言,仅使用Firebase Auth和Firebase Firestore以及Cocoapods进行安装,我所要做的就是单击+Debug部分下的Release符号{1}}在构建设置中。 Other Linker Flags标志是自动添加的。在那之后建造就好了!

Screenshot

答案 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