Подтвердить что ты не робот

Как программно получить буквенно-цифровую строку версии iOS

Я работал с красивой структурой PLCrashReport, чтобы отправить на мой сервер отчеты о сбоях с моих пользовательских устройств iOS.

Тем не менее, чтобы символизировать отчет о сбое, утилита symbolicatecrash, которая вместе с номером версии iPhone для iPhone, имеет буквенно-цифровую версию ipsw в виде:

OS Version:      iPhone OS 4.0.1 (8A293)

Я знаю, что я могу получить цифровую версию iOS [[UIDevice currentDevice] systemVersion], но как я могу получить другую?

Я не могу найти способ, и я искал везде, где только мог себе представить.

4b9b3361

Ответ 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.