在Cocoa中检查OS X版本

时间:2010-01-22 06:03:32

标签: macos cocoa

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

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

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

5 个答案:

答案 0 :(得分:9)

可以在使用基于SDK的开发中找到相关的Apple文档:Determining the Version of a Framework

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

相关代码可以简单如下:

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

答案 1 :(得分: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!)");
    }

答案 2 :(得分:1)

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

$ man 3 uname

示例:

#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);
}

在Mac OS X 10.8.5上,我获得了“9.8.0”作为版本号。见list of releases。 10.0是Mac OS X 10.6,10.2.0是Mac OS X 10.6.2。

答案 3 :(得分:1)

尝试此来源:http://cocoadevcentral.com/articles/000067.php - 有4种方法可供理解。

答案 4 :(得分:0)

回答自己,我在main.m中实现了如下警告:

#ifndef NSAppKitVersionNumber10_5
#define NSAppKitVersionNumber10_5 949
#endif 
int main(int argc, char *argv[])
{
    SInt32 major = 0;
    SInt32 minor = 0;   
    Gestalt(gestaltSystemVersionMajor, &major);
    Gestalt(gestaltSystemVersionMinor, &minor);
    if ((major == 10 && minor >= 6) || major >= 11) {

        CFUserNotificationDisplayNotice(0, kCFUserNotificationCautionAlertLevel,NULL, NULL, NULL, CFSTR("Maestro"), CFSTR("This version is not compatible."),  CFSTR("Ok"));
        return 0;
    }
    return NSApplicationMain(argc,  (const char **) argv);
}