iphone - apple - ios versiones
¿Cómo apuntar a una versión específica de iPhone? (8)
Tengo un código que quiero ejecutar solo en el último iPhone SDK (3.0), sin embargo, parece que no puedo encontrar una manera de apuntar solo a 3.0 e ignorar 2.2.1, etc. Hay una declaración ifdef, pero parece cubrir todo el iPhone:
#if TARGET_OS_IPHONE
Cualquier ayuda es apreciada.
ACTUALIZACIÓN: Al construir y ejecutar en iPhone (4.3.1) usando Xcode 4, esto ya no parece funcionar para mí. Además, obtengo __IPHONE_OS_VERSION_MIN_REQUIRED = 30200
.
El Cookbook para desarrolladores de iPhone dice que también puedes hacer:
#ifdef _USE_OS_4_OR_LATER
// code to compile for 4.0 or later
#else
// code to compile for pre-4.0
#endif
Y, parece que funciona para mí. :)
Bastante seguro de que también puedes hacer:
#ifdef __IPHONE_3_0
// 3.0 code here
#endif
Bueno, mis dos centavos:
¿Qué tal crear su aplicación con la última versión decir 3.0 para que pueda explotar todas las API nuevas y geniales y especifique el destino de implementación como la versión menos reciente que desea apoyar, por lo que hay muchachos que no tomaron tiempo para actualizar sus dispositivos? Seguirá funcionando su aplicación. En este caso, como se muestra arriba, debe verificar la versión menos reciente del SDK y proporcionar una funcionalidad alternativa para que su aplicación sea compatible con versiones anteriores.
Saludos, Hardik
Está en las opciones de compilación de Xcode. El desplegable en la esquina superior izquierda que dice algo así como "myapp - 3.0 | Debug" Seleccione la compilación que desea y listo, listo.
Estoy bastante seguro de que el comentario en el PO lo resume. No puedes. Porque una directiva de tiempo de compilación no puede tomar una decisión en tiempo de ejecución. En Xcode, si apuntas a 3.0, no se ejecutará en un teléfono 2.2.1. Si se dirige a 2.2.1, no compilará porque tiene 3.0 código específico allí.
La única solución verdadera sería dos versiones de su aplicación, una de las cuales está compilada para 3.0 y la otra para 2.2.1.
Puede usar este #define para cambiar lo que crea para cada SDK ...
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_2_2
// iPhone 3.0 code here
#endif
Y haga esto en tiempo de ejecución para ejecutar código para 3.0 y superior:
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 3.0)
{
// iPhone 3.0 code here
}
Tendría cuidado con el resultado de retorno de floatValue:
[[[UIDevice currentDevice] systemVersion] floatValue]
Como con cualquier flotador, puede no ser exactamente lo que espera. Al ejecutar lo anterior en mi sistema, confundir por qué mi declaración condicional no se estaba ejecutando, noté que el valor devuelto era:
3.20000005
Recomiende las soluciones aquí en su lugar: ¿Cómo verificar la versión de iOS?
Extracto:
NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"3.1.3" options: NSNumericSearch];
if (order == NSOrderedSame || order == NSOrderedDescending) {
// OS version >= 3.1.3
} else {
// OS version < 3.1.3
}
Usando el truco de agregar OTHER_CFLAGS = "-g3 -save-temps -dD" de esta respuesta , encontré que la definición __IPHONE_OS_VERSION_MIN_REQUIRED 20000 con un proyecto dirigido a 2.2.1. Quizás eso funcionará?