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
Respuesta
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.
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
}
- 1. Integración de Kiosco sin romper la compatibilidad con versiones anteriores
- 2. Deserialización compatibilidad con versiones anteriores
- 3. Versiones de clase para admitir la compatibilidad con versiones anteriores
- 4. ¿Puede eliminar la finalización de una definición de clase romper la compatibilidad con versiones anteriores?
- 5. iOS 6 API y compatibilidad con versiones anteriores
- 6. Mejores prácticas para la compatibilidad con versiones anteriores de API
- 7. ¿Debería Java romper la compatibilidad con versiones anteriores en beneficio de un lenguaje más limpio?
- 8. ¿Qué características de C# se eliminarían si la compatibilidad con versiones anteriores no fuera un problema?
- 9. ISerializable y compatibilidad con versiones anteriores
- 10. MS Office PIAs "compatibilidad con versiones anteriores"
- 11. Compatibilidad con versiones anteriores y servicios web
- 12. .lib y .dll Compatibilidad con versiones anteriores
- 13. Temas de Android Holo con compatibilidad con versiones anteriores
- 14. Renombrado de funciones con preservación de compatibilidad con versiones anteriores
- 15. Compatibilidad con versiones anteriores en .NET con BinaryFormatter
- 16. Compatibilidad con versiones anteriores de Java 6 Source y SQL
- 17. ¿Cuán importante es la compatibilidad con versiones anteriores?
- 18. Estrategias para Honeycomb y compatibilidad con versiones anteriores
- 19. WCF Service - Problema de compatibilidad con versiones anteriores
- 20. Compatibilidad con versiones anteriores de SQL Server en Entity Framework?
- 21. Compatibilidad con versiones anteriores del repositorio de Git
- 22. Uso del guión gráfico como una alternativa de iOS 5 (y NIB para 4.3 y anteriores)
- 23. Compatibilidad con versiones anteriores de la serialización de vector (de) con Boost.serialization
- 24. Windows API Codepack Compatibilidad con versiones anteriores en Windows XP
- 25. ¿Compatibilidad con versiones anteriores o posteriores en Android?
- 26. Script de compatibilidad de ECMAScript 5 para navegadores anteriores
- 27. ¿Cómo puedo probar la compatibilidad con versiones anteriores de la API entre los ensamblados de .NET
- 28. Diseño de la API que garantiza la compatibilidad con versiones anteriores
- 29. ¿Las API de Java Servlet son compatibles con versiones anteriores?
- 30. ¿Herramienta para verificar la compatibilidad con las versiones de Matlab?
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) –
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. –