构建iOS模拟器,但链接到为iOS构建的目标文件。

21
在我将Google Places集成到我的应用程序之前,我在模拟器上运行它没有任何问题,但现在我只能在实际设备上运行我的应用程序。我尝试了排除arm64,就像很多答案中建议的那样,但没有成功。完整的错误信息如下:
构建iOS模拟器,但链接到为iOS构建的对象文件,文件'/Users/davitmuradyan/Documents/DigiSoft/trip-share-ios/TripShare/Pods/GoogleMaps/Base/Frameworks/GoogleMapsBase.framework/GoogleMapsBase'的架构为arm64。

如果您尝试在M1机器上运行模拟器,需要预期工具会假定模拟器=x86并且会不幸地感到困惑。 - gnasher729
1
@gnasher729,这是要帮助我吗?谢谢您的回复。 - NoName555
5个回答

44

现在就这样吧

  1. 在你的应用程序文件夹中找到Xcode。
  2. 选择该应用程序,然后按 Command-I 键(或右键单击/使用文件菜单并选择“获取信息”)。这将打开一个包含有关该应用程序详细信息的信息窗口。
  3. 在信息窗口中,查找一个名为“使用 Rosetta 打开”的复选框。勾选该框。点击这里:
  4. 关闭信息窗口。
  5. 如果你已经运行该应用程序,请退出并重新启动它。

我真的花了两个工作日来调整Xcode、它的参数和库,到处阅读无尽的FAQ,包括在SO上。然而,我所要做的一切就是点击这个复选框,就可以解决所有问题... - Dario Fumagalli
谢谢。我尝试了两个小时,最终这个解决方案对我起作用了。 - Adil Shinwari

5

解决方案1:进入构建设置 > 排除构架,添加 arm64 到调试和发布中。

解决方案2:进入 Xcode 首选项 > 位置,然后删除派生数据文件并清理项目并运行。

解决方案3:删除该框架。

解决方案4:使用包安装代替 Pod。


2

x86_64 架构是在模拟器中运行项目所需的。

arm64 架构是在真实设备上运行项目所需的。

您可以使用以下命令来检查 Google Place SDK 是否包含 x86_64:

lipo -info /Users/XXXXXXXXX/XXXXXXXXXXXX/GooglePlace.framework/GooglePlace

将 SDK 文件拖放并进行检查。

如果您已将 Google place SDK 添加为静态文件,请通过 Pod 文件使用它。


1
这对我有用。在集成MLKit时,我首先更新到了arm64,并能够在设备上运行,但所有模拟器都消失了。为了在模拟器上运行,我不得不进一步更改为x86_64。 - Imran

1
对于M1芯片,"使用Rosetta打开"可能有效。
但是在更新到Sonoma 14.0(XCode为15.0)之后,在"获取信息"窗口中找不到"使用Rosetta打开"选项。
或者,可以尝试以下操作:
Xcode -> 产品(在菜单栏中) -> 目标 -> 目标架构 -> 选择"显示Rosetta目标"。
之后,构建列表中的设备应该能够在末尾显示"(Rosetta)",例如iPhone 15(Rosetta)。
项目应该能够在这些Rosetta模拟器上运行。

对于Xcode 15,这是唯一有效的解决方案。 - undefined

-2

在排除架构时要小心 - 有时会导致应用程序崩溃(最好的例子是RNBackgroundFetch - 在排除arm64时将无法工作)。

使用Rosetta启动完美运行(应用程序 -> 右键单击XCode -> 获取信息 -> 选中“使用Rosetta”


答案的第一部分应该是对原问题的评论(它本身不是答案),第二部分是已接受答案的副本,但表述不够清晰(也不够直观)。 - ephemer

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