forked from erica/uidevice-extension
-
Notifications
You must be signed in to change notification settings - Fork 1
/
UIDevice-hardware.m
119 lines (102 loc) · 4.46 KB
/
UIDevice-hardware.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* Thanks to Emanuele Vulcano, Kevin Ballard/Eridius, Ryandjohnson */
/*
- Bluetooth? Screen pixels? Dot pitch? Accelerometer? GPS disabled in Egypt (and others?). - @halm
*/
#import "UIDevice-hardware.h"
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (Hardware)
/*
Platforms
iPhone1,1 -> iPhone 1G
iPhone1,2 -> iPhone 3G
iPod1,1 -> iPod touch 1G
iPod2,1 -> iPod touch 2G
iPad2,2 -> iPad 2
For more information:
http://www.edepot.com/iphone.html
http://stackoverflow.com/questions/1108859/detect-the-specific-iphone-ipod-touch-model
http://theiphonewiki.com/wiki/Models
*/
+ (NSString *) platform
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine encoding: NSUTF8StringEncoding];
free(machine);
return platform;
}
+ (int) platformType
{
NSString *platform = [self platform];
//NSLog(@"Platform: %@", platform);
if ([platform isEqualToString:@"iPhone1,1"]) return UIDevice1GiPhone;
if ([platform isEqualToString:@"iPhone1,2"]) return UIDevice3GiPhone;
if ([platform isEqualToString:@"iPhone2,1"]) return UIDevice3GSiPhone;
if ([platform isEqualToString:@"iPhone3,1"]) return UIDevice4iPhone;
if ([platform isEqualToString:@"iPhone3,3"]) return UIDevice4iPhone; // iPhone 4 CDMA
if ([platform isEqualToString:@"iPhone4,1"]) return UIDevice4SiPhone;
if ([platform isEqualToString:@"iPhone5,1"]) return UIDevice5iPhone; // iPhone 5 GSM
if ([platform isEqualToString:@"iPhone5,2"]) return UIDevice5iPhone; // iPhone 5 GSM+CDMA
if ([platform hasPrefix:@"iPhone"]) return UIDeviceUnknowniPhone;
if ([platform isEqualToString:@"iPod1,1"]) return UIDevice1GiPod;
if ([platform isEqualToString:@"iPod2,1"]) return UIDevice2GiPod;
if ([platform isEqualToString:@"iPod3,1"]) return UIDevice3GiPod;
if ([platform isEqualToString:@"iPod4,1"]) return UIDevice4GiPod;
if ([platform hasPrefix:@"iPod"]) return UIDeviceUnknowniPod;
if ([platform isEqualToString:@"iPad2,1"]) return UIDevice2GiPad; // wifi
if ([platform isEqualToString:@"iPad2,2"]) return UIDevice2GiPad; // wifi+3G
if ([platform isEqualToString:@"iPad2,3"]) return UIDevice2GiPad; // wifi+CDMA
if ([platform isEqualToString:@"iPad3,1"]) return UIDevice3GiPad; // wifi
if ([platform isEqualToString:@"iPad3,2"]) return UIDevice3GiPad; // wifi+3G
if ([platform isEqualToString:@"iPad3,3"]) return UIDevice3GiPad; // wifi+CDMA
if ([platform hasSuffix:@"iPad"]) return UIDeviceUnknowniPad;
if ([platform hasPrefix:@"x86_"]) return UIDeviceSimulator;
return UIDeviceUnknown;
}
+ (NSString *) platformString
{
switch ([self platformType])
{
case UIDevice1GiPhone: return IPHONE_1G_NAMESTRING;
case UIDevice3GiPhone: return IPHONE_3G_NAMESTRING;
case UIDevice3GSiPhone: return IPHONE_3GS_NAMESTRING;
case UIDevice4iPhone: return IPHONE_4_NAMESTRING;
case UIDevice4SiPhone: return IPHONE_4S_NAMESTRING;
case UIDevice5iPhone: return IPHONE_5_NAMESTRING;
case UIDeviceUnknowniPhone: return IPHONE_UNKNOWN_NAMESTRING;
case UIDevice1GiPod: return IPOD_1G_NAMESTRING;
case UIDevice2GiPod: return IPOD_2G_NAMESTRING;
case UIDeviceUnknowniPod: return IPOD_UNKNOWN_NAMESTRING;
case UIDevice2GiPad: return IPAD_2_NAMESTRING;
case UIDeviceUnknowniPad: return IPAD_UNKNOWN_NAMESTRING;
case UIDeviceSimulator: return IPHONE_SIMULATOR;
default:
return [NSString stringWithFormat:@"Unknown platform: %@", [self platform]];
}
}
+ (int) platformCapabilities
{
int capabilities = 0;
switch ([self platformType])
{
case UIDevice5iPhone:
case UIDevice4SiPhone:
case UIDevice4iPhone: capabilities |= UIDeviceBuiltInGyroscope | UIDeviceBuiltInFrontCamera | UIDeviceBuiltInLEDFlash;
case UIDevice3GSiPhone: capabilities |= UIDeviceBuiltInCompass;
case UIDevice3GiPhone: capabilities |= UIDeviceSupportsGPS;
case UIDeviceUnknowniPhone:
case UIDevice1GiPhone:
{
capabilities |= UIDeviceBuiltInSpeaker | UIDeviceBuiltInCamera | UIDeviceBuiltInMicrophone | UIDeviceSupportsExternalMicrophone | UIDeviceSupportsTelephony | UIDeviceSupportsVibration;
return capabilities;
}
case UIDevice1GiPod: return 0;
case UIDevice2GiPod: return UIDeviceBuiltInSpeaker | UIDeviceBuiltInMicrophone | UIDeviceSupportsExternalMicrophone;
case UIDeviceUnknowniPod: return 0;
default: return 0;
}
}
@end