tutorial para developer develop descargar apps apple ipad iphone-sdk-3.2

developer - ¿Hay un indicador de compilador de Xcode específico que se establece al compilar para iPad?



xcode para windows (6)

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

Quiero compilar 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


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 compilació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 aumentarí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 compilador 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 compilación condicional.


En lugar de usar indicadores en tiempo de compilació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 compilación, ya sea que se oriente o no al iPad.


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

Con el objetivo [myapp] -iPad elegido como objetivo 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 objetivo de iPad.

Por supuesto, esto solo funciona si usa objetivos separados para iPad y iPhone. Si está ejecutando el mismo binario en ambos, obviamente no hay nada que el compilador 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.)


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 <iPhone 3.2.

#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);


Creo que esto servirá

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


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; }