Проверка версии OS X в Какао - PullRequest
5 голосов
/ 22 января 2010

Я разрабатываю приложение Какао и мне нужно проверить, является ли текущая версия OS X OS X 10.6 Snow Leopard

Если текущей версией является Snow Leopard, мне нужно закрыть приложение с предупреждением об ошибке.

Как мне найти текущую версию OS X?

Ответы [ 5 ]

9 голосов
/ 22 января 2010

Соответствующую документацию Apple можно найти в Использование разработки на основе SDK : Определение версии платформы .

Они предлагают либо проверить существование определенного класса или метода, либо проверить номер версии фреймворка, например, NSAppKitVersionNumber или NSFoundationVersionNumber. Соответствующие структуры также объявляют ряд констант для различных версий ОС ( Константы NSApplication , Базовые константы ).

Соответствующий код может быть простым:

if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) {
    // Code for 10.6+ goes here
}
7 голосов
/ 22 января 2010

Есть несколько способов сделать это.

  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!)");
    }
1 голос
/ 10 сентября 2010

Попробуйте этот источник: http://cocoadevcentral.com/articles/000067.php - там описано 4 способа, как это сделать.

1 голос
/ 22 января 2010

В системах 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» в качестве номера выпуска. См. список релизов . 10.0 - Mac OS X 10.6, 10.2.0 - Mac OS X 10.6.2.

0 голосов
/ 23 января 2010

Отвечая себе, я реализовал предупреждение в 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...