Как определить текущую версию операционной системы iPhone во время выполнения и сравнить строки версии?

Как вы можете определить и сравнить ( > , < и т.д.) текущую версию ОС iPhone, на которой работает приложение? Существует некоторая ошибка в 3.0, но не в версии 3.1+, поэтому я хотел бы пропустить немного кода, если текущая версия ОС не равнa >= 3.1.

Это должно быть во время выполнения, а не во время компиляции!

Ответ 1

Вы имеете в виду определение версии ОС? SDK фиксируется во время сборки, но ОС может измениться. Чтобы получить версию ОС, используйте [UIDevice currentDevice]. SystemVersion. Чтобы получить версию SDK, я думаю, вы можете использовать __IPHONE_OS_VERSION_MIN_REQUIRED.

Ответ 2

Вы можете, например, сделать что-то вроде этого:

NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];

if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
 {
    //Do some clever stuff
 }

Ответ 3

Более надежный способ - сделать что-то вроде этого:

static inline NSComparisonResult compareCurVersionTo(int major, int minor, int point)
{
    NSUInteger testVers = major*10000 + minor*100 + point;
    NSUInteger curSysNum = 0;
    NSUInteger multi = 10000;
    for(NSString *n in [[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."]) {
        curSysNum += [n integerValue] * multi;
        multi /= 100;
    }
    if(curSysNum < testVers) return NSOrderedAscending;
    if(curSysNum > testVers) return NSOrderedDescending;
    return NSOrderedSame;
}

Это обрабатывает ошибку "Leopard", где младшие релизы были больше, чем "9".