Cómo get por progtwigción la cadena alfanumérica de la versión de iOS

He estado trabajando con el agradable marco de PLCrashReport para enviar a mi server los informes de fallas de los dispositivos iOS de mi usuario.

Sin embargo, para simbolizar el informe del locking, la utilidad symbolicatecrash solicita que, junto con el número de versión del iPhone OS, tenga la versión alfanumérica de ipsw, en forma de:

OS Version: iPhone OS 4.0.1 (8A293) 

Sé que puedo get la versión numérica de iOS por [[UIDevice currentDevice] systemVersion] , pero ¿cómo puedo get el otro?

No puedo encontrar una manera, y he buscado en todas partes que pueda imaginar.

No estoy seguro de por qué otros dicen que esto no es posible porque está utilizando la function sysctl .

 #import <sys/sysctl.h> - (NSString *)osVersionBuild { int mib[2] = {CTL_KERN, KERN_OSVERSION}; u_int namelen = sizeof(mib) / sizeof(mib[0]); size_t bufferSize = 0; NSString *osBuildVersion = nil; // Get the size for the buffer sysctl(mib, namelen, NULL, &bufferSize, NULL, 0); u_char buildBuffer[bufferSize]; int result = sysctl(mib, namelen, buildBuffer, &bufferSize, NULL, 0); if (result >= 0) { osBuildVersion = [[[NSString alloc] initWithBytes:buildBuffer length:bufferSize encoding:NSUTF8StringEncoding] autorelease]; } return osBuildVersion; } 

¿Por qué no intentas esto?

 NSString *os_version = [[UIDevice currentDevice] systemVersion]; NSLog(@"%@", os_version); if([[NSNumber numberWithChar:[os_version characterAtIndex:0]] intValue]>=4) { // ... } 

Tuve problemas para upload la cadena de Dylan a un server web PHP, la connection URL simplemente se bloqueaba, así que modifiqué el código de la siguiente manera para solucionarlo:

 #include <sys/sysctl.h> - (NSString *)osVersionBuild { int mib[2] = {CTL_KERN, KERN_OSVERSION}; size_t size = 0; // Get the size for the buffer sysctl(mib, 2, NULL, &size, NULL, 0); char *answer = malloc(size); int result = sysctl(mib, 2, answer, &size, NULL, 0); NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding]; free(answer); return results; } 

No hay API para esto (al less, no en UIKit). Por favor, presente un error solicitándolo.

El 'otro' es la versión de compilation y no está disponible para su dispositivo a través de UIKit.

He llegado aquí buscando una respuesta sobre cómo hacer esto en Swift y, después de un poco de testing y error, he descubierto que puedes escribir esto, al less en Xcode 9:

 print(ProcessInfo().operatingSystemVersionString) 

Y el resultado que obtengo en el simulador es:

 Version 11.0 (Build 15A5278f) 

Y en un dispositivo real:

 Version 10.3.2 (Build 14F89) 

Espero eso ayude.