Есть ли определенный флаг компилятора Xcode, который устанавливается при компиляции для iPad?

Есть ли определенный флаг компилятора Xcode, который устанавливается при компиляции для iPad?

Я хочу условно скомпилировать код iPad против iPhone / iPod Touch, например:

#ifdef TARGET_IPAD code for iPad #else code for iPhone #endif 

Я знаю, что в TargetConditionals.h уже есть TARGET_OS_IPHONE и TARGET_CPU_ARM, но все, что легко и конкретно предназначается для iPad?

-Rei

    Правильный API для использования во время проверки iPad против iPhone / iPad Touch:

     BOOL deviceIsPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); 

    Фильтр заголовков UIDevice также включает удобный макрос UI_USER_INTERFACE_IDIOM (), который будет полезен, если целевой целью развертывания является

     #define UI_USER_INTERFACE_IDIOM() ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone) 

    Поэтому вы можете просто сказать, отрицательно:

     BOOL deviceIsPad = (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone); 

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

    И из-за возможности запуска приложения на обоих устройствах нет встроенной проверки времени компиляции, предназначенной для iPad, или нет.

    В настоящее время я не нашел ничего, что позволило бы вам проверить, есть ли у вас iPad, но я также не уверен, что Apple рекомендует проверять время исполнения. Вот выдержка из Apple:

    В дополнение к вашим controllerам просмотра, любые classы, которые совместно используются устройствами iPhone и iPad, должны включать macros условной компиляции, чтобы изолировать код, специфичный для устройства. Хотя вы также можете использовать проверки времени выполнения, чтобы определить, доступны ли определенные classы или методы, это увеличит размер вашего исполняемого файла, добавив пути кода, которые не будут выполняться ни на одном устройстве, ни на другом. Предоставление компилятору этого кода помогает очистить ваш код.

    Однако я не могу найти более конкретную информацию об макросах условной компиляции.

    Для нескольких целей, совместно использующих один и тот же проект / код, я делаю это, редактируя флаги C для моей цели iPad.

    Когда цель [myapp] -iPad выбрана в качестве активной цели, выберите Project -> Edit Active Target [myapp] -iPad. Найдите «c flags» и дважды щелкните. Добавьте флаг для «-D TARGET_IPAD». Теперь символ TARGET_IPAD будет определен только для вашей цели iPad.

    Конечно, это работает, только если вы используете отдельные цели для iPad и iPhone. Если вы используете один и тот же двоичный файл на обоих, очевидно, что компилятор не может сделать для вас. (Тем не менее, 3.2 SDK на конец января еще не поддерживает универсальные приложения.)

    (Edited, я был смущен терминологией «универсальных» приложений и т. Д.),

    Или -> чтобы быть уверенным

     -(BOOL)isDeviceAniPad { #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200 BOOL deviceIsPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); return deviceIsPad; #endif return NO; } 

    Я думаю, что это будет

     -(BOOL)isDeviceAniPad { #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200 return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); #endif return NO; } 
    Давайте будем гением компьютера.