Как определить текущую версию операционной системы 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".