¿Hay un indicador de comstackdor de Xcode específico que se establece al comstackr para iPad?

¿Hay un indicador de comstackdor de Xcode específico que se establece al comstackr para iPad?

Quiero comstackr de forma condicional código iPad vs iPhone / iPod Touch por ejemplo:

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

Sé que ya hay TARGET_OS_IPHONE y TARGET_CPU_ARM en TargetConditionals.h, pero ¿hay algo que se dirija fácil y específicamente al iPad?

-Rei

La API correcta para usar para la comprobación en tiempo de ejecución de iPad frente a iPhone / iPad Touch es:

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

El archivador de encabezado UIDevice también incluye una macro conveniente, UI_USER_INTERFACE_IDIOM (), que será útil si su destino de despliegue es

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

Entonces podrías decir, negativamente:

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

En lugar de utilizar indicadores en tiempo de comstackción, debe usar la verificación en tiempo de ejecución, por ejemplo, use NSClassFromString para ver si existe una clase porque la misma aplicación se puede instalar en ambos dispositivos.

Y debido a la posibilidad de ejecutar la aplicación en ambos dispositivos, no existe una verificación incorporada en tiempo de comstackción, ya sea que se oriente o no al iPad.

Actualmente no encontré nada que te permita verificar si estás en un iPad, pero tampoco estoy seguro de si Apple recomienda los controles de tiempo de ejecución. Aquí hay un extracto de Apple:

Además de los controladores de vista, todas las clases que se comparten entre los dispositivos iPhone y iPad deben incluir macros de comstackción condicionales para aislar el código específico del dispositivo. Aunque también podría usar verificaciones en tiempo de ejecución para determinar si había disponibles clases o métodos específicos, hacerlo solo boostía el tamaño de su ejecutable agregando rutas de código que no se seguirían en un dispositivo u otro. Dejar que el comstackdor elimine este código ayuda a mantener su código más limpio.

Sin embargo, no hay lugar donde pueda encontrar información más específica sobre las macros de comstackción condicional.

Para objectives múltiples que comparten el mismo proyecto / código, lo hago editando los indicadores C para mi objective de iPad.

Con el objective [myapp] -iPad elegido como objective activo, elija Proyecto -> Editar destino activo [myapp] -iPad. Busque “c flags” y haga doble clic. Agregue una bandera para “-D TARGET_IPAD”. Ahora el símbolo TARGET_IPAD se definirá solo para su objective de iPad.

Por supuesto, esto solo funciona si usa objectives separados para iPad y iPhone. Si está ejecutando el mismo binario en ambos, obviamente no hay nada que el comstackdor pueda hacer por usted. (Sin embargo, el SDK 3.2 a partir de finales de enero ni siquiera es compatible con las aplicaciones universales).

(Editado; estaba confundido acerca de la terminología de las aplicaciones “universales”, etc.)

O bien -> solo para estar seguro

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

Creo que esto servirá

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