Xcode 12: FIRAnalyticsConnector 构建错误

38

我升级到Xcode 12后,我的项目无法在模拟器上构建。

我得到的错误是:

ld: in ... /Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector(
FIRAnalyticsConnector_e321ed8e3db06efc9803f6c008e67a34.o), 
building for iOS Simulator, but linking in object file built for iOS, file
'.../Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector'
for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决方法是将 arm64 添加到我的项目中的“构建设置” > “排除的架构”,但这样就无法为我的真实设备构建。

我已经尝试清理构建文件夹、更新Pod文件、重新启动等操作。

我正在使用:

  • Firebase/Analytics (6.33.0)
  • Xcode 12.0.1 (12A7300)
  • CocoaPods: 1.9.3

有什么想法吗?


你更新了你的 Pod 文件吗? - roadRunner
@sekoyaz 是的。我使用了所有依赖项的最新版本。但在更新之前,我也遇到了这个错误。 - themenace
10个回答

70

好的,我最终找到了解决方法。

将“仅构建活动架构”更改为“是”,同时也将其应用于“发布”。
找到该设置的方法是选择您的项目 >“构建设置”>“目标”(您的目标)>“体系结构”。

需要更改的设置图像

源代码和更详细的说明可以在此处找到:
https://dev59.com/7lIG5IYBdhLWcg3wnS49#64139830

请注意,问题与Firebase无关。 我仍然保留它,因为它可能会引导其他人遇到这个问题并帮助他们解决问题。

Apple Silicon

如果您正在使用苹果芯片,请考虑查看@Aspen的下面的答案: https://dev59.com/klIG5IYBdhLWcg3wjxmN#65460729


27
在苹果 M1 上运行时,这并没有解决问题。 - Adrienne
8
我可以确认,在M1上也出现了这个问题。 - Jacobo Koenig
2
@themenace 是的,同样的错误信息。我认为这与芯片是M1 arm64有关,但库本身(在这种情况下是Firebase Analytics)尚未更新为M1。我已经通过下面的答案解决了这个问题。 - Adrienne
1
@Aspen 我明白了。很棒你找到了解决方案并在这里添加了它 :) 由于我还没有拥有M1,所以无法验证它,但我相信其他人会的。 - themenace
2
请大家针对 M1 的问题查看 @Aspen 的答案。 - Mihir Oza
显示剩余2条评论

36

也对我有用,但我想知道在发布应用时是否有任何缺点? - Tolgay Toklar
2
谢谢,兄弟。对我有用,但是一个建议,如果你能直接在回答中粘贴这些步骤,会更有帮助。 - Mihir Oza
运行得非常好!只有一个问题:如果我们将这些更改推送到应用商店,是否会出现问题? - Juzer Taher Totanawala

26

我通过在Rosetta(Apple M1)下运行xcode12来解决了此问题。

打开Finder -> 应用程序 -> 找到Xcode -> 右键单击 -> 获取信息 -> 勾选使用Rosetta打开。

然后重新打开Xcode。


请不要在多个问题中添加相同的答案。请回答最好的一个,并将其余的标记为重复,一旦您获得足够的声望。如果它不是重复的,请根据问题调整帖子并标记为未删除。 - Bhargav Rao
2
哇塞,这个起作用了。Rosetta是什么?我一直被她卡住了。谢谢你。 - Nehal Jaisalmeria
这个Rosetta解决方案已经无法在Xcode 14.3及以上版本中使用。阅读此文 - Tommy Leong

11

我的情况有些不同。根据这位Firebase工程师的说法,

FIRAnalyticsConnector现在已成为FirebaseAnalytics的xcframework版本的一部分,不需要进行链接。

进入目标 Build Settings(不是项目),搜索 Other Linker Flags,然后从列表中删除 FIRAnalyticsConnector 即可解决该问题。

有趣的是,当我运行 pod deintegratepod install 时,它并没有解决这个问题。


对于像我一样更新Firebase pod的人来说,需要注意从“Other Linker Flags”中删除其他废弃的框架,例如FirebaseInstanceID。 - Marcos Rocha

3

3

对于苹果芯片机器,我这样做是为了让应用程序在模拟器上运行:

请注意,您需要进入“项目”而不是“目标”。

步骤1: 进入您的顶级项目,然后 -> 在“项目”下添加arm64到排除架构中 enter image description here

步骤2: 进入Pods -> 在“项目”下添加arm64到排除架构中 enter image description here


2

在运行pod install后,我在Xcode v12.4中遇到了同样的问题。

经过在我的项目中搜索后,我最终在目标的Build Phases下找到了它的引用,在Link Binary With Libraries部分。从列表中移除FIRAnalyticsConnector.framework解决了我的问题。


0

那个方法有效。我使用Rosetta打开了Xcode。

步骤1 - 安装

Homebrew(推荐)

brew install 417-72KI/tap/xcode-arch

使用方法

$ xcode-arch -p
arm64 # `Open using Rosetta` is off
$ xcode-arch -c
Set x86_64 for /Applications/Xcode.app
$ xcode-arch -p
x86_64 # `Open using Rosetta` is on
$ xcode-arch -u
Set arm64 for /Applications/Xcode.app
$ xcode-arch -p
arm64 # `Open using Rosetta` is off

1
目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Vikram Parimi

0
从TARGET ->“构建设置”->OTHER_LDFLAGS列表中删除“FIRAnalyticsConnector”框架。

0

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