未定义的符号:_OBJC_CLASS_$_FIRApp

7
我正在尝试使用Swift包管理器添加Firebase Analytics和Firebase Crashlytics,这是Firebase SDK的git链接
https://github.com/firebase/firebase-ios-sdk 之后,我在我的AppDelegate文件中添加了这两行代码:

#import <FirebaseCore/FIRApp.h>

#import <Firebase.h>

一切都很好,直到我添加了这个[FIRApp configure];就出现错误了。

Undefined symbols for architecture arm64: "OBJC_CLASS$_FIRApp", referenced from: objc-class-ref in HWOFAppDelegate.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我查看了每一个类似问题的stackoverflow链接,并尝试了每一个解决方案,但没有像更改Other Linker Flag等那样帮助我......请帮帮我。非常感谢......我正在使用带有Objective-C的Xcode 12.1,以下是我收到的错误截图。

enter image description here

和添加的依赖关系的截图

enter image description here


不行,我尝试过了...我不确定,但可能是因为我的项目太旧了,所以才会遇到这个问题...但我不知道该怎么解决。 - Ruchi Makadia
旧项目应该使用CocoaPods而不是SPM。 - Cy-4AH
我尝试使用Cocoa,但在Cocoa Pod中,我无法在我的APPdelegate中导入Firebase,因此我现在使用Swift Package Manager。 - Ruchi Makadia
只需 @import Firebase; - Cy-4AH
这是一个Swift文件的包链接:https://safenote.co/r/5fabf1a57e4a77@32263035 - Ruchi Makadia
显示剩余5条评论
5个回答

12

经过多次搜索,我解决了问题。 解决方法如下:

  1. 在“其他链接器标志”中加入“$(inherited)”
  2. 将“仅构建活动架构”值设置为“Yes”
  3. 添加运行脚本以便使用firebase SPM,“${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run”
  4. 清理项目
  5. 构建项目

如果Pod不是SPM,脚本将是什么? - Bhargav Sejpal
1
“仅构建活动架构”选项设置为“是”,是否仅会针对您正在构建的机器架构进行编译?如果要编译到实体手机或将其发送到应用商店,该怎么办? - Tomas

2

在我的最近一项工作中集成MLKit时遇到了相同的问题。 应用程序在模拟器和设备上运行良好,但当我尝试归档构建时,它开始向我抛出以下错误-:

Undefined symbol: _OBJC_CLASS_$_MLKFaceDetector

我正在使用我的文件中的MLKFaceDetector对象。
解决方案: 前往“Build Settings” -> “Architectures” -> 用arm64替换标准架构。同时,确保arm和64之间没有空格。
我理解的原因是MLKit仅支持64位而不是32位,并且由于我们使用了标准架构来针对32位和64位,因此在32位上进行存档时Xcode无法找到MLKit文件。因此,我们明确告诉Xcode仅为64位而不是32位存档。
缺点-它将不支持一些旧的iOS设备。

对我而言,只有这个解决方案可行。它会在哪些旧版 iOS 设备上运行?被接受的解决方案不起作用。此外,您后来是否发现任何可以使其在旧设备上也能正常工作的东西? - ranjjose
1
它不适用于旧设备,因为它们仅支持32位,但这不会对大多数由苹果支持的现在的设备产生太大影响,因为几乎所有这些设备都是64位的。 - Imran
谢谢!然而,当我进行这些更改时,我得到了一个不同的错误:FBLPromises.h文件未找到。此错误出现在GoogleUtilities_Environment下。 - ranjjose

1

我终于找到了解决方法。对于我而言,将 iOS 部署目标版本更改为比之前更高的版本是可行的。我的部署目标版本是 9.0,我将其改为 13。

步骤:目标-常规-部署信息


-1

可以试一下这个,它会有帮助:

将链接 -> Mach-O类型更改为动态库,针对你所使用的框架,然后它就能正常工作了。

Screenshot


-1

我必须将我的操作系统和Xcode更新到最新版本才能使其正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接