Как мы можем программно определить, на какой версии iOS работает устройство?

Я хочу проверить, работает ли приложение на iOS менее 5,0 и отображает метку в приложении.

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

Благодаря!

10 Solutions collect form web for “Как мы можем программно определить, на какой версии iOS работает устройство?”

Лучшая текущая версия , без необходимости иметь дело с числовым поиском в NSString, заключается в определении macros (см. Оригинальный ответ: проверьте версию iPhone iOS )

Эти макросы существуют в github, см. https://github.com/carlj/CJAMacros/blob/master/CJAMacros/CJAMacros.h

Как это:

 #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

и используйте их вот так:

 if (SYSTEM_VERSION_LESS_THAN(@"5.0")) { // code here } if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) { // code here } 

Устаревшая версия ниже

получить версию ОС:

 [[UIDevice currentDevice] systemVersion] 

возвращает строку, которая может быть преобразована в int / float через

 -[NSString floatValue] -[NSString intValue] 

как это

Оба значения (floatValue, intValue) будут удалены из-за своего типа, 5.0.1 станет 5.0 или 5 (float или int), для точного сравнения вам придется отделить его от массива INTs, чтобы проверить принятый ответ здесь: Проверить iPhone Версия iOS

 NSString *ver = [[UIDevice currentDevice] systemVersion]; int ver_int = [ver intValue]; float ver_float = [ver floatValue]; 

и сравнить это

 NSLog(@"System Version is %@",[[UIDevice currentDevice] systemVersion]); NSString *ver = [[UIDevice currentDevice] systemVersion]; float ver_float = [ver floatValue]; if (ver_float < 5.0) return false; 

Обновить

Из iOS 8 мы можем использовать новый метод NSProcessInfo

  NSOperatingSystemVersion ios8_0_1 = (NSOperatingSystemVersion){8, 0, 1}; if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios8_0_1]) { // iOS 8.0.1 and above logic } else { // iOS 8.0.0 and below logic } 

Остерегайтесь, что это сработает на iOS 7, поскольку API не существовал до iOS 8. Если вы поддерживаете iOS 7 и ниже, вы можете безопасно выполнить проверку с помощью

 if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)]) { // conditionally check for any version >= iOS 8 using 'isOperatingSystemAtLeastVersion' } else { // we're on iOS 7 or below } 

Исходный ответ iOS <8

Для полноты, вот альтернативный подход, предложенный самим Apple в iOS 7 UI Transition Guide , который включает в себя проверку версии Foundation Framework.

 if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { // Load resources for iOS 6.1 or earlier } else { // Load resources for iOS 7 or later } 

Я знаю, что я слишком поздно, чтобы ответить на этот вопрос. Я не уверен, что мой метод все еще работает на низких версиях iOS (<5.0):

 NSString *platform = [UIDevice currentDevice].model; NSLog(@"[UIDevice currentDevice].model: %@",platform); NSLog(@"[UIDevice currentDevice].description: %@",[UIDevice currentDevice].description); NSLog(@"[UIDevice currentDevice].localizedModel: %@",[UIDevice currentDevice].localizedModel); NSLog(@"[UIDevice currentDevice].name: %@",[UIDevice currentDevice].name); NSLog(@"[UIDevice currentDevice].systemVersion: %@",[UIDevice currentDevice].systemVersion); NSLog(@"[UIDevice currentDevice].systemName: %@",[UIDevice currentDevice].systemName); 

Вы можете получить следующие результаты:

 [UIDevice currentDevice].model: iPhone [UIDevice currentDevice].description: <UIDevice: 0x1cd75c70> [UIDevice currentDevice].localizedModel: iPhone [UIDevice currentDevice].name: Someones-iPhone002 [UIDevice currentDevice].systemVersion: 6.1.3 [UIDevice currentDevice].systemName: iPhone OS 
 [[UIDevice currentDevice] systemVersion] 

[[UIDevice currentDevice] systemVersion];

или проверить версию как

Вы можете получить нижеприведенные макросы.

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(IOS_VERSION_3_2_0)) { UIImageView *background = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cs_lines_back.png"]] autorelease]; theTableView.backgroundView = background; } 

Надеюсь это поможет

 [[[UIDevice currentDevice] systemVersion] floatValue] 

Марек Себера очень велик, но если вы похожи на меня и обнаружите, что вам нужно часто проверять версию iOS, вы не хотите постоянно запускать макрос в памяти, потому что вы будете испытывать очень небольшое замедление, особенно на более старых устройствах.

Вместо этого вы хотите вычислить версию iOS как float один раз и сохранить ее где-нибудь. В моем случае у меня есть одноэлементный класс GlobalVariables который я использую для проверки версии iOS в своем коде, используя следующий код:

 if ([GlobalVariables sharedVariables].iOSVersion >= 6.0f) { // do something if iOS is 6.0 or greater } 

Чтобы включить эту функцию в вашем приложении, используйте этот код (для iOS 5+ с использованием ARC):

GlobalVariables.h :

 @interface GlobalVariables : NSObject @property (nonatomic) CGFloat iOSVersion; + (GlobalVariables *)sharedVariables; @end 

GlobalVariables.m :

 @implementation GlobalVariables @synthesize iOSVersion; + (GlobalVariables *)sharedVariables { // set up the global variables as a static object static GlobalVariables *globalVariables = nil; // check if global variables exist if (globalVariables == nil) { // if no, create the global variables class globalVariables = [[GlobalVariables alloc] init]; // get system version NSString *systemVersion = [[UIDevice currentDevice] systemVersion]; // separate system version by periods NSArray *systemVersionComponents = [systemVersion componentsSeparatedByString:@"."]; // set ios version globalVariables.iOSVersion = [[NSString stringWithFormat:@"%01d.%02d%02d", \ systemVersionComponents.count < 1 ? 0 : \ [[systemVersionComponents objectAtIndex:0] integerValue], \ systemVersionComponents.count < 2 ? 0 : \ [[systemVersionComponents objectAtIndex:1] integerValue], \ systemVersionComponents.count < 3 ? 0 : \ [[systemVersionComponents objectAtIndex:2] integerValue] \ ] floatValue]; } // return singleton instance return globalVariables; } @end 

Теперь вы можете легко проверить версию iOS без постоянной работы макросов. Обратите внимание, в частности, как я преобразовал [[UIDevice currentDevice] systemVersion] NSString в CGFloat, который постоянно доступен без использования каких-либо неправильных методов, о которых многие уже указывали на этой странице. Мой подход предполагает, что строка версии находится в формате n.nn.nn (что позволяет пропускать более поздние биты) и работает для iOS5 +. При тестировании этот подход работает намного быстрее, чем постоянный запуск макроса.

Надеюсь, это поможет любому, кто испытывает проблему, которую я имел!

Чтобы получить более конкретную информацию о номере версии с основными и второстепенными версиями, выполните следующие действия:

 NSString* versionString = [UIDevice currentDevice].systemVersion; NSArray* vN = [versionString componentsSeparatedByString:@"."]; 

Массив vN будет содержать основные и второстепенные версии в виде строк, но если вы хотите выполнять сравнения, номера версий должны храниться как числа (ints). Вы можете добавить этот код для их хранения в C-array * versionNumbers :

 int versionNumbers[vN.count]; for (int i = 0; i < sizeof(versionNumbers)/sizeof(versionNumbers[0]); i++) versionNumbers[i] = [[vN objectAtIndex:i] integerValue]; 

* C-массивы, используемые здесь для более сжатого синтаксиса.

В MonoTouch:

Чтобы использовать основную версию:

 UIDevice.CurrentDevice.SystemVersion.Split('.')[0] 

Для незначительной версии используйте:

 UIDevice.CurrentDevice.SystemVersion.Split('.')[1] 

Простая проверка версии iOS менее 5 (все версии):

 if([[[UIDevice currentDevice] systemVersion] integerValue] < 5){ // do something }; 
  • Рисование простых строк на iPhone с помощью CoreGraphics
  • Не удалось создать каталог журнала
  • Просмотр зашифрованных данных с помощью UIWebView
  • Как мне оживить UIButton между двумя изображениями PNG?
  • установить размеры фонового изображения IOS
  • Может ли кто-нибудь объяснить сообщение журнала «CoreAnimation: timed out fence»?
  • Как сделать макет для обработки строки состояния (двойная высота) для настраиваемого контроллера представления в iOS 8?
  • Как добиться мазков кисти в iOS
  • Внесение пользовательского представления в UITableView
  • Как разрешить конфликт имен символов в структуре Touch Cocoa
  • Накладные расходы NSNotifications
  • Interesting Posts

    Нужно ли интегрировать приложение Junos с приложением iOS для подключения к VPN?

    Uncrustify: вложенное блокирование блоков неверно

    Phonegap – Info.plist в пакете должен содержать ключ CFBundleVersion

    Google Analytics на iOS возвращает NO при отправке, нет отладочного вывода

    Маршрутизация архитектуры Viper

    Как изменить приоритет пользовательской очереди GCD?

    phonegap 3.0 console.log плагин http: localhost /! gap_exec 404 NOT FOUND

    Захват видео в полноэкранном режиме с помощью AVCaptureSession

    Как я могу получить изображение, созданное датой даты или последним измененным датом времени, из фотографий iOS (например, ролика камеры)?

    Почему «Simulate Background Fetch» ​​приводит к сбою (libsystem_kernel.dylib`mach_msg_trap) с Xcode 8?

    Права / возможности на схему XCode

    Как реализовать анимацию, связанную с жесткой щепоткой в ​​«Фото»?

    Класс ios не найден «Ожидаемый тип»

    UIWebView не загружает ответную веб-страницу правильно

    NSCoder – кодирование массива с несколькими уровнями вложенных массивов

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.