Skip to content

Instantly share code, notes, and snippets.

@dmcrodrigues
Forked from Jaybles/UIDeviceHardware.h
Last active December 12, 2015 09:48
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save dmcrodrigues/4753914 to your computer and use it in GitHub Desktop.
Save dmcrodrigues/4753914 to your computer and use it in GitHub Desktop.
//
// UIDevice+DeviceHardware.h
//
// Used to determine EXACT version of device software is running on.
#import <Foundation/Foundation.h>
#include <sys/types.h>
#include <sys/sysctl.h>
typedef enum {
UIDeviceHardwareiPhone1,
UIDeviceHardwareiPhone3G,
UIDeviceHardwareiPhone3GS,
UIDeviceHardwareiPhone4,
UIDeviceHardwareiPhone4S,
UIDeviceHardwareiPhone5,
UIDeviceHardwareiPod1,
UIDeviceHardwareiPod2,
UIDeviceHardwareiPod3,
UIDeviceHardwareiPod4,
UIDeviceHardwareiPod5,
UIDeviceHardwareiPad1,
UIDeviceHardwareiPad2,
UIDeviceHardwareiPadMini,
UIDeviceHardwareiPad3,
UIDeviceHardwareiPad4,
UIDeviceHardwareSimulator,
UIDeviceHardwareUnknown
} UIDeviceHardware;
@interface UIDevice (DeviceHardware)
- (UIDeviceHardware)hardware;
- (NSString *)hardwareString;
@end
//
// UIDevice+DeviceHardware.m
//
// Used to determine EXACT version of device software is running on.
#import "UIDevice+DeviceHardware.h"
@implementation UIDevice (DeviceHardware)
- (NSString *)fetchDeviceHardware
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = (char *) malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *hardware = [NSString stringWithUTF8String:machine];
free(machine);
return hardware;
}
- (UIDeviceHardware)hardware
{
NSString *platform = [self fetchDeviceHardware];
if ([platform isEqualToString:@"iPhone1,1"]) return UIDeviceHardwareiPhone1;
if ([platform isEqualToString:@"iPhone1,2"]) return UIDeviceHardwareiPhone3G;
if ([platform isEqualToString:@"iPhone2,1"]) return UIDeviceHardwareiPhone3GS;
if ([platform isEqualToString:@"iPhone3,1"]) return UIDeviceHardwareiPhone4;
if ([platform isEqualToString:@"iPhone3,3"]) return UIDeviceHardwareiPhone4S;
if ([platform isEqualToString:@"iPhone4,1"]) return UIDeviceHardwareiPhone4S;
if ([platform isEqualToString:@"iPhone5,1"]) return UIDeviceHardwareiPhone5;
if ([platform isEqualToString:@"iPhone5,2"]) return UIDeviceHardwareiPhone5;
if ([platform isEqualToString:@"iPod1,1"]) return UIDeviceHardwareiPod1;
if ([platform isEqualToString:@"iPod2,1"]) return UIDeviceHardwareiPod2;
if ([platform isEqualToString:@"iPod3,1"]) return UIDeviceHardwareiPod3;
if ([platform isEqualToString:@"iPod4,1"]) return UIDeviceHardwareiPod4;
if ([platform isEqualToString:@"iPod5,1"]) return UIDeviceHardwareiPod5;
if ([platform isEqualToString:@"iPad1,1"]) return UIDeviceHardwareiPad1;
if ([platform isEqualToString:@"iPad2,1"]) return UIDeviceHardwareiPad2;
if ([platform isEqualToString:@"iPad2,2"]) return UIDeviceHardwareiPad2;
if ([platform isEqualToString:@"iPad2,3"]) return UIDeviceHardwareiPad2;
if ([platform isEqualToString:@"iPad2,5"]) return UIDeviceHardwareiPadMini;
if ([platform isEqualToString:@"iPad2,6"]) return UIDeviceHardwareiPadMini;
if ([platform isEqualToString:@"iPad2,7"]) return UIDeviceHardwareiPadMini;
if ([platform isEqualToString:@"iPad3,1"]) return UIDeviceHardwareiPad3;
if ([platform isEqualToString:@"iPad3,2"]) return UIDeviceHardwareiPad3;
if ([platform isEqualToString:@"iPad3,3"]) return UIDeviceHardwareiPad3;
if ([platform isEqualToString:@"iPad3,4"]) return UIDeviceHardwareiPad4;
if ([platform isEqualToString:@"iPad3,5"]) return UIDeviceHardwareiPad4;
if ([platform isEqualToString:@"iPad3,6"]) return UIDeviceHardwareiPad4;
if ([platform isEqualToString:@"i386"]) return UIDeviceHardwareSimulator;
if ([platform isEqualToString:@"x86_64"]) return UIDeviceHardwareSimulator;
return UIDeviceHardwareUnknown;
}
- (NSString *)hardwareString
{
NSString *platform = [self fetchDeviceHardware];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (GSM)";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
if ([platform isEqualToString:@"i386"]) return @"Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"Simulator";
return platform;
}
@end
UIDeviceHardware hardware = [UIDevice currentDevice].hardware;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment