Xcode 12 Apple M1 arm64 - Designable error: "wrong architecture"

Xcode 12 Apple M1 arm64 - Designable error: "wrong architecture"

我当前的项目在基于 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"

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

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

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

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

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

  • 令人沮丧的是,即使我在 IBDesignable 视图中对框架没有任何依赖性,我还是遇到了一些与我的应用程序依赖性相关的错误——我通过这个答案修复了这些错误: 禁用了“ONLY_ACTIVE_ARCH” 因为我的 cocoapod 依赖性。

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

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

通常,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 模拟器的工件。

这里有一些简单但不太好的解决方案:

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

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

(下面有补充)

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

(下面还有一个)

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

更新

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

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