You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac App运行时如何以编程方式检测设备为Intel或Apple Silicon芯片

运行时检测Mac设备芯片类型的编程方案

通用兼容方案(支持所有macOS版本)

最稳妥的实现是通过sysctl系统调用读取硬件属性,该方案不受应用是否运行在Rosetta转译环境的影响,始终返回真实的硬件芯片类型。
使用时需要先导入sys/sysctl.h头文件:

Swift 代码示例

import Foundation

func isRunningOnAppleSilicon() -> Bool {
    var arm64Check: Int32 = 0
    var size = MemoryLayout<Int32>.size
    guard sysctlbyname("hw.optional.arm64", &arm64Check, &size, nil, 0) == 0 else {
        return false
    }
    return arm64Check != 0
}
// 返回true为Apple Silicon,返回false为Intel处理器

Objective-C 代码示例

#include <sys/sysctl.h>

- (BOOL)isRunningOnAppleSilicon {
    int32_t arm64Check = 0;
    size_t size = sizeof(arm64Check);
    if (sysctlbyname("hw.optional.arm64", &arm64Check, &size, NULL, 0) != 0) {
        return NO;
    }
    return arm64Check != 0;
}

极简方案(仅支持macOS 11及以上)

如果你的应用最低兼容版本为macOS 11 Big Sur及以上,可以直接使用ProcessInfo的内置属性判断,逻辑更简单:

Swift 代码示例

func isRunningOnAppleSilicon() -> Bool {
    if #available(macOS 11.0, *) {
        // 若应用是被Rosetta转译运行,硬件必然是Apple Silicon
        if ProcessInfo.processInfo.isTranslated {
            return true
        }
        // 非转译环境下直接判断当前运行架构
        return ProcessInfo.processInfo.architecture == .arm64
    } else {
        // 低于11版本的系统不存在Apple Silicon设备,直接返回false
        return false
    }
}

注意事项

  • 不要使用编译时宏(比如Swift的#if arch(arm64)、OC的#if defined(__arm64__))做判断,这类宏只能识别你当前打包的二进制架构,无法覆盖Intel二进制跑在Apple Silicon Rosetta转译环境的场景,会返回错误结果。
  • 若需要在Shell脚本中检测,可以直接执行命令:sysctl -n machdep.cpu.brand_string,输出包含Apple即为Apple Silicon芯片,包含Intel即为Intel处理器。

内容的提问来源于stack exchange,提问作者Todd Ditchendorf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:24:01