升级macOS11.6和Xcode13后更新Realm出现MH_MAGIC[_64]架构错误
问题排查与修复方案
错误根因
你遇到的file does not start with MH_MAGIC[_64]报错,结合日志中fat file, but missing compatible architecture (have 'x86_64,i386', need 'x86_64')的提示,本质是Xcode 13对模拟器二进制加载的校验规则升级,旧版Carthage构建的通用fat框架同时包含i386、x86_64架构时,Xcode无法正确识别有效架构切片导致加载失败。
排查步骤
- 检查Carthage版本:执行
carthage version命令,0.38.0以下版本的Carthage对Xcode 13+的构建支持存在已知缺陷 - 校验Realm框架架构:执行
lipo -info Carthage/Build/iOS/Realm.framework/Realm,确认输出的架构列表是否符合当前运行环境要求,Apple芯片Mac运行x86_64模拟器需要Rosetta转译,若构建包同时包含无效的i386架构会触发校验失败 - 确认Xcode构建设置:检查项目
Build Settings中的Excluded Architectures是否手动添加了模拟器架构排除规则,错误的排除规则会导致架构匹配失败
修复方案
按顺序执行以下操作:
升级Carthage到最新正式版
执行命令:brew upgrade carthage清空所有缓存与旧构建产物
执行命令:
rm -rf ~/Library/Caches/org.carthage.CarthageKit rm -rf ./Carthage rm -rf ~/Library/Developer/Xcode/DerivedData
使用XCFramework模式重新构建Realm
Xcode 13开始优先支持XCFramework格式的二进制包,可避免传统fat框架的架构冲突问题,执行构建命令:carthage update Realm RealmSwift --platform iOS --use-xcframeworks更新项目中的框架引用
- 删除项目中原有旧的
Realm.framework、RealmSwift.framework引用 - 从
Carthage/Build/目录下将新生成的Realm.xcframework、RealmSwift.xcframework拖入项目,勾选Embed & Sign选项
- 调整项目构建设置
- 清空
Excluded Architectures中所有自定义的架构排除规则,使用Xcode默认配置即可 - 将
Validate Workspace设置为Yes,开启构建时的框架有效性校验
完成后Clean项目重新构建即可解决该问题。
内容的提问来源于stack exchange,提问作者Simon Moshenko
相关产品推荐
相关产品推荐

