Как я могу программно определить запущенную версию Mac OS X ?

StackOverflow https://stackoverflow.com/questions/157759

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Спасибо, Джо

Это было полезно?

Решение

Смотрите эту статью здесь

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

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

Другие советы

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

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

или

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

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

API осуществляется через гештальт-менеджер.

Видишь "Определение версии операционной системы- на сайте CocoaDev.

В терминале:

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

Действительно ли версия операционной системы - это то, что вам нужно?Возможно, существует более подходящая вещь для тестирования, такая как наличие или номер версии определенного фреймворка.

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

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

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

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

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

system_profiler SPSoftwareDataType | grep Mac
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top