2012-02-27 3 views
1

Поскольку я изучаю разработку OS X, и здесь я столкнулся с странной ситуацией, когда мне нужно выяснить способ создания приложения для цели выше 10.6, а если это 10.7, то мне нужно позвонить некоторые недавно добавленные методы или перечисления. Может быть, нет такого пути, но думал спросить об этом.Спецификация API для Mac OS X

Я предполагаю, что должен быть способ использовать его с помощью макросов или чего-то подобного. Я не хочу создавать сборки, специфичные для ОС. Любая помощь будет оценена. Может быть, нет такого пути, но думал спросить об этом.

С уважением, M P.

ответ

0

Вы можете прочитать версию из файла свойств:

/System/Library/CoreServices/SystemVersion.plist 

Таким образом, вы можете создать динамический код без различных версий по #ifdefine

EDIT: @MP Ну, я понял, что вы не хотите генерировать код, специфичный для версии. Если вы готовы это сделать, то это довольно легко. Просто используйте:

#include <Availability.h> 
    #ifdef __MAC_10_7 
     /* 10.7 only code */ 
    #else 
     /* not 10.7 code */ 
    #endif 
+0

Спасибо за ответ. Таким образом, вы имеете в виду с помощью i #ifdefine, я могу использовать 10,7 конкретных перечислений и методов, а затем скомпилировать его для цели выше 10.6? Любой пример #ifdefine будет полезен. –

+0

Спасибо, что это сработало, немного изменив настройки. –

+0

На самом деле, вы не можете надежно использовать маску __MAC_10_7 для этой цели. Хотя текущие SDK до 10.7 не определяют эту константу, последняя версия 10.4 SDK также определяет __MAC_10_5. – Tobias

1

Одним из подходов является сравнение NSFoundationVersionNumber с NSFoundationVersionNumber10_* - см Foundation/NSObjCRuntime.h для доступных версий.

Иногда вы можете попробовать -[NSObject respondsToSelector:].

+0

Спасибо за указание, но я также должен использовать 10.7 перечислений, поэтому я думаю, мне придется использовать #ifdefine, а затем добавить методы, которые используют эти перечисления. Используя if define, i goess не будет генерировать ошибку времени компиляции. –

+0

@MP, если вы установили 'SDKROOT' в 10.7, то вы можете построить с этими заголовками и перечислениями видимыми. – justin