How to get device make and model on iOS?

后端 未结 19 1311
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-22 04:58

I was wondering if it\'s possible to determine what kind of iPhone (for example) the currentdevice is? I know it\'s possible to get the model through
NSString

19条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-22 05:24

    A category for going getting away from the NSString description

    In general, it is desirable to avoid arbitrary string comparisons throughout your code. It is better to update the strings in one place and hide the magic string from your app. I provide a category on UIDevice for that purpose.

    For my specific needs I need to know which device I am using without the need to know specifics about networking capability that can be easily retrieved in other ways. So you will find a coarser grained enum than the ever growing list of devices.

    Updating is a matter of adding the device to the enum and the lookup table.

    UIDevice+NTNUExtensions.h

    typedef NS_ENUM(NSUInteger, NTNUDeviceType) {
        DeviceAppleUnknown,
        DeviceAppleSimulator,
        DeviceAppleiPhone,
        DeviceAppleiPhone3G,
        DeviceAppleiPhone3GS,
        DeviceAppleiPhone4,
        DeviceAppleiPhone4S,
        DeviceAppleiPhone5,
        DeviceAppleiPhone5C,
        DeviceAppleiPhone5S,
        DeviceAppleiPhone6,
        DeviceAppleiPhone6_Plus,
        DeviceAppleiPhone6S,
        DeviceAppleiPhone6S_Plus,
        DeviceAppleiPhoneSE,
        DeviceAppleiPhone7,
        DeviceAppleiPhone7_Plus,
        DeviceAppleiPodTouch,
        DeviceAppleiPodTouch2G,
        DeviceAppleiPodTouch3G,
        DeviceAppleiPodTouch4G,
        DeviceAppleiPad,
        DeviceAppleiPad2,
        DeviceAppleiPad3G,
        DeviceAppleiPad4G,
        DeviceAppleiPad5G_Air,
        DeviceAppleiPadMini,
        DeviceAppleiPadMini2G,
        DeviceAppleiPadPro12,
        DeviceAppleiPadPro9
    };
    
    
    
    @interface UIDevice (NTNUExtensions)
    
    - (NSString *)ntnu_deviceDescription;
    - (NTNUDeviceType)ntnu_deviceType;
    
    @end
    

    UIDevice+NTNUExtensions.m

    #import 
    #import "UIDevice+NTNUExtensions.h"
    
    @implementation UIDevice (NTNUExtensions)
    
    - (NSString *)ntnu_deviceDescription
    {
        struct utsname systemInfo;
        uname(&systemInfo);
    
        return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    }
    
    - (NTNUDeviceType)ntnu_deviceType
    {
        NSNumber *deviceType = [[self ntnu_deviceTypeLookupTable] objectForKey:[self ntnu_deviceDescription]];
        return [deviceType unsignedIntegerValue];
    }
    
    - (NSDictionary *)ntnu_deviceTypeLookupTable
    {
        return @{
                 @"i386": @(DeviceAppleSimulator),
                 @"x86_64": @(DeviceAppleSimulator),
                 @"iPod1,1": @(DeviceAppleiPodTouch),
                 @"iPod2,1": @(DeviceAppleiPodTouch2G),
                 @"iPod3,1": @(DeviceAppleiPodTouch3G),
                 @"iPod4,1": @(DeviceAppleiPodTouch4G),
                 @"iPhone1,1": @(DeviceAppleiPhone),
                 @"iPhone1,2": @(DeviceAppleiPhone3G),
                 @"iPhone2,1": @(DeviceAppleiPhone3GS),
                 @"iPhone3,1": @(DeviceAppleiPhone4),
                 @"iPhone3,3": @(DeviceAppleiPhone4),
                 @"iPhone4,1": @(DeviceAppleiPhone4S),
                 @"iPhone5,1": @(DeviceAppleiPhone5),
                 @"iPhone5,2": @(DeviceAppleiPhone5),
                 @"iPhone5,3": @(DeviceAppleiPhone5C),
                 @"iPhone5,4": @(DeviceAppleiPhone5C),
                 @"iPhone6,1": @(DeviceAppleiPhone5S),
                 @"iPhone6,2": @(DeviceAppleiPhone5S),
                 @"iPhone7,1": @(DeviceAppleiPhone6_Plus),
                 @"iPhone7,2": @(DeviceAppleiPhone6),
                 @"iPhone8,1" :@(DeviceAppleiPhone6S),
                 @"iPhone8,2" :@(DeviceAppleiPhone6S_Plus),
                 @"iPhone8,4" :@(DeviceAppleiPhoneSE),
                 @"iPhone9,1" :@(DeviceAppleiPhone7),
                 @"iPhone9,3" :@(DeviceAppleiPhone7),
                 @"iPhone9,2" :@(DeviceAppleiPhone7_Plus),
                 @"iPhone9,4" :@(DeviceAppleiPhone7_Plus),
                 @"iPad1,1": @(DeviceAppleiPad),
                 @"iPad2,1": @(DeviceAppleiPad2),
                 @"iPad3,1": @(DeviceAppleiPad3G),
                 @"iPad3,4": @(DeviceAppleiPad4G),
                 @"iPad2,5": @(DeviceAppleiPadMini),
                 @"iPad4,1": @(DeviceAppleiPad5G_Air),
                 @"iPad4,2": @(DeviceAppleiPad5G_Air),
                 @"iPad4,4": @(DeviceAppleiPadMini2G),
                 @"iPad4,5": @(DeviceAppleiPadMini2G),
                 @"iPad4,7":@(DeviceAppleiPadMini),
                 @"iPad6,7":@(DeviceAppleiPadPro12),
                 @"iPad6,8":@(DeviceAppleiPadPro12),
                 @"iPad6,3":@(DeviceAppleiPadPro9),
                 @"iPad6,4":@(DeviceAppleiPadPro9)
                 };
    }
    
    @end
    

提交回复
热议问题