Встроенный токен препроцессора для определения платформы iPhone

Существует ли единый токен препроцессора, который можно использовать для обнаружения любого устройства iPhone или симулятора во время сборки? В настоящее время я использую:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
    // This is an iPhone build
#endif

Это рекомендуемый подход или есть лучший способ? Я бы предпочел, чтобы макрос был встроенным, то есть определялся компилятором, а не заголовочным файлом SDK, который я должен включить.

Я не беспокоюсь о том, чтобы различать версии ОС iPhone прямо сейчас, но если есть страница документации Apple, на которой подробно описаны все соответствующие макросы, а также когда они определены и не определены, я был бы признателен за ссылку на нее, поскольку мой поиск пришел короче пока.

Спасибо!


person Richard Viney    schedule 05.07.2009    source источник


Ответы (3)


Вы ищете файл TargetConditionals.h, который определяет все интересующие вас макросы. Вы найдете его в каждой версии SDK, например, следующий путь для SDK 2.2:

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.sdk/usr/include/TargetConditionals.h
person Nathan de Vries    schedule 05.07.2009
comment
Спасибо, я изначально не знал, что TargetConditionals.h присутствует в пакетах SDK для Mac OS X, а также в пакетах SDK для iPhone. - person Richard Viney; 09.07.2009

Из этого сайта мы обнаружили, что вам нужно TARGET_OS_IPHONE

#if TARGET_OS_IPHONE
//Do iPhone stuff
#else
//Do Mac stuff
#endif
person Louis Gerbarg    schedule 05.07.2009

Если у вас есть код, который работает на iPhone и на рабочем столе, вы можете использовать TARGET_OS_IPHONE, чтобы определить, является ли целевая ОС какой-либо версией ОС iPhone. Также есть TARGET_IPHONE_SIMULATOR, который определяется только тогда, когда приложение создается для симулятора. Они по-прежнему определены в файлах заголовков, но я надеюсь, что это поможет!

person Ben Gotow    schedule 05.07.2009