当前位置: 首页 > 知识库问答 >
问题:

为iOS模拟器生成Xcode错误,但在为iOS生成的dylib中链接。适用于Apple Silicon M1 Mac的ARM64'架构

李兴庆
2023-03-14

我有一个应用程序,它可以很好地编译和运行在旧的Mac电脑上,在物理设备上使用Intel处理器&iOS模拟器。

同样的应用程序也可以在苹果最新的M1处理器的Mac上进行编译,并且在iPhone实体设备上运行良好,但是,它拒绝为iOS模拟器进行编译。

没有模拟器的支持,调试周转的时间会变得很长,所以我正在尝试解决这个问题。更不用说Xcode预览功能也不起作用了,这很烦人。

我在没有做任何更改(但从Intel Mac移动到M1 Mac)的情况下遇到的第一个错误如下所示。

构建iOS模拟器,但在为iOS构建的dylib中链接,文件'/users/andy/workspace/app/pods/googleWebRTC/frameworks/frameworks/webrtc.frameworks/webrtc'用于架构ARM64

医生说。

此pod包含二进制形式的WebRTC iOS SDK。它是一个动态库,包含armv7、arm64和x86_64切片。不支持位码。我们目前提供的API仅为Objective C。

我在网上搜索,它似乎有两个解决这个问题的办法。

    null

当我只修改第二个更改时,没有真正改变,并且抛出相同的错误。

当我同时进行更改并尝试构建时,我现在会在构建过程中得到以下第二个错误。(如果我解决了第一个错误,并不是100%确定/我可能通过调整两个更改而引入了第二个错误。)

找不到目标“x86_64-apple-ios-simulator”的模块“lottie”;找到:arm64,ARM64-Apple-IOS-Simulator

我的结论是,由于某种原因(不像它的文档所说的那样),GoogleWebRTC不能编译为在带有ARM64的iOS模拟器中运行,Lottie-IOS不能编译为在带有X86_64的iOS模拟器中运行。所以在这种情况下我不能同时使用它们。

Q1.我想知道我能做出什么样的改变来解决这个问题...

当从Intel Mac编译时,该应用程序可以在设备和模拟器中完美地编译和运行。这款应用程序在苹果硅Mac上编译时,在设备上运行良好。这只是应用程序拒绝编译和运行在苹果硅Mac的iOS模拟器,我似乎不明白为什么。

Q2.如果没有可用的解决方案,我想首先理解为什么会发生这种情况。

我真的不想再买旧的英特尔Mac了,只是为了让事情在模拟器中工作。

共有1个答案

周兴朝
2023-03-14

回答我自己的问题,希望能帮助其他有类似问题的人。(直到另一个用户添加了一个好的答案)

我发现GoogleWebRTC实际上要求它的源代码基于它的源代码DEPO用x64编译。

对于以iOS设备为目标的构建,应将其设置为“ARM”或“ARM64”,具体取决于设备的体系结构。对于要在模拟器中运行的构建,应该将其设置为“x64”。

这一定是为什么我得到以下错误。

构建iOS模拟器,但在为iOS构建的dylib中链接,文件'/users/andy/workspace/app/pods/googleWebRTC/frameworks/frameworks/webrtc.frameworks/webrtc'用于架构ARM64

如果我错了请指正,但默认情况下,似乎运行在苹果M1硅中的Xcode似乎推出了ARMarch类型的iOS模拟器。由于我的应用程序在Intel Mac的模拟器上运行得很好,所以我现在做了以下的变通操作。

  1. 退出Xcode。
  2. 转到查找器并打开应用程序文件夹。
  3. 右键单击Xcode应用程序,选择获取信息
  4. 在“Xcode信息窗口”中,检查使用Rosetta打开
  5. 打开Xcode并重试运行。

我需要做的就是让我的应用程序重新工作,它依赖于一个arm模拟器尚未完全支持的库。(我相信在Rosetta模式下启动Xcode也会运行x86中的模拟器..??这就解释了为什么在做了上述更改之后,一切都能正常运行)

很多在线消息源(通常在M1 Mac于2020年11月发布之前发布)都在谈论“将arm64添加到排除的架构”,但该解决方案似乎只适用于Intel Mac而不适用于M1 Mac,因为我并不需要做出这种改变来使其再次正常工作。

当然,在Rosetta模式下运行Xcode不是一个永久的解决方案,Xcode会降低lil位的速度,但它是一个临时解决方案,可以在您正在使用的某个库无法在arm64模拟器中运行的情况下使运行正常。不过。

 类似资料:
  • 我正在努力获得一个大的(并且正在使用Xcode 11!)在Xcode 12(beta 5)中构建项目,为iOS 14做准备。代码库以前在Objective-C中,但现在它同时包含Objective-C和Swift,并使用Objective-C和/或Swift的POD。 我已经推出了新的CocoaPods测试版,支持Xcode 12(目前为1.10.0.beta 2)。 Pod安装成功。当我进行构建

  • 我试图得到一个大(和工作在Xcode11!)在Xcode 12(beta 5)中构建项目,为iOS 14做准备。代码库以前是Objective-C,但现在它同时包含Objective-C和Swift,并使用Objective-C和/或Swift的POD。 我已经推出了支持Xcode12的CocoaPods新beta版(目前是1.10.0.beta2)。 吊舱安装成功。当我进行构建时,我在pod框架

  • 在ffmpeg/classes/lib/libavcodec.a(aacencdsp.o)中,为iOS模拟器构建,但链接到为独立构建的对象文件中,文件'ffmpeg/classes/lib/libavcodec.a'用于体系结构x86_64。 我的库文件libavcodec.a支持x86_64、i386、arm64、armv7、arm7等。 我在中设置了下面的代码,然后在中设置了下面的代码,但没有

  • 所以我用https://github.com/franzsilva/flutter_launcher_icons为我的颤动项目生成图标——这很甜蜜,非常感谢。 尝试创建IOS应用程序时,出现以下错误: Project/ios/Runner/Assets.xcassets:错误:没有一个输入目录包含匹配的贴纸图标集或名为"Icon-App"的应用程序图标集。 我对iOS发展知之甚少,所以我不知道发生

  • 我在iPhone(模拟器)上自动化一个应用程序,我需要在应用程序启动后滑动页面(在最开始的飞溅页面)使用滑动功能不起作用: 尝试了其他选项,例如执行一个来实现同样的功能,但也没有成功。并尝试了更多的在线解决方案。在我的情况下,没有一个起作用。我在某个地方读到,版本7及以上不支持刷卡。这是真的吗?或者有解决办法吗? 我有最新版本的Xcode,Appium Xcode:7.3 Appium:1.4.1

  • 问题内容: 我不断收到以下错误: 我尝试删除FBSDK并重新安装,但是那没有用。我也怀疑我将框架桥接到Swift中可能是问题所在。我的桥接头包含以下内容: 我的AppDelegate.swift文件导入FBSDKCoreKit。 没有其他链接器标志。 我正在运行Xcode 6.3.2并为iOS 8.3构建项目 如何清除此错误? 问题答案: 如果没有记错的话,您使用的是Facebook于2015年9