【发布时间】:2021-05-04 18:47:19
【问题描述】:
我有一个应用程序,它在物理设备和 iOS 模拟器中配备英特尔处理器的旧 Mac 上编译和运行良好。
同样的应用程序也可以在具有 物理 iPhone 设备的新 Apple Silicon Mac 上编译和运行良好,但它拒绝为 iOS 模拟器编译。 p>
如果没有模拟器支持,调试周转时间会变得很长,所以我正在尝试解决这个问题。更不用说 Xcode 预览功能也不起作用,这很烦人。
我遇到的第一个错误(但从 Intel Mac 转移到 M1 Mac)如下所示。
building for iOS Simulator, but linking in dylib built for iOS, file '/Users/andy/workspace/app/Pods/GoogleWebRTC/Frameworks/frameworks/WebRTC.framework/WebRTC' for architecture arm64
我使用的 Cocoapods 库是 GoogleWebRTC,根据its doc,应该支持 arm64,所以我很困惑为什么会抛出上述错误。正如我之前所说,它在我认为在 arm64 上运行的真实设备中编译得很好。
根据文档..
此 pod 包含二进制形式的 WebRTC iOS SDK。这是一个动态的 包含 armv7、arm64 和 x86_64 切片的库。位码是 不支持。我们目前提供的 API 仅适用于 Objective C。
我在网上搜索并it appears 似乎有 2 种解决方法来解决此问题。
- 第一个是将
arm64添加到Excluded Architectures - 第二个选项是将
Build Active Architecture Only标记为Release构建。
即使我在运行在 arm64 架构下的 M1 Mac 上编译我的应用程序时,我也不完全了解上述是否有必要,因为该解决方案似乎仅适用于不支持 arm64 模拟器的 Intel Mac,因为对于 Intel Mac,模拟器可能在 x86_64 中运行,而不是在 arm64 中运行,因此解决方案 #1 不适用于我的情况。
当我只调整第二个更改时,并没有真正发生任何变化,并且会引发相同的错误。
当我进行两项更改并尝试构建时,我现在在构建期间收到以下第二个错误。 (不是 100% 确定我是否解决了第一个错误/我可能通过调整两个更改引入了第一个错误之外的第二个错误)
Could not find module 'Lottie' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator
我正在使用的第二个库是 lottie-ios,我正在使用 swift 包管理器将其引入。我想正在发生的事情是因为我在 iOS 模拟器的构建设置中排除了arm64,Xcode 正试图在x86_64 中运行我的应用程序。但是,由于某种原因,库不支持在 x86_64 中运行,并且会引发错误。对于库是否可以在 x86_64 或 arm64 中运行,我没有太多见解,因此我无法深入研究这个问题。
我的弱结论是 GoogleWebRTC 不能被编译以在带有 arm64 的 iOS 模拟器中运行(与 its doc 所说的不同),并且 lottie-ios 不能被编译为在带有 @987654337 的 iOS 模拟器中运行@。所以在这种情况下我不能同时使用它们。
第一季度。我想知道我可以做什么样的改变来解决这个问题...
当从 Intel Mac 编译时,该应用程序可以在设备和模拟器中完美地编译和运行。当从 Apple Silicon Mac 编译时,该应用程序在设备中编译和运行良好。只是应用程序拒绝在 Apple Silicon Mac 的 iOS 模拟器中编译和运行,我似乎无法弄清楚原因。
第二季度。如果没有可用的解决方案,我想首先了解为什么会发生这种情况。
我真的不想再买旧的 Intel Mac 只是为了让模拟器在模拟器上运行。
【问题讨论】:
-
遇到了类似的问题。您找到解决
Could not find module 'X' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator问题的方法了吗? -
我发布了一个答案。我希望这有助于解决您遇到的问题..
标签: ios xcode cocoa-touch apple-silicon