我正在开发一个Cocoa应用程序,需要检查当前OS X版本是否为OS X 10.6 Snow Leopard
如果当前版本是Snow Leopard,我需要使用错误警报关闭应用程序。
如何找到当前的OS X版本?
答案 0 :(得分:9)
可以在使用基于SDK的开发中找到相关的Apple文档:Determining the Version of a Framework。
他们建议测试特定类或方法的存在,或检查框架版本号,例如NSAppKitVersionNumber
或NSFoundationVersionNumber
。相关框架还为不同的os版本(NSApplication constants,Foundation Constants)声明了许多常量。
相关代码可以简单如下:
if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
// Code for 10.6+ goes here
}
答案 1 :(得分:7)
有几种方法可以做到这一点。
您可以检查是否存在仅限10.6的课程:
Class snowLeopardOnlyClass = NSClassFromString(@"NSRunningApplication"); if (snowLeopardOnlyClass != nil) { NSLog(@"I'm running on Snow Leopard!"); }
使用系统函数(如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);
}