gpt4 book ai didi

ios - 来自 Apple Silicon M1 Mac 的 Xcode 错误 'building for iOS Simulator, but linking in dylib built for iOS .. for architecture arm64'

转载 作者:行者123 更新时间:2023-12-03 16:01:13 27 4
gpt4 key购买 nike

我有一个应用程序,它可以在物理设备和 iOS 模拟器中使用英特尔处理器的旧 Mac 上编译和运行良好。
相同的应用程序还可以从具有 的 M1 处理器的较新 Apple Silicon Mac 编译和运行良好物理 iPhone 设备,但是 它拒绝为 iOS 模拟器编译。
如果没有模拟器支持,调试周转时间会变得很长,所以我正在尝试解决这个问题。更不用说 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 上运行的真实设备中编译得很好。
根据文档..

This pod contains the WebRTC iOS SDK in binary form. It is a dynamiclibrary that contains the armv7, arm64 and x86_64 slices. Bitcode isnot supported. Our currently provided API’s are Objective C only.


我在网上搜索了 it appears这个问题似乎有两种解决方法。
  • 第一个是通过添加 arm64Excluded Architectures
  • 第二个选项是标记Build Active Architecture Only对于 Release build 。

  • 即使我在运行在 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我正在使用一个快速的包管理器来解决这个问题。我猜发生了什么是因为我排除了 arm64在 iOS 模拟器的build设置中,Xcode 试图在 x86_64 中运行我的应用程序.但是,库不支持在 x86_64 中运行。出于某种原因,并引发错误。我对什么决定库是否可以在 x86_64 或 arm64 中运行没有太多见解,所以我无法深入研究这个问题。
    我的弱结论是 GoogleWebRTC无法使用 arm64 编译以在 iOS 模拟器中运行出于某种原因(与 its doc 所说的不同)和 lottie-ios无法使用 x86_64 编译以在 iOS 模拟器中运行.所以在这种情况下我不能同时使用它们。
    Q1。我想知道我可以做什么样的改变来解决这个问题......
    当从 Intel Mac 编译时,该应用程序可以在设备和模拟器中完美地编译和运行。当从 Apple Silicon Mac 编译时,该应用程序在设备中编译和运行良好。只是该应用程序拒绝在 Apple Silicon Mac 的 iOS 模拟器中编译和运行,我似乎无法弄清楚为什么。
    Q2。如果没有可用的解决方案,我想首先了解为什么会发生这种情况。
    我真的不想再购买旧的英特尔 Mac 只是为了让模拟器在模拟器中运行。

    最佳答案

    回答我自己的问题,希望能帮助有类似问题的其他人。 (直到另一个用户添加了一个好的答案)
    我发现 GoogleWebRTC 实际上需要用 x64 编译它的源代码基于其源代码库。

    For builds targeting iOS devices, this should be set to either "arm" or "arm64", depending on the architecture of the device. For builds to run in the simulator, this should be set to "x64".


    https://webrtc.github.io/webrtc-org/native-code/ios/
    这一定是我收到以下错误的原因。 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如果我错了,请纠正我,但默认情况下,运行在 Apple M1 芯片中的 Xcode 似乎启动了带有 arm 的 iOS 模拟器拱型。由于我的应用程序在 Intel Mac 的模拟器上运行良好,我现在做了以下解决方法。
  • 退出 Xcode。
  • 转到 Finder 并打开应用程序文件夹。
  • 右键单击 Xcode 应用程序,选择 Get Info
  • 在“Xcode 信息窗口”中检查 Open using Rosetta .
  • 打开 Xcode 并再次尝试运行。

  • 这就是我需要做的所有事情,以使我的应用程序(它依赖于 arm 模拟器尚未完全支持的库)再次工作。 (我相信在 Rosetta 模式下启动 Xcode 也会在 x86 中运行模拟器......??这解释了为什么在进行上述更改后一切正常)
    许多在线资源(通常在 2020 年 11 月 M1 Mac 发布之前发布)谈到“将 arm64 添加到 Excluded Architectures”,但该解决方案似乎仅适用于 Intel Mac,而不适用于 M1 Mac,因为我不需要做出改变以使事情再次发挥作用。
    当然,在 Rosetta 模式下运行 Xcode 并不是一个永久的解决方案,并且 Xcode 会减慢一点速度,但它是一个临时解决方案,可以让事情顺利进行,以防您正在使用的某个库在 arm64 模拟器中无法运行......但是。

    关于ios - 来自 Apple Silicon M1 Mac 的 Xcode 错误 'building for iOS Simulator, but linking in dylib built for iOS .. for architecture arm64',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65978359/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com