Как программно определить работающую версию Mac OS X? - PullRequest
14 голосов
/ 01 октября 2008

У меня есть программа, которая должна вести себя немного иначе на Tiger, чем на Leopard. Кто-нибудь знает о системном вызове, который позволит мне точно определить, какую версию Mac OS X я использую. Я нашел несколько определений макросов для определения ОС компьютера, на котором выполнялась сборка, но ничего действительно хорошего, чтобы определить ОС работающего компьютера.

Спасибо, Джо

Ответы [ 8 ]

15 голосов
/ 01 октября 2008

См. Эту статью здесь

Но вкратце, если вы используете углерод, используйте вызов Gestalt (), и если вы используете какао, есть константа NSAppKitVersionNumber, с которой вы можете просто проверить.

Редактировать : Для Mac OSX 10.8 и выше, больше не используйте Gestalt (). См. Этот ответ для более подробной информации: Как определить версию ОС во время выполнения в OS X или iOS (без использования Gestalt)?

12 голосов
/ 02 октября 2008

Не могли бы вы просто проверить наличие возможности? Например:

if (NSClassFromString(@"NSKeyedArchiver") != Nil)

или

if ([arrayController respondsToSelector: @selector(selectedIndexes)])

тогда вы знаете, что операционная система делает то, что вам нужно, а не то, что группа по маркетингу продуктов Apple дала ей конкретный номер; -)

8 голосов
/ 01 октября 2008

API через Gestalt Manager.

См. « Определение версии ОС » на сайте CocoaDev.

6 голосов
/ 01 октября 2008

В терминале:

system_profiler SPSoftwareDataType

Дает:

Software:

    System Software Overview:

      System Version: Mac OS X 10.5.5 (9F33)
      Kernel Version: Darwin 9.5.0
      Boot Volume: Main
      Boot Mode: Normal
      Computer Name: phoenix
      User Name: Douglas F Shearer (dougal)
      Time since boot: 2 days 16:55

Или:

sw_vers

Дает:

ProductName:    Mac OS X
ProductVersion: 10.5.5
BuildVersion:   9F33
2 голосов
/ 01 октября 2008

Версия ОС действительно то, что вы хотите? Может быть более подходящая вещь для тестирования, такая как наличие или номер версии конкретной платформы.

1 голос
/ 28 июля 2009

в вашей программе вы можете использовать Gestalt. Вот код, который я использую для своей программы для получения версии ОС.

long version = 0;
OSStatus rc0 = Gestalt(gestaltSystemVersion, &version);
if((rc0 == 0) && (version >= 0x1039)) {      
    // will work with version 10.3.9
    // works best with version 10.4.9
    return; // version is good
}
if(rc0) {
    printf("gestalt rc=%i\n", (int)rc0);
} else {
    printf("gestalt version=%08x\n", version);
}
0 голосов
/ 16 марта 2009

Запустите это в командной строке:

system_profiler SPSoftwareDataType | grep Mac
0 голосов
/ 22 ноября 2008

respondsToSelector: почти наверняка лучше, чем вы ведете таблицу того, что делают и не реализуют данные выпуски.

Будьте ленивы. Пусть среда выполнения скажет вам, может ли она что-то сделать или нет, и прибегнет к более старым методам, когда это необходимо. Ваш код будет гораздо менее хрупким, потому что вам не нужно поддерживать собственные глобальные данные, с которыми остальная часть вашего кода должна постоянно проверяться.

...