Xcode 12 Apple M1 arm64 - 可设计错误:“错误的架构”

Posted

技术标签:

【中文标题】Xcode 12 Apple M1 arm64 - 可设计错误:“错误的架构”【英文标题】:Xcode 12 Apple M1 arm64 - Designable error: "wrong architecture" 【发布时间】:2020-12-14 07:57:22 【问题描述】:

在基于 Apple Silicon 的机器上使用 Interface builder 时,我当前的项目会引发 IBDesignable 错误。 我尝试排除 arm64 架构进行调试,以及我在互联网上找到的其他一些提示,但根本没有成功..

该项目在模拟器和真实设备上构建良好,但界面构建器似乎无法在基于 arm64 的系统上正确绘制那些 IB Designables...奇怪。

希望有人知道设置哪个标志来纠正这个错误..bc 这让我发疯:/

错误:

"dlopen(MYAPP.app, 1): no suitable image found. Did find MYAPP.app: mach-o, but wrong architecture"

希望你们能帮助我,我知道这是早期采用者问题的一部分,但这必须以某种方式解决!?

【问题讨论】:

有同样的问题。在 M1 Mac mini 上运行 Xcode。 12.3没解决。 我用一个新的示例项目为它提交了一个雷达。一定是Xcode编译成x86左右,然后打不开造成的。 很高兴看到其他人至少有同样的体验 :) 如果有什么变化或者我会找到解决方案,我会更新这个线程;) 这有什么更新吗?我仍然无法为 Xcode 12 构建 直到今天我的 IBDesignables 仍然没有在 InterfaceBuilder 中呈现......不幸的是:/ 【参考方案1】:

这里也一样。 M1 MacBook Air 上的 Xcode 12.4、macOS 11.2。

通常,InterfaceBuilder 会尝试从以下位置查找二进制文件: ~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/$Configuration-iphonesimulator

但在 M1 Mac 上,InterfaceBuilder 可在此处找到: ~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/$Configuration-iphoneos

我猜这是 Xcode 的错误...

如您所知,$Configuration-iphoneos 适用于 ios 设备。不适用于模拟器。而 InterfaceBuilder 确实需要 iOS 模拟器的工件。

这里是简单但不太好的解决方案:

    为某些 iOS 模拟器构建 cd ~/Library/Developer/Xcode/DerivedData/[...]/Build/Products/ cp -r $Configuration-iphonesimulator $Configuration-iphoneos 重启 Xcode

我终于可以修复@IBDesignable 预览。但我不能非常推荐这个解决方案......

(以下补充)

我写了解决方法 shellscript: https://gist.github.com/dnpp73/4f9c12ad96909355a39b99e22e42eb14

(下面还有一个)

似乎在 Xcode 13 beta 上已修复。干得好 Apple Interface Builder 团队!

【讨论】:

下次出现错误时我会试试这个。实际上,我只是通过将所有可设计的代码复制粘贴到我自己的代码中来“解决”它(手动安装而不是 Cocoapods),但这不适用于更大的库 虽然最正确的答案是 Apple 在 Xcode 中解决这个问题,但我认为这个答案是最好的。我们尝试了许多构建设置修复,但没有一个对我们有用。这个有效!谢谢! 是的!非常感谢!这适用于 M1 Mac mini 上的 Xcode 12.4、macOS 11.2.3。 运行你的 ,但是,终端返回 >find: -regextype: unknown primary or operator 抱歉,这个解决方法脚本需要GNU find。 Mac 上默认的find 命令是BSD 版本。您可以通过brew install findutils 使用。您也可能需要设置PATH【参考方案2】:

这是我在项目中修复它的方法。

我所有的 IBDesignable 视图都在它们自己的框架中,没有其他依赖项(我已经有了这个设置)

在构建设置中,将“仅构建活动架构”更改为“否”以进行调试构建。

在构建设置中,将“支持的平台”更改为包含“macxos”以及 iOS 默认值,以用于调试构建

令人沮丧的是,即使我的 IBDesignable 视图对框架没有任何依赖关系,但我遇到了一些与我的应用程序依赖关系相关的错误——我通过这个答案修复了这些错误:https://***.com/a/42765750 禁用了“ONLY_ACTIVE_ARCH”为了我的 cocoapod 依赖。

在您的故事板中,您需要通过选择编辑器->刷新所有视图来触发重建。

【讨论】:

我认为在某些情况下必须采取更多步骤 - 在找到这篇文章之前,我已经解决了同样的问题一段时间,您的解决方案为我解决了这个问题。然后,我最终不得不返回并重做/撤消一大堆 cocoapod 的事情,这导致我基本上将所有设置恢复为默认值(再次破坏了我的 IBDesignables)。不过,这次回顾您的解决方案并没有解决它,所以我必须在 *** 上找到它之前进行了一些调整,这也是必要的 - 不过不知道是什么。 嘿,我退回了 M1 mac,所以不能再帮忙了,抱歉 :( 我的修复有时也有效,但每次我重新启动 Xcode 并清理项目并自行修复。不确定如何/为什么。 终于我可以自己尝试这个解决方案了,我也不得不退还我的 M1 书。现在我终于得到了替代品。但不幸的是,这现在不能解决我的 IBDesignable 问题。 imo 这很奇怪 bc xcode 应该准备好在他们自己的机器上正常工作..但显然它还没有(还) @deanWombourne 摆脱 M1 似乎是最好的解决方案,它还没有准备好和稳定的产品【参考方案3】:

更新

XCode 13 解决了 M1 上的问题。无需在构建设置中进行额外设置。

这些解决方案非常老套,还可能会干扰项目的运行状况。我建议任何尝试过这些解决方案的人在被遗忘之前尽快放弃任何更改。

【讨论】:

确实如此,苹果终于解决了这个问题! 9 个月后 :p (y) 最终他们会修复它。他们拥有芯片,他们将尽一切努力使其正常工作并优先于英特尔的芯片。 我在 Xcode 13 中仍然遇到一个奇怪的错误。新问题? file:///Users/shimak/Documents/Experiment/B/B/Base.lproj/Main.storyboard:错误:IB Designables:无法渲染和更新 ViewController(BYZ-38-t0r)的自动布局状态:dlopen( B.app,0x0001):尝试:'/B'(没有这样的文件),'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime /Contents/Resources/RuntimeRootB.app'(没有这样的文件),'B.app'(mach-o 文件,但是是不兼容的架构(有'x86_64',需要'arm64')),'/usr/lib/ B'(没有这样的文件) 猜想,但您过去是否更改过构建设置?提示:消息(have 'x86_64', need 'arm64')。只是一个疯狂的猜测,如果不是问题,没有人会生气;) 是的,以支持新的操作系统更改的活动架构并排除架构。改回默认值还是同样的问题

以上是关于Xcode 12 Apple M1 arm64 - 可设计错误:“错误的架构”的主要内容,如果未能解决你的问题,请参考以下文章

Apple M1 - macosx-arm64 尚不可用的 Maven Java 依赖项

Docker(Apple Silicon/M1 Preview)MySQL“清单列表条目中没有与 linux/arm64/v8 匹配的清单”

M1芯片XCode 12编译模拟器Architecture报错问题

M1芯片XCode 12编译模拟器Architecture报错问题

M1芯片XCode 12编译模拟器Architecture报错问题

M1芯片XCode 12编译模拟器Architecture报错问题