通用二进制检查器
粘贴 lipo 或 file 为你的应用打印的内容。它就在本页面读取,不会发送到任何地方。
试试示例:
功能
Mac 应用的代码可以包含一种或多种架构:arm64 对应 Apple silicon,x86_64 对应 Intel。同时包含两者的文件就是通用二进制。这个工具会读取 lipo 或 file 打印的文本,找出其中的架构名称,并告诉你每个部分能在哪些 Mac 上运行。如果你粘贴了同一个应用的多个部分,它还会告诉你整个应用是否通用,因为只要有一个辅助程序或框架只为单一架构构建,就足以破坏通用性。
要运行的命令
lipo -archs YourApp.app/Contents/MacOS/YourApp file YourApp.app/Contents/MacOS/YourApp
要一次检查包内所有可执行部分,包括框架和辅助程序:
find YourApp.app/Contents -type f -perm +111 -exec file {} +请对你实际发布的那个构建运行这些命令,而不是调试构建,因为调试构建可能只包含你构建它的那台 Mac 的架构。
每种结果的含义
| 结果 | 含义 |
|---|---|
| 通用 | 同时包含 arm64 和 x86_64。在 Apple silicon 和 Intel Mac 上原生运行。 |
| 仅限 Apple silicon | 只有 arm64。它无法在 Intel Mac 上打开,所以请在你的网站上写明。 |
| 仅限 Intel | 只有 x86_64。在 Apple silicon 上需要 Rosetta 2,而 Apple 表示 macOS 27 之后将结束对应用的通用 Rosetta 2 支持。 |
| 无法运行 | 只有 i386 或 PowerPC 代码。自 Catalina 起,macOS 就不再运行 32 位应用。 |
来源:Apple Developer, Building a universal macOS binary 和 MacRumors 关于 Rosetta 2 支持结束的报道,均于 2026年11月3日 阅读。
运作方式
这是在本页面上运行的几条简单文本规则。它认识 lipo -archs、lipo -info、lipo -detailed_info 和 file 的输出,也认识 arm64、arm64e、x86_64、x86_64h、i386 和 PowerPC 这些名称。如果一个都找不到,它会说无法识别这段文本,而不是瞎猜。它只读取文本,所以无法判断里面的代码是否真的能用。
问题
怎么知道一个 Mac 应用是不是通用的?
对应用内 Contents/MacOS 中的二进制运行 lipo -archs。如果同时列出 arm64 和 x86_64,它就是通用的。你也可以在 Finder 中选中应用,选择 Get Info,然后看“种类”。
我的主二进制是通用的。我的应用也是吗?
不一定。包内的每个框架、辅助程序和插件都需要具备相同的架构。请粘贴它们全部的 file 输出来检查。
仅支持 Intel 的应用在 Apple silicon 上还能继续用吗?
目前通过 Rosetta 2 运行。Apple 表示 macOS 27 之后将结束对应用的通用 Rosetta 2 支持,只对一些较老的游戏保留一个很窄的例外。
我粘贴的内容会被发送到别处吗?
不是。文本只在本页面读取,不会发送任何内容。