Xcode12AppleM1arm64-可设计的错误:“错误的架构”
我当前的项目在基于 Apple Silicon 的机器上使用 Interface builder 时会抛出 IBDesignable 错误。
该项目在模拟器和真实设备上也能很好地构建,但界面构建器似乎无法在基于 arm64 的系统上正确绘制那些 IB Designables……很奇怪。
希望有人知道要设置哪个标志来纠正这个错误..bc 这让我发疯了:/
错误:
"dlopen(MYAPP.app, 1): no suitable image found. Did find MYAPP.app: mach-o, but wrong architecture"
希望你们能帮助我,我知道这是早期采用者问题的一部分,但这必须以某种方式解决!?
回答
同样在这里。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 团队干得好!
回答
这是我在我的项目中修复它的方法。
-
我所有的 IBDesignable 视图都在它们自己的框架中,没有其他依赖项(我已经有了这个设置)
-
在构建设置中,将调试构建的“仅构建活动架构”更改为“否”。
-
在构建设置中,更改“支持的平台”以包含“macxos”以及 iOS 默认值,用于调试构建
-
令人沮丧的是,即使我对带有 IBDesignable 视图的框架没有任何依赖关系,我也遇到了一些与应用程序依赖关系相关的错误 - 我通过以下答案修复了这些错误:https : //stackoverflow.com/a/42765750它为我的 cocoapod 依赖禁用了“ONLY_ACTIVE_ARCH”。
-
在您的故事板中,您需要通过选择 Editor->Refresh all views 来触发重建。