Xcode 原来是 16 版本, 最近打包后收到邮件警告

67c8e831b8452914156df626617ee367.png
其中有警告 ITMS-90725
大概意识是让我升级 Xcode, 在 2026 年 4 月后所有的 app 都必须用 Xcode 26 来打包上传
于是我便升级了 macos 26.2
然后升级了 Xcode
之后发现我的老项目找不到我的设备和模拟器了

bb4915c2ec2470c5cf4112b9b8a01383.png
AI 问了也是答非所问,于是在网上找帖子发现有人提到了这个问题

1febb4939dd3655ff6fa952c5a8f718f.png
感谢网友, 于是我在项目里面去掉了我的build setings 中Excluded Architectures选项中的 arm64可以正常找到设备和模拟器了
当然了, 还要知道为什么这么改
Xcode 16 vs Xcode 26 架构与调试机制深度对比
1. 从“兼容模式”转向“原生强制” (Native Only)
-
Xcode 16 时代:
处于 Apple Silicon (M系列芯片) 的中期。为了照顾尚未更新arm64架构的第三方库,Xcode 16 内部保留了大量的 Rosetta 2 (转译) 逻辑。即便在设置中排除了arm64,Xcode 16 仍可能默默地通过x86_64模式运行模拟器,用户往往感知不到配置错误。 -
Xcode 26 时代:
苹果已基本完成“去 Intel 化”。Xcode 26 的模拟器和调试工具(CoreDevice)是完全为 arm64 原生设计的。如果你在设置中“排除”了arm64,Xcode 会判定该项目没有可在当前硬件上运行的代码,从而直接“罢工”,甚至不显示模拟器列表。
2. 调试挂载机制的彻底改变 (CoreDevice 2.0)
这是导致 Developer disk image could not be mounted 报错的深层原因:
-
旧版 (Xcode 16):
采用传统的磁盘映射(DDI)方式,挂载过程对项目的架构设置检查较松,只要镜像文件成功拷贝即可运行。 -
新版 (Xcode 26):
引入了更严苛的 “架构校验”。当你尝试真机运行时,Xcode 会预先检查项目的EXCLUDED_ARCHS设置。逻辑变化:如果 Xcode 发现你排除了
arm64,它会认为:“该 App 无法在 iPhone (arm64) 上运行,因此无需挂载调试镜像。”结论:修正架构设置(清空排除项)能间接修复挂载报错。
3. 模拟器架构的“纯净化”
-
Xcode 16 之前:
模拟器文件通常采用 Fat Binary(胖二进制),同时包含x86_64和arm64两个版本。 -
Xcode 26 时代:
为了提升编译速度并减小磁盘占用,iOS 26 的模拟器 Runtime 几乎是 纯 arm64。一旦在项目中设置了排除该架构,就相当于堵死了唯一的运行通路。
📊 总结对比表
| 特性 | Xcode 16 (2024) | Xcode 26 (2026) |
|---|---|---|
| 对 Intel 架构支持 | 依然支持转译运行 (Rosetta 2) | 基本废弃,仅限特殊兼容模式 |
| 架构容错度 | 较高,会自动寻找替代方案 | 极低,设置不匹配直接隐藏设备 |
| 调试挂载 | 传统的磁盘镜像 (DDI) | 动态票据验证 (CoreDevice 2.0) |
| 默认倾向 | 兼容老旧项目 | 强制要求原生 arm64 性能 |