如何获得OS X系统版本?

jin*_*jin 14 macos cocoa

我想获得OS X系统版本,例如:10.5.4,10.4.8等.我想在我的应用程序中获取它,我该怎么做?谢谢!

小智 20

您可以在"/System/Library/CoreServices/SystemVersion.plist"中读取属性列表并解压缩"ProductVersion"键,这是OS X安装程序应用程序的工作方式.这是一个示例:

NSString *versionString;
NSDictionary * sv = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"];
versionString = [sv objectForKey:@"ProductVersion"];
Run Code Online (Sandbox Code Playgroud)

或者,命令swvers -productVersion也会这样做.

  • 但是自10.8以来已经弃用,似乎这是目前可用的最佳方式.看到这个问题:http://stackoverflow.com/questions/11072804/mac-os-x-10-8-replacement-for-gestalt-for-testing-os-version-at-runtime (2认同)
  • @QuinnTaylor Gestalt只读取SystemVersion.plist,因此**会产生磁盘I/O. 尝试更改该文件的内容,您会发现它打印出不同的结果. (2认同)

Mar*_*eau 11

你可以使用Gestalt:

SInt32 version = 0;
Gestalt( gestaltSystemVersion, &version );
BOOL leopard = ( version >= 0x1050 );

if ( leopard )
{
    //draw it this way
}
else
{
    //draw it that way
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果您正在检查方法是否可用,最好直接使用respondsToSelector来测试它:

  • 请注意,由于受到1位数的限制,因此10.4不支持使用gestaltSystemVersionMajor,gestaltSystemVersionMinor和gestaltSystemVersionBugFix.例如,10.4.10和.11无法使用您的代码进行检测. (14认同)
  • 由于格式塔在10.8中被弃用,有没有另一种方法可以在10.6 - 10.8之间工作吗? (5认同)
  • 这个答案现在是错误的,因为gestaltSystemVersion不能代表10.10. (4认同)

Nic*_*ore 11

NSString *osver()
{
    SInt32 versionMajor=0, versionMinor=0, versionBugFix=0;
    Gestalt(gestaltSystemVersionMajor, &versionMajor);
    Gestalt(gestaltSystemVersionMinor, &versionMinor);
    Gestalt(gestaltSystemVersionBugFix, &versionBugFix);
    return [NSString stringWithFormat:@"%d.%d.%d", versionMajor, versionMinor, versionBugFix];
}
Run Code Online (Sandbox Code Playgroud)

  • 可悲的是,格式塔从10.8开始被弃用. (2认同)

Vad*_*dim 10

-[NSProcessInfo operatingSystemVersionString]是人类可读和本地化的.适合显示给用户或使用错误电子邮件等,但不适合解析.


BJ *_*mer 7

同样,您可以使用Gestalt.查看文档以获取更多信息; 具体地讲,你要通过gestaltSystemVersionMajor,gestaltSystemVersionMinorgestaltSystemVersionBugFix常量在的"系统版本常量"部分完形经理参考文档