Я работаю над проектом, который включает в себя приложение Mac и приложение для iPad, которые совместно используют код. Как я могу использовать условные ключи компиляции, чтобы исключить специфичный для Mac код из проекта iPhone и наоборот? Я заметил, что TARGET_OS_IPHONE
и TARGET_OS_MAC
оба равны 1, и поэтому они оба всегда верны. Есть ли другой ключ, который я могу использовать, который будет возвращать true только при компиляции для конкретной цели?
По большей части я получил файлы для совместной работы, переместив #include <UIKit/UIKit.h>
и #include <Cocoa/Cocoa.h>
в заголовки прекомпиляции для двух проектов. Я делюсь моделями и некоторым служебным кодом, который выбирает данные из RSS-каналов и Evernote.
В частности, функция [NSData dataWithContentsOfURL:options:error:]
принимает другую константу для параметра параметров iOS 3.2 и более ранних версий и Mac OS 10.5 и более ранних, чем для iOS 4 и Mac OS 10.6. Условное обозначение, которое я использую:
#if (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_2)) || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5))
Кажется, это работает, но я хочу убедиться, что это пуленепробиваемый. Насколько я понимаю, если версия для Mac установлена на 10.6, а версия для iOS установлена на 3.2, она по-прежнему будет использовать новые константы, даже если она компилируется для iOS 3.2, что кажется неверным.
Заранее спасибо за любую помощь!