#import @interface NSApplication (SystemVersion) - (void)getSystemVersionMajor:(unsigned *)major minor:(unsigned *)minor bugFix:(unsigned *)bugFix; @end @implementation NSApplication (SystemVersion) - (void)getSystemVersionMajor:(unsigned *)major minor:(unsigned *)minor bugFix:(unsigned *)bugFix; { OSErr err; SInt32 systemVersion, versionMajor, versionMinor, versionBugFix; if ((err = Gestalt(gestaltSystemVersion, &systemVersion)) != noErr) goto fail; if (systemVersion < 0x1040) { if (major) *major = ((systemVersion & 0xF000) >> 12) * 10 + ((systemVersion & 0x0F00) >> 8); if (minor) *minor = (systemVersion & 0x00F0) >> 4; if (bugFix) *bugFix = (systemVersion & 0x000F); } else { if ((err = Gestalt(gestaltSystemVersionMajor, &versionMajor)) != noErr) goto fail; if ((err = Gestalt(gestaltSystemVersionMinor, &versionMinor)) != noErr) goto fail; if ((err = Gestalt(gestaltSystemVersionBugFix, &versionBugFix)) != noErr) goto fail; if (major) *major = versionMajor; if (minor) *minor = versionMinor; if (bugFix) *bugFix = versionBugFix; } return; fail: NSLog(@"Unable to obtain system version: %ld", (long)err); if (major) *major = 10; if (minor) *minor = 0; if (bugFix) *bugFix = 0; } @end int main(void) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; unsigned major, minor, bugFix; [[NSApplication sharedApplication] getSystemVersionMajor:&major minor:&minor bugFix:&bugFix]; NSLog(@"%u.%u.%u", major, minor, bugFix); [pool release]; return EXIT_SUCCESS; }