Search code examples
iphoneobjective-cioscocoa-touchios4

How can we programmatically detect which iOS version is device running on?


I want to check if the user is running the app on iOS less than 5.0 and display a label in the app.

How do I detect which iOS is running on user's device programmatically?

Thanks!


Solution

  • Best current version, without need to deal with numeric search within NSString is to define macros (See original answer: Check iPhone iOS Version)

    Those macros do exist in github, see: https://github.com/carlj/CJAMacros/blob/master/CJAMacros/CJAMacros.h

    Like this:

    #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)
    

    and use them like this:

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

    Outdated version below

    to get OS version:

    [[UIDevice currentDevice] systemVersion]
    

    returns string, which can be turned into int/float via

    -[NSString floatValue]
    -[NSString intValue]
    

    like this

    Both values (floatValue, intValue) will be stripped due to its type, 5.0.1 will become 5.0 or 5 (float or int), for comparing precisely, you will have to separate it to array of INTs check accepted answer here: Check iPhone iOS Version

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

    and compare like this

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

    For Swift 4.0 syntax

    below example is just checking if the device is of iOS11 or greater version.

    let systemVersion = UIDevice.current.systemVersion
    if systemVersion.cgFloatValue >= 11.0 {
        //"for ios 11"
      }
    else{
       //"ios below 11")
      }