UIDevice Hardware Category
If you need a human readable description of an iOS device, check out UIDevice+Hardware category on GitHub. Previously, I was using Erica Sadun’s various categories on UIDevice
but the last commit happened a year ago. UIDevice+Hardware seems simpler and more up to date.
The core of the code relies on Apple’s internal naming:
- (NSString*)hardwareString
{
size_t size = 100;
char *hw_machine = malloc(size);
int name[] = {CTL_HW,HW_MACHINE};
sysctl(name, 2, hw_machine, &size, NULL, 0);
NSString *hardware = [NSString stringWithUTF8String:hw_machine];
free(hw_machine);
return hardware;
}
The code is straightforward but could be a lot simpler by using a lookup table. Instead of this:
- (NSString*)hardwareSimpleDescription
{
NSString *hardware = [self hardwareString];
if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([hardware isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([hardware isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([hardware isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
…
return nil;
}
Why not simply use dictionary literals?
- (NSString*)hardwareSimpleDescription
{
NSString *hardware = [self hardwareString];
if (!hardware) return nil;
NSDictionary *hardwareToSimple = @{
@"iPhone1,1": @"iPhone 2G",
@"iPhone1,2": @"iPhone 3G",
@"iPhone2,1": @"iPhone 3GS",
@"iPhone3,1": @"iPhone 4",
…
}
return hardwareToSimple[hardware];
}
For the record, the current list of iOS devices is:
platform | Hardware |
---|---|
iPhone1,1 | iPhone 2G |
iPhone1,2 | iPhone 3G |
iPhone2,1 | iPhone 3GS |
iPhone3,1 | iPhone 4 |
iPhone3,2 | iPhone 4 |
iPhone3,3 | iPhone 4 |
iPhone4,1 | iPhone 4S |
iPhone5,1 | iPhone 5 |
iPhone5,2 | iPhone 5 |
iPhone5,3 | iPhone 5c |
iPhone5,4 | iPhone 5c |
iPhone6,1 | iPhone 5s |
iPhone6,2 | iPhone 5s |
iPod1,1 | iPod Touch (1 Gen) |
iPod2,1 | iPod Touch (2 Gen) |
iPod3,1 | iPod Touch (3 Gen) |
iPod4,1 | iPod Touch (4 Gen) |
iPod5,1 | iPod Touch (5 Gen) |
iPad1,1 | iPad |
iPad1,2 | iPad |
iPad2,1 | iPad 2 |
iPad2,2 | iPad 2 |
iPad2,3 | iPad 2 |
iPad2,4 | iPad 2 |
iPad2,5 | iPad mini |
iPad2,6 | iPad mini |
iPad2,7 | iPad mini |
iPad3,1 | iPad 3 |
iPad3,2 | iPad 3 |
iPad3,3 | iPad 3 |
iPad3,4 | iPad 4 |
iPad3,5 | iPad 4 |
iPad3,6 | iPad 4 |
iPad4,1 | iPad Air |
iPad4,2 | iPad Air |
iPad4,3 | iPad Air |
iPad4,4 | iPad mini Retina |
iPad4,5 | iPad mini Retina |