Как программно получить буквенно-цифровую строку версии iOS
Я работал с красивой структурой PLCrashReport, чтобы отправить на мой сервер отчеты о сбоях с моих пользовательских устройств iOS.
Тем не менее, чтобы символизировать отчет о сбое, утилита symbolicatecrash, которая вместе с номером версии iPhone для iPhone, имеет буквенно-цифровую версию ipsw в виде:
OS Version: iPhone OS 4.0.1 (8A293)
Я знаю, что я могу получить цифровую версию iOS [[UIDevice currentDevice] systemVersion]
, но как я могу получить другую?
Я не могу найти способ, и я искал везде, где только мог себе представить.
Ответы
Ответ 1
Не знаю, почему другие говорят, что это невозможно, потому что он использует функцию 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;
}
Ответ 2
Почему бы вам не попробовать это?
NSString *os_version = [[UIDevice currentDevice] systemVersion];
NSLog(@"%@", os_version);
if([[NSNumber numberWithChar:[os_version characterAtIndex:0]] intValue]>=4) {
// ...
}
Ответ 3
У меня возникли проблемы с загрузкой строки Dylan на веб-сервер PHP, соединение с 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;
}
Ответ 4
Для этого нет API (по крайней мере, не в UIKit). Пожалуйста, укажите ошибку, запрашивающую его.
Ответ 5
Я пришел сюда, чтобы найти ответ о том, как это сделать в Swift, и после некоторых тестов и ошибок просто обнаружил, что вы можете написать это, по крайней мере, в Xcode 9:
print(ProcessInfo().operatingSystemVersionString)
И вывод, который я получаю в симуляторе:
Version 11.0 (Build 15A5278f)
И в реальном устройстве:
Version 10.3.2 (Build 14F89)
Надеюсь, что это поможет.
Ответ 6
"Другой" - это версия сборки и недоступна для вашего устройства через UIKit.