How to check iPhone Device Version in iOS?

后端 未结 5 1724
长情又很酷
长情又很酷 2021-01-01 04:46

Hi i would like to check iPhone Device Version in iOS.

I mean , currently running device is iPhone 4 or iPhone 5.

I need to check the device , is that iPhone

相关标签:
5条回答
  • 2021-01-01 05:20
    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f)
    #define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
    #define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0f)
    #define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
    #define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0f)
    #define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0f)
    
    0 讨论(0)
  • 2021-01-01 05:21

    Based on the answers of this question you could determined which model your are using by this:

    NSString *deviceModel = [UIDevice currentDevice].model;
    

    Results can be one of the values: iPod touch, iPhone, iPad, iPhone Simulator, iPad Simulator

    For specific model which version you are using could be determined by creating a Category on UIDevice.h class like this:

    UIDevice+Utilities.h

    #import <UIKit/UIKit.h>
    
    @interface UIDevice (Utilities)
    
    - (CGFloat)deviceModelVersion;
    
    @end
    

    UIDevice+Utilities.m

    #import "UIDevice+Utilities.h"
    #include <sys/types.h>
    #include <sys/sysctl.h>
    
    @implementation UIDevice (Utilities)
    
    - (CGFloat)deviceModelVersion
    {
        size_t size;
        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
        char *machine = malloc(size);
        sysctlbyname("hw.machine", machine, &size, NULL, 0);
        NSString *platform = [NSString stringWithUTF8String:machine];
        free(machine);
    
        if ([platform rangeOfString:@"iPhone"].location != NSNotFound)
        {
            return [[[platform stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
        }
        else if ([platform rangeOfString:@"iPad"].location != NSNotFound)
        {
            return [[[platform stringByReplacingOccurrencesOfString:@"iPad" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
        }
        else if ([platform rangeOfString:@"iPod"].location != NSNotFound)
        {
            return [[[platform stringByReplacingOccurrencesOfString:@"iPod" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue];
        }
        else if ([platform rangeOfString:@"i386"].location != NSNotFound || [platform rangeOfString:@"x86_64"].location != NSNotFound)
        {
            return -1.0; //Currently it is not possible (or maybe it is, but I do not know)
                         //which type of simulator device model version your app is running
                         //so I am returning -1.0 device model version for all simulators types
        }
    
        return 0.0;
    }
    
    @end
    

    Example how to call function deviceModelVersion:

    CGFloat deviceModelVersion = [UIDevice currentDevice].deviceModelVersion;
    

    Possible results could be 1.0, 1.1, ..., 2.0, 2.1, ..., 3.0, 3.1, .., 4.0, 4.1, .., 5.0, 5.1, ...

    To determine if it is iPhone 5, you would have

    deviceModel : "iPhone" 
    

    and

    deviceModelVersion : >=5.0 and < 6.0
    
    0 讨论(0)
  • 2021-01-01 05:29

    I actually found a #define that does the trick

    #define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
    
    0 讨论(0)
  • 2021-01-01 05:30

    Add this code:

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
            if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
                CGSize result = [[UIScreen mainScreen] bounds].size;
                CGFloat scale = [UIScreen mainScreen].scale;
                result = CGSizeMake(result.width * scale, result.height * scale);
    
                if(result.height == 960) {
                    NSLog(@"iPhone 4 Resolution");
                    resolution_number = 1;
                }
                if(result.height == 1136) {
                    NSLog(@"iPhone 5 Resolution");
                }
            }
            else{
                NSLog(@"Standard Resolution");
            }
        }
    
    0 讨论(0)
  • 2021-01-01 05:31

    Add This Macros to your code:

    #define HEIGHT_IPHONE_5 568
    #define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 )
    

    then just check whenever you needs..

    if (IS_IPHONE_5) {
        //Code for iPhone5
    }else{
        //Code for earlier version
    }
    
    0 讨论(0)
提交回复
热议问题