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

获取真实macOS版本遇异常:本地与Jenkins构建结果不一致

macOS版本获取差异问题解析与解决方案

这是因为macOS Big Sur(11.x及以上)引入了版本兼容性映射机制——当你的项目部署目标(Deployment Target)设置低于11.0时,NSProcessInfo的operatingSystemVersion会返回10.16作为主版本号,而非真实的11.x版本,以此兼容旧代码对系统版本的判断逻辑。本地构建和Jenkins远程构建的部署目标设置不一致,才导致返回结果不同。

1. 统一部署目标设置

检查Jenkins构建环境中的项目部署目标,将其设置为11.0或更高,这样operatingSystemVersion就会返回真实的系统版本号。

2. 使用更可靠的API获取真实版本

如果需要兼容低版本部署目标同时获取真实系统版本,可以选择以下方式:

方式一:直接读取完整版本字符串

使用NSProcessInfo的operatingSystemVersionString属性,它会返回包含真实版本的完整字符串,不受部署目标影响:

NSString *realOSVersionString = [[NSProcessInfo processInfo] operatingSystemVersionString];
// 示例输出:"Version 11.5.1 (Build 20G80)"

方式二:通过底层API读取精确版本号

使用sysctlbyname直接从系统内核获取版本信息,这是最底层且不受兼容性映射影响的方式:

#include <sys/sysctl.h>

NSString *getRealMacOSVersion() {
    size_t size = 0;
    sysctlbyname("kern.osproductversion", NULL, &size, NULL, 0);
    char *version = malloc(size);
    sysctlbyname("kern.osproductversion", version, &size, NULL, 0);
    NSString *versionString = [NSString stringWithUTF8String:version];
    free(version);
    return versionString;
}
// 示例返回:"11.5.1"

方式三:版本兼容性判断推荐API

如果你的需求是做版本兼容性判断(而非获取版本号展示),苹果推荐使用isOperatingSystemAtLeastVersion:方法,它会自动处理兼容性映射,无需关心版本号的显示问题:

NSOperatingSystemVersion minimumVersion = {.majorVersion = 11, .minorVersion = 0, .patchVersion = 0};
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:minimumVersion]) {
    // 运行在Big Sur及以上版本
}

内容的提问来源于stack exchange,提问作者Alexander Dyagilev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:21:35