如何以编程方式获取iOS的字母数字版本string

我一直在用很好的PLCrashReport框架来向我的服务器发送来自我的用户的iOS设备的崩溃报告。

然而,为了象征崩溃报告, symboliccrash工具请求与iPhone操作系统版本号一起,我有ipsw的字母数字版本,forms如下:

OS Version: iPhone OS 4.0.1 (8A293) 

我知道我可以通过[[UIDevice currentDevice] systemVersion]得到iOS的数字版本,但是我怎么能得到另一个呢?

我找不到方法,而且我到处都可以想象。

不知道为什么其他人说这是不可能的,因为它使用了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; } 

你为什么不试试这个?

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

我在将Dylan的string上传到PHP Web服务器时遇到问题,URL连接会挂起,所以我修改了下面的代码来修复它:

 #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; } 

没有API(至less,不在UIKit中)。 请提出一个错误请求。

我已经到了这里寻找如何在Swift中做这个的答案,经过一些testing和错误,只是发现你可以写这个,至less在Xcode 9中:

 print(ProcessInfo().operatingSystemVersionString) 

我在模拟器中得到的输出是:

 Version 11.0 (Build 15A5278f) 

在一个真实的设备中:

 Version 10.3.2 (Build 14F89) 

希望能帮助到你。

“另一个”是构build版本,不能通过UIKit使用您的设备。