como - no puedo actualizar mi iphone 4
¿Cómo podemos detectar mediante programación qué versión de iOS se está ejecutando el dispositivo? (10)
Actualizar
Desde iOS 8 podemos usar el nuevo método NSProcessInfo
en NSProcessInfo
NSOperatingSystemVersion ios8_0_1 = (NSOperatingSystemVersion){8, 0, 1};
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios8_0_1]) {
// iOS 8.0.1 and above logic
} else {
// iOS 8.0.0 and below logic
}
Tenga en cuenta que esto se bloqueará en iOS 7, ya que la API no existía antes de iOS 8. Si está soportando iOS 7 o inferior, puede realizar la comprobación de forma segura con
if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)]) {
// conditionally check for any version >= iOS 8 using ''isOperatingSystemAtLeastVersion''
} else {
// we''re on iOS 7 or below
}
Respuesta original iOS <8
En aras de la integridad, aquí hay un enfoque alternativo propuesto por Apple en la Guía de transición de la interfaz de usuario de iOS 7 , que consiste en verificar la versión de Foundation Framework.
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
// Load resources for iOS 6.1 or earlier
} else {
// Load resources for iOS 7 or later
}
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo comprobar la versión de iOS? 38 respuestas
Quiero verificar si el usuario está ejecutando la aplicación en iOS con menos de 5.0 y mostrar una etiqueta en la aplicación.
¿Cómo detecto qué iOS se está ejecutando en el dispositivo del usuario mediante programación?
¡Gracias!
En MonoTouch:
Para obtener el uso de la versión Major:
UIDevice.CurrentDevice.SystemVersion.Split(''.'')[0]
Para uso en versiones menores:
UIDevice.CurrentDevice.SystemVersion.Split(''.'')[1]
La mayoría de las veces, Marek Sebera es genial, pero si eres como yo y encuentras que necesitas revisar la versión de iOS con frecuencia, no quieres ejecutar constantemente una macro en la memoria porque experimentarás una desaceleración muy leve. especialmente en dispositivos más antiguos.
En su lugar, desea calcular la versión de iOS como un flotador una vez y almacenarlo en algún lugar. En mi caso, tengo una clase de singleton de GlobalVariables
que uso para verificar la versión de iOS en mi código usando código como este
if ([GlobalVariables sharedVariables].iOSVersion >= 6.0f) {
// do something if iOS is 6.0 or greater
}
Para habilitar esta funcionalidad en su aplicación, use este código (para iOS 5+ usando ARC):
GlobalVariables.h :
@interface GlobalVariables : NSObject
@property (nonatomic) CGFloat iOSVersion;
+ (GlobalVariables *)sharedVariables;
@end
GlobalVariables.m :
@implementation GlobalVariables
@synthesize iOSVersion;
+ (GlobalVariables *)sharedVariables {
// set up the global variables as a static object
static GlobalVariables *globalVariables = nil;
// check if global variables exist
if (globalVariables == nil) {
// if no, create the global variables class
globalVariables = [[GlobalVariables alloc] init];
// get system version
NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
// separate system version by periods
NSArray *systemVersionComponents = [systemVersion componentsSeparatedByString:@"."];
// set ios version
globalVariables.iOSVersion = [[NSString stringWithFormat:@"%01d.%02d%02d", /
systemVersionComponents.count < 1 ? 0 : /
[[systemVersionComponents objectAtIndex:0] integerValue], /
systemVersionComponents.count < 2 ? 0 : /
[[systemVersionComponents objectAtIndex:1] integerValue], /
systemVersionComponents.count < 3 ? 0 : /
[[systemVersionComponents objectAtIndex:2] integerValue] /
] floatValue];
}
// return singleton instance
return globalVariables;
}
@end
Ahora puedes comprobar fácilmente la versión de iOS sin ejecutar macros constantemente. Observe en particular cómo convertí [[UIDevice currentDevice] systemVersion]
NSString en un CGFloat al que se puede acceder constantemente sin utilizar ninguno de los métodos inapropiados que muchos ya han señalado en esta página. Mi enfoque asume que la cadena de versión tiene el formato n.nn.nn (lo que permite que falten los bits posteriores) y funciona para iOS5 +. En las pruebas, este enfoque se ejecuta mucho más rápido que la ejecución constante de la macro.
Espero que esto ayude a cualquiera que experimente el problema que tuve!
Para obtener información más específica sobre el número de versión con versiones principales y secundarias separadas:
NSString* versionString = [UIDevice currentDevice].systemVersion;
NSArray* vN = [versionString componentsSeparatedByString:@"."];
La matriz vN
contendrá las versiones principales y secundarias como cadenas, pero si desea hacer comparaciones, los números de versión deben almacenarse como números (ints). Puede agregar este código para almacenarlos en la C-array * versionNumbers
:
int versionNumbers[vN.count];
for (int i = 0; i < sizeof(versionNumbers)/sizeof(versionNumbers[0]); i++)
versionNumbers[i] = [[vN objectAtIndex:i] integerValue];
* Arrays C utilizados aquí para una sintaxis más concisa.
Sé que soy demasiado tarde para responder a esta pregunta. No estoy seguro de si mi método sigue funcionando en versiones de iOS bajo (<5.0):
NSString *platform = [UIDevice currentDevice].model;
NSLog(@"[UIDevice currentDevice].model: %@",platform);
NSLog(@"[UIDevice currentDevice].description: %@",[UIDevice currentDevice].description);
NSLog(@"[UIDevice currentDevice].localizedModel: %@",[UIDevice currentDevice].localizedModel);
NSLog(@"[UIDevice currentDevice].name: %@",[UIDevice currentDevice].name);
NSLog(@"[UIDevice currentDevice].systemVersion: %@",[UIDevice currentDevice].systemVersion);
NSLog(@"[UIDevice currentDevice].systemName: %@",[UIDevice currentDevice].systemName);
Puede obtener estos resultados:
[UIDevice currentDevice].model: iPhone
[UIDevice currentDevice].description: <UIDevice: 0x1cd75c70>
[UIDevice currentDevice].localizedModel: iPhone
[UIDevice currentDevice].name: Someones-iPhone002
[UIDevice currentDevice].systemVersion: 6.1.3
[UIDevice currentDevice].systemName: iPhone OS
Una simple comprobación de la versión de iOS inferior a 5 (todas las versiones):
if([[[UIDevice currentDevice] systemVersion] integerValue] < 5){
// do something
};
[[UIDevice currentDevice] systemVersion];
o compruebe la versión como
Puedes obtener las siguientes macros desde here .
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(IOS_VERSION_3_2_0))
{
UIImageView *background = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cs_lines_back.png"]] autorelease];
theTableView.backgroundView = background;
}
Espero que esto ayude
La mejor versión actual , sin necesidad de lidiar con la búsqueda numérica dentro de NSString, es definir macros
(ver respuesta original: verificar versión de iPhone iOS )
Esas macros existen en github, ver: https://github.com/carlj/CJAMacros/blob/master/CJAMacros/CJAMacros.h
Me gusta esto:
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
y úsalos así:
if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {
// code here
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
// code here
}
Versión obsoleta a continuación
para obtener la versión del sistema operativo:
[[UIDevice currentDevice] systemVersion]
devuelve una cadena, que se puede convertir en int / float a través de
-[NSString floatValue]
-[NSString intValue]
Me gusta esto
Ambos valores (floatValue, intValue) se eliminarán debido a su tipo, 5.0.1 se convertirá en 5.0 o 5 (float o int), para realizar una comparación precisa, tendrá que separarlo de la lista de INTs check aceptado respuesta aquí: Verifique iPhone Versión de iOS
NSString *ver = [[UIDevice currentDevice] systemVersion];
int ver_int = [ver intValue];
float ver_float = [ver floatValue];
y compara asi
NSLog(@"System Version is %@",[[UIDevice currentDevice] systemVersion]);
NSString *ver = [[UIDevice currentDevice] systemVersion];
float ver_float = [ver floatValue];
if (ver_float < 5.0) return false;
Para la sintaxis de Swift 4.0
El siguiente ejemplo es solo verificar si el dispositivo es de iOS11
o una versión mayor.
let systemVersion = UIDevice.current.systemVersion
if systemVersion.cgFloatValue >= 11.0 {
//"for ios 11"
}
else{
//"ios below 11")
}
[[UIDevice currentDevice] systemVersion]
[[[UIDevice currentDevice] systemVersion] floatValue]