Search code examples
iphoneiosipadipoduidevice

How to determine if iphone / ipad / ipod / appletv is older, newer or equal to other device of same family?


How can I compare different platforms?

Example: I want to know if the current device is older than iPhone 4S.


Solution

  • add these methods to some class (e.g. YourClass):

    +(NSString*)deviceVersion{
        // get hardware device version string
        struct utsname systemInfo;
        uname(&systemInfo);
        return [NSString stringWithCString:systemInfo.machine
                                  encoding:NSUTF8StringEncoding];
        /*      possible values:
         @"i386" (or similar)     on the simulator //
         @"iPod1,1"   on iPod Touch
         @"iPod2,1"   on iPod Touch Second Generation
         @"iPod3,1"   on iPod Touch Third Generation
         @"iPod4,1"   on iPod Touch Fourth Generation
         @"iPhone1,1" on iPhone
         @"iPhone1,2" on iPhone 3G
         @"iPhone2,1" on iPhone 3GS
         @"iPad1,1"   on iPad
         @"iPad2,1"   on iPad 2
         @"iPad3,1"   on iPad 3 (aka new iPad)
         @"iPhone3,1" on iPhone 4
         @"iPhone4,1" on iPhone 4S
         @"iPhone5,1" on iPhone 5
         @"iPhone5,2" on iPhone 5
         ...future version...?       */
    }
    
    +(NSNumber *)getVersionForDevice:(NSString*)deviceToCheck{
        NSNumber* versionNumber = nil;
        if (deviceToCheck && ![deviceToCheck isEqualToString:@""]) {
            NSString* deviceMachine = [Utils deviceVersion];
            NSString* deviceVersion = nil;
            if ([deviceMachine hasPrefix:deviceToCheck]) {
                deviceVersion = [deviceMachine stringByReplacingOccurrencesOfString:deviceToCheck withString:@""];
                deviceVersion = [deviceVersion stringByReplacingOccurrencesOfString:@"," withString:@"."];
                float floatVersion = [deviceVersion floatValue];
                versionNumber = [NSNumber numberWithFloat:floatVersion];
            }
        }
        return versionNumber;
    }
    
    
    +(BOOL)isSimulator{
        NSString* deviceMachine = [Utils deviceVersion];
        //    NSLog(@"Utils deviceMachine: %@", deviceMachine);
        if (![deviceMachine hasPrefix:@"iPhone"] && ![deviceMachine hasPrefix:@"iPod"] && ![deviceMachine hasPrefix:@"iPad"]) {
            return 1;
        }
        return 0;
    }
    

    then, if on iPhone and wanna test version:

    float iPhoneVersion = [[YourClass getVersionForDevice:@"iPhone"] floatValue];
    

    and do similar call for iPad... iPod...