MacOS Sequoia下[NSProcessInfo processInfo]获取版本异常问题
问题原因解析
出现这种差异的核心原因是苹果macOS的系统版本兼容性伪装机制——它会根据运行代码的宿主应用的部署配置返回不同的版本号,具体细节如下:
部署目标(Deployment Target)的影响
SketchUp 2020在编译时,其设置的最低系统版本(LSMinimumSystemVersion)大概率低于macOS 15.0(Sequoia),可能是10.16或更早版本。macOS为了避免旧应用因新系统API变化崩溃,会对这类部署目标低于当前系统大版本的应用,返回其部署目标对应的最高兼容版本号,而非真实系统版本。这就是SketchUp 2020中调用operatingSystemVersion返回10.16的原因。SketchUp 2024的配置差异
SketchUp 2024的编译配置使用了更新的SDK,且最低系统版本设置支持到macOS 15.0,匹配当前系统版本范围。此时系统不会触发版本伪装,会返回真实的15.0版本号。验证方式
你可以查看两个SketchUp版本的Info.plist文件,找到LSMinimumSystemVersion键,对比两者的版本值,就能直接确认这个差异的根源。
如果你的插件需要获取不受宿主应用影响的真实系统版本,可以使用更底层的系统调用,比如通过sysctlbyname读取kern.osproductversion:
#include <sys/sysctl.h> NSString *getRealOSVersion() { size_t size = 0; sysctlbyname("kern.osproductversion", NULL, &size, NULL, 0); char *version = malloc(size); sysctlbyname("kern.osproductversion", version, &size, NULL, 0); NSString *versionStr = [NSString stringWithUTF8String:version]; free(version); return versionStr; }
内容的提问来源于stack exchange,提问作者Elektraglide
相关产品推荐
相关产品推荐

