在Cocoa中检查OS X版本

Mob*_*obX 5 macos cocoa

我正在开发一个Cocoa应用程序,需要检查当前的OS X版本是否是OS X 10.6 Snow Leopard

如果当前版本是Snow Leopard,我需要使用错误警报关闭应用程序.

如何找到当前的OS X版本?

Adr*_*ian 9

可以在使用基于SDK的开发:确定框架的版本中找到相关的Apple文档.

他们建议测试特定类或方法的存在,或检查框架版本号,例如NSAppKitVersionNumberNSFoundationVersionNumber.相关框架还为不同的os版本(NSApplication常量,Foundation Constants)声明了许多常量.

相关代码可以简单如下:

if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
    // Code for 10.6+ goes here
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ong 7

有几种方法可以做到这一点.

  1. 您可以检查是否存在仅限10.6的类:

    Class snowLeopardOnlyClass = NSClassFromString(@"NSRunningApplication");
    if (snowLeopardOnlyClass != nil) {
      NSLog(@"I'm running on Snow Leopard!");
    }
  2. 使用系统函数(如Gestalt)确定操作系统版本:

    #import <CoreServices/CoreServices.h>
    SInt32 major = 0;
    SInt32 minor = 0;   
    Gestalt(gestaltSystemVersionMajor, &major);
    Gestalt(gestaltSystemVersionMinor, &minor);
    if ((major == 10 && minor >= 6) || major >= 11) {
      NSLog(@"I'm running on Snow Leopard (at least!)");
    }


ste*_*sch 1

在 UNIX 系统上,您可以使用uname(3)系统调用。看

$ man 3 uname
Run Code Online (Sandbox Code Playgroud)

例子:

#include <stdio.h>
#include <sys/utsname.h>

int main()
{
    struct utsname un;

    uname(&un);
    printf("sysname: %s\nnodename: %s\nrelease: %s\nversion: %s\nmachine: %s\n",
        un.sysname, un.nodename, un.release, un.version, un.machine);
}
Run Code Online (Sandbox Code Playgroud)

在 Mac OS X 10.8.5 上,我得到“9.8.0”作为版本号。请参阅版本列表。10.0 是 Mac OS X 10.6,10.2.0 是 Mac OS X 10.6.2。