2011-09-05 12 views
12

Mi aplicación se compila actualmente con el último iOS 4.x SDK. Una vez que salga el SDK de iOS 5.0, ¿sería posible para mí utilizar las nuevas características del SDK de iOS 5.0 en mi aplicación y aún así ejecutarlo en dispositivos iOS 4 (pero con las partes que usan las nuevas funciones deshabilitadas)?Uso de las características de iOS 5 sin romper la compatibilidad con versiones anteriores

+0

posible duplicado de [¿Cómo puede utilizar opcionalmente las características de iPhone OS 3.0 en una aplicación compatible con 2.0?] (Http://stackoverflow.com/questions/986589/how-do-you-optionally-use-iphone-os- 3-0-features-in-a-2-0-compatible-app) –

+0

Vea también [Cómo hacer que la aplicación de iPhone sea compatible con múltiples versiones de SDK (firmware)] (http://stackoverflow.com/questions/3027120/how -to-make-iphone-app-compatible-con-múltiple-sdk-firmware-versiones). Si bien las versiones en esas preguntas son más antiguas, se aplican los mismos principios generales. –

Respuesta

10

Para responder a la pregunta general, el tiempo de ejecución de Objective-C es totalmente reflectante, lo que significa que se puede consultar qué métodos una soportes de objetos (a través de respondsToSelector:) y apoderarse de clases por nombre en tiempo de ejecución (a través de NSClassFromString). Los binarios de iOS también respaldan el concepto de vinculación débil con los marcos, lo que significa que el marco se cargará si está disponible pero que no se considera un error fatal si el marco no está disponible (como es el comportamiento predeterminado).

Eso significa que cuando Apple lanza nuevas versiones del sistema operativo puede escribir código que utiliza nuevas características en la última versión del sistema operativo, pero funciona bien sin ellas si esas nuevas características son nuevos bits de API.

Apple a veces también proporciona nuevas características de SDK que no son nuevas API, como cuando el analizador estático Clang se agregó a Xcode. Como esas características generalmente no requieren ningún soporte de tiempo de ejecución, son totalmente utilizables. iOS 5 es un poco único porque los compromisos de Apple con el proyecto LLVM sugieren que hay algunas características de tiempo de compilación nuevas entre las cosas de ARC que dependen de cierto soporte de tiempo de ejecución. Por lo tanto, no estarán disponibles, si es que están en las herramientas, ya que Apple tiene la intención de distribuirlos.

9

Puede verificar si algunas funciones están disponibles o no durante el tiempo de ejecución.

Por ejemplo:

Class motionManagerClass = NSClassFromString(@"CMMotionManager"); 
if(motionManagerClass) { 
    CMMotionManager *motionManager = [[CMMotionManager alloc] init]; 
    if([motionManager isGyroAvailable]) { 
     //iOS device with gyro 
    }else { 
     //right iOS but device has no gyro 
    } 
}else{ 
//wrong iOS 
} 
Cuestiones relacionadas