UIDeviceUtil.m 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. //
  2. // DeviceName.m
  3. //
  4. // Created by Inder Kumar Rathore on 19/01/13.
  5. // Copyright (c) 2013 Rathore. All rights reserved.
  6. //
  7. #import "UIDeviceUtil.h"
  8. #include <sys/types.h>
  9. #include <sys/sysctl.h>
  10. @implementation UIDeviceUtil
  11. + (NSString*)hardwareString {
  12. int name[] = {CTL_HW,HW_MACHINE};
  13. size_t size = 100;
  14. sysctl(name, 2, NULL, &size, NULL, 0); // getting size of answer
  15. char *hw_machine = malloc(size);
  16. sysctl(name, 2, hw_machine, &size, NULL, 0);
  17. NSString *hardware = [NSString stringWithUTF8String:hw_machine];
  18. free(hw_machine);
  19. return hardware;
  20. }
  21. /* This is another way of gtting the system info
  22. * For this you have to #import <sys/utsname.h>
  23. */
  24. /*
  25. NSString* machineName
  26. {
  27. struct utsname systemInfo;
  28. uname(&systemInfo);
  29. return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  30. }
  31. */
  32. + (Hardware)hardware {
  33. NSString *hardware = [self hardwareString];
  34. if ([hardware isEqualToString:@"iPhone1,1"]) return IPHONE_2G;
  35. if ([hardware isEqualToString:@"iPhone1,2"]) return IPHONE_3G;
  36. if ([hardware isEqualToString:@"iPhone2,1"]) return IPHONE_3GS;
  37. if ([hardware isEqualToString:@"iPhone3,1"]) return IPHONE_4;
  38. if ([hardware isEqualToString:@"iPhone3,2"]) return IPHONE_4;
  39. if ([hardware isEqualToString:@"iPhone3,3"]) return IPHONE_4_CDMA;
  40. if ([hardware isEqualToString:@"iPhone4,1"]) return IPHONE_4S;
  41. if ([hardware isEqualToString:@"iPhone5,1"]) return IPHONE_5;
  42. if ([hardware isEqualToString:@"iPhone5,2"]) return IPHONE_5_CDMA_GSM;
  43. if ([hardware isEqualToString:@"iPhone5,3"]) return IPHONE_5C;
  44. if ([hardware isEqualToString:@"iPhone5,4"]) return IPHONE_5C_CDMA_GSM;
  45. if ([hardware isEqualToString:@"iPhone6,1"]) return IPHONE_5S;
  46. if ([hardware isEqualToString:@"iPhone6,2"]) return IPHONE_5S_CDMA_GSM;
  47. if ([hardware isEqualToString:@"iPhone7,1"]) return IPHONE_6_PLUS;
  48. if ([hardware isEqualToString:@"iPhone7,2"]) return IPHONE_6;
  49. if ([hardware isEqualToString:@"iPod1,1"]) return IPOD_TOUCH_1G;
  50. if ([hardware isEqualToString:@"iPod2,1"]) return IPOD_TOUCH_2G;
  51. if ([hardware isEqualToString:@"iPod3,1"]) return IPOD_TOUCH_3G;
  52. if ([hardware isEqualToString:@"iPod4,1"]) return IPOD_TOUCH_4G;
  53. if ([hardware isEqualToString:@"iPod5,1"]) return IPOD_TOUCH_5G;
  54. if ([hardware isEqualToString:@"iPad1,1"]) return IPAD;
  55. if ([hardware isEqualToString:@"iPad1,2"]) return IPAD_3G;
  56. if ([hardware isEqualToString:@"iPad2,1"]) return IPAD_2_WIFI;
  57. if ([hardware isEqualToString:@"iPad2,2"]) return IPAD_2;
  58. if ([hardware isEqualToString:@"iPad2,3"]) return IPAD_2_CDMA;
  59. if ([hardware isEqualToString:@"iPad2,4"]) return IPAD_2;
  60. if ([hardware isEqualToString:@"iPad2,5"]) return IPAD_MINI_WIFI;
  61. if ([hardware isEqualToString:@"iPad2,6"]) return IPAD_MINI;
  62. if ([hardware isEqualToString:@"iPad2,7"]) return IPAD_MINI_WIFI_CDMA;
  63. if ([hardware isEqualToString:@"iPad3,1"]) return IPAD_3_WIFI;
  64. if ([hardware isEqualToString:@"iPad3,2"]) return IPAD_3_WIFI_CDMA;
  65. if ([hardware isEqualToString:@"iPad3,3"]) return IPAD_3;
  66. if ([hardware isEqualToString:@"iPad3,4"]) return IPAD_4_WIFI;
  67. if ([hardware isEqualToString:@"iPad3,5"]) return IPAD_4;
  68. if ([hardware isEqualToString:@"iPad3,6"]) return IPAD_4_GSM_CDMA;
  69. if ([hardware isEqualToString:@"iPad4,1"]) return IPAD_AIR_WIFI;
  70. if ([hardware isEqualToString:@"iPad4,2"]) return IPAD_AIR_WIFI_GSM;
  71. if ([hardware isEqualToString:@"iPad4,3"]) return IPAD_AIR_WIFI_CDMA;
  72. if ([hardware isEqualToString:@"iPad4,4"]) return IPAD_MINI_RETINA_WIFI;
  73. if ([hardware isEqualToString:@"iPad4,5"]) return IPAD_MINI_RETINA_WIFI_CDMA;
  74. if ([hardware isEqualToString:@"iPad4,6"]) return IPAD_MINI_RETINA_WIFI_CELLULAR_CN;
  75. if ([hardware isEqualToString:@"iPad4,7"]) return IPAD_MINI_3_WIFI;
  76. if ([hardware isEqualToString:@"iPad4,8"]) return IPAD_MINI_3_WIFI_CELLULAR;
  77. if ([hardware isEqualToString:@"iPad5,3"]) return IPAD_AIR_2_WIFI;
  78. if ([hardware isEqualToString:@"iPad5,4"]) return IPAD_AIR_2_WIFI_CELLULAR;
  79. if ([hardware isEqualToString:@"i386"]) return SIMULATOR;
  80. if ([hardware isEqualToString:@"x86_64"]) return SIMULATOR;
  81. if ([hardware hasPrefix:@"iPhone"]) return SIMULATOR;
  82. if ([hardware hasPrefix:@"iPod"]) return SIMULATOR;
  83. if ([hardware hasPrefix:@"iPad"]) return SIMULATOR;
  84. //log message that your device is not present in the list
  85. [self logMessage:hardware];
  86. return NOT_AVAILABLE;
  87. }
  88. + (NSString*)hardwareDescription {
  89. NSString *hardware = [self hardwareString];
  90. if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
  91. if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
  92. if ([hardware isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
  93. if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
  94. if ([hardware isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev. A)";
  95. if ([hardware isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
  96. if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
  97. if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
  98. if ([hardware isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)";
  99. if ([hardware isEqualToString:@"iPhone5,3"]) return @"iPhone 5C (GSM)";
  100. if ([hardware isEqualToString:@"iPhone5,4"]) return @"iPhone 5C (Global)";
  101. if ([hardware isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
  102. if ([hardware isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)";
  103. if ([hardware isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
  104. if ([hardware isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
  105. if ([hardware isEqualToString:@"iPod1,1"]) return @"iPod Touch (1 Gen)";
  106. if ([hardware isEqualToString:@"iPod2,1"]) return @"iPod Touch (2 Gen)";
  107. if ([hardware isEqualToString:@"iPod3,1"]) return @"iPod Touch (3 Gen)";
  108. if ([hardware isEqualToString:@"iPod4,1"]) return @"iPod Touch (4 Gen)";
  109. if ([hardware isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)";
  110. if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad (WiFi)";
  111. if ([hardware isEqualToString:@"iPad1,2"]) return @"iPad 3G";
  112. if ([hardware isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
  113. if ([hardware isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
  114. if ([hardware isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
  115. if ([hardware isEqualToString:@"iPad2,4"]) return @"iPad 2 (WiFi Rev. A)";
  116. if ([hardware isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
  117. if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)";
  118. if ([hardware isEqualToString:@"iPad2,7"]) return @"iPad Mini (CDMA)";
  119. if ([hardware isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
  120. if ([hardware isEqualToString:@"iPad3,2"]) return @"iPad 3 (CDMA)";
  121. if ([hardware isEqualToString:@"iPad3,3"]) return @"iPad 3 (Global)";
  122. if ([hardware isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
  123. if ([hardware isEqualToString:@"iPad3,5"]) return @"iPad 4 (CDMA)";
  124. if ([hardware isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)";
  125. if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)";
  126. if ([hardware isEqualToString:@"iPad4,2"]) return @"iPad Air (WiFi+GSM)";
  127. if ([hardware isEqualToString:@"iPad4,3"]) return @"iPad Air (WiFi+CDMA)";
  128. if ([hardware isEqualToString:@"iPad4,4"]) return @"iPad Mini Retina (WiFi)";
  129. if ([hardware isEqualToString:@"iPad4,5"]) return @"iPad Mini Retina (WiFi+CDMA)";
  130. if ([hardware isEqualToString:@"iPad4,6"]) return @"iPad Mini Retina (Wi-Fi + Cellular CN)";
  131. if ([hardware isEqualToString:@"iPad4,7"]) return @"iPad Mini 3 (Wi-Fi)";
  132. if ([hardware isEqualToString:@"iPad4,8"]) return @"iPad Mini 3 (Wi-Fi + Cellular)";
  133. if ([hardware isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (Wi-Fi)";
  134. if ([hardware isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Wi-Fi + Cellular)";
  135. if ([hardware isEqualToString:@"i386"]) return @"Simulator";
  136. if ([hardware isEqualToString:@"x86_64"]) return @"Simulator";
  137. if ([hardware hasPrefix:@"iPhone"]) return @"iPhone";
  138. if ([hardware hasPrefix:@"iPod"]) return @"iPod";
  139. if ([hardware hasPrefix:@"iPad"]) return @"iPad";
  140. //log message that your device is not present in the list
  141. [self logMessage:hardware];
  142. return nil;
  143. }
  144. + (NSString*)hardwareSimpleDescription {
  145. NSString *hardware = [self hardwareString];
  146. if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
  147. if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
  148. if ([hardware isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
  149. if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
  150. if ([hardware isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
  151. if ([hardware isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
  152. if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
  153. if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
  154. if ([hardware isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
  155. if ([hardware isEqualToString:@"iPhone5,3"]) return @"iPhone 5C";
  156. if ([hardware isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
  157. if ([hardware isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
  158. if ([hardware isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
  159. if ([hardware isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
  160. if ([hardware isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
  161. if ([hardware isEqualToString:@"iPod1,1"]) return @"iPod Touch (1 Gen)";
  162. if ([hardware isEqualToString:@"iPod2,1"]) return @"iPod Touch (2 Gen)";
  163. if ([hardware isEqualToString:@"iPod3,1"]) return @"iPod Touch (3 Gen)";
  164. if ([hardware isEqualToString:@"iPod4,1"]) return @"iPod Touch (4 Gen)";
  165. if ([hardware isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)";
  166. if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad";
  167. if ([hardware isEqualToString:@"iPad1,2"]) return @"iPad";
  168. if ([hardware isEqualToString:@"iPad2,1"]) return @"iPad 2";
  169. if ([hardware isEqualToString:@"iPad2,2"]) return @"iPad 2";
  170. if ([hardware isEqualToString:@"iPad2,3"]) return @"iPad 2";
  171. if ([hardware isEqualToString:@"iPad2,4"]) return @"iPad 2";
  172. if ([hardware isEqualToString:@"iPad2,5"]) return @"iPad Mini";
  173. if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini";
  174. if ([hardware isEqualToString:@"iPad2,7"]) return @"iPad Mini";
  175. if ([hardware isEqualToString:@"iPad3,1"]) return @"iPad 3";
  176. if ([hardware isEqualToString:@"iPad3,2"]) return @"iPad 3";
  177. if ([hardware isEqualToString:@"iPad3,3"]) return @"iPad 3";
  178. if ([hardware isEqualToString:@"iPad3,4"]) return @"iPad 4";
  179. if ([hardware isEqualToString:@"iPad3,5"]) return @"iPad 4";
  180. if ([hardware isEqualToString:@"iPad3,6"]) return @"iPad 4";
  181. if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air";
  182. if ([hardware isEqualToString:@"iPad4,2"]) return @"iPad Air";
  183. if ([hardware isEqualToString:@"iPad4,3"]) return @"iPad Air";
  184. if ([hardware isEqualToString:@"iPad4,4"]) return @"iPad Mini Retina";
  185. if ([hardware isEqualToString:@"iPad4,5"]) return @"iPad Mini Retina";
  186. if ([hardware isEqualToString:@"iPad4,6"]) return @"iPad Mini Retina CN";
  187. if ([hardware isEqualToString:@"iPad4,7"]) return @"iPad Mini 3";
  188. if ([hardware isEqualToString:@"iPad4,8"]) return @"iPad Mini 3";
  189. if ([hardware isEqualToString:@"iPad5,3"]) return @"iPad Air 2";
  190. if ([hardware isEqualToString:@"iPad5,4"]) return @"iPad Air 2";
  191. if ([hardware isEqualToString:@"i386"]) return @"Simulator";
  192. if ([hardware isEqualToString:@"x86_64"]) return @"Simulator";
  193. if ([hardware hasPrefix:@"iPhone"]) return @"iPhone";
  194. if ([hardware hasPrefix:@"iPod"]) return @"iPod";
  195. if ([hardware hasPrefix:@"iPad"]) return @"iPad";
  196. //log message that your device is not present in the list
  197. [self logMessage:hardware];
  198. return nil;
  199. }
  200. + (float)hardwareNumber:(Hardware)hardware {
  201. switch (hardware) {
  202. case IPHONE_2G: return 1.1f;
  203. case IPHONE_3G: return 1.2f;
  204. case IPHONE_3GS: return 2.1f;
  205. case IPHONE_4: return 3.1f;
  206. case IPHONE_4_CDMA: return 3.3f;
  207. case IPHONE_4S: return 4.1f;
  208. case IPHONE_5: return 5.1f;
  209. case IPHONE_5_CDMA_GSM: return 5.2f;
  210. case IPHONE_5C: return 5.3f;
  211. case IPHONE_5C_CDMA_GSM: return 5.4f;
  212. case IPHONE_5S: return 6.1f;
  213. case IPHONE_5S_CDMA_GSM: return 6.2f;
  214. case IPHONE_6_PLUS: return 7.1f;
  215. case IPHONE_6: return 7.2f;
  216. case IPOD_TOUCH_1G: return 1.1f;
  217. case IPOD_TOUCH_2G: return 2.1f;
  218. case IPOD_TOUCH_3G: return 3.1f;
  219. case IPOD_TOUCH_4G: return 4.1f;
  220. case IPOD_TOUCH_5G: return 5.1f;
  221. case IPAD: return 1.1f;
  222. case IPAD_3G: return 1.2f;
  223. case IPAD_2_WIFI: return 2.1f;
  224. case IPAD_2: return 2.2f;
  225. case IPAD_2_CDMA: return 2.3f;
  226. case IPAD_MINI_WIFI: return 2.5f;
  227. case IPAD_MINI: return 2.6f;
  228. case IPAD_MINI_WIFI_CDMA: return 2.7f;
  229. case IPAD_3_WIFI: return 3.1f;
  230. case IPAD_3_WIFI_CDMA: return 3.2f;
  231. case IPAD_3: return 3.3f;
  232. case IPAD_4_WIFI: return 3.4f;
  233. case IPAD_4: return 3.5f;
  234. case IPAD_4_GSM_CDMA: return 3.6f;
  235. case IPAD_AIR_WIFI: return 4.1f;
  236. case IPAD_AIR_WIFI_GSM: return 4.2f;
  237. case IPAD_AIR_WIFI_CDMA: return 4.3f;
  238. case IPAD_AIR_2_WIFI: return 5.3f;
  239. case IPAD_AIR_2_WIFI_CELLULAR: return 5.4f;
  240. case IPAD_MINI_RETINA_WIFI: return 4.4f;
  241. case IPAD_MINI_RETINA_WIFI_CDMA: return 4.5f;
  242. case IPAD_MINI_3_WIFI: return 4.6f;
  243. case IPAD_MINI_3_WIFI_CELLULAR: return 4.7f;
  244. case IPAD_MINI_RETINA_WIFI_CELLULAR_CN: return 4.8f;
  245. case SIMULATOR: return 100.0f;
  246. case NOT_AVAILABLE: return 200.0f;
  247. }
  248. return 200.0f; //Device is not available
  249. }
  250. + (CGSize)backCameraStillImageResolutionInPixels {
  251. switch ([self hardware]) {
  252. case IPHONE_2G:
  253. case IPHONE_3G:
  254. return CGSizeMake(1600, 1200);
  255. break;
  256. case IPHONE_3GS:
  257. return CGSizeMake(2048, 1536);
  258. break;
  259. case IPHONE_4:
  260. case IPHONE_4_CDMA:
  261. case IPAD_3_WIFI:
  262. case IPAD_3_WIFI_CDMA:
  263. case IPAD_3:
  264. case IPAD_4_WIFI:
  265. case IPAD_4:
  266. case IPAD_4_GSM_CDMA:
  267. return CGSizeMake(2592, 1936);
  268. break;
  269. case IPHONE_4S:
  270. case IPHONE_5:
  271. case IPHONE_5_CDMA_GSM:
  272. case IPHONE_5C:
  273. case IPHONE_5C_CDMA_GSM:
  274. case IPHONE_6:
  275. case IPHONE_6_PLUS:
  276. return CGSizeMake(3264, 2448);
  277. break;
  278. case IPOD_TOUCH_4G:
  279. return CGSizeMake(960, 720);
  280. break;
  281. case IPOD_TOUCH_5G:
  282. return CGSizeMake(2440, 1605);
  283. break;
  284. case IPAD_2_WIFI:
  285. case IPAD_2:
  286. case IPAD_2_CDMA:
  287. return CGSizeMake(872, 720);
  288. break;
  289. case IPAD_MINI_WIFI:
  290. case IPAD_MINI:
  291. case IPAD_MINI_WIFI_CDMA:
  292. return CGSizeMake(1820, 1304);
  293. break;
  294. case IPAD_AIR_2_WIFI:
  295. case IPAD_AIR_2_WIFI_CELLULAR:
  296. return CGSizeMake (1536, 2048);
  297. break;
  298. default:
  299. NSLog(@"We have no resolution for your device's camera listed in this category. Please, make photo with back camera of your device, get its resolution in pixels (via Preview Cmd+I for example) and add a comment to this repository (https://github.com/InderKumarRathore/UIDeviceUtil) on GitHub.com in format Device = Hpx x Wpx.");
  300. NSLog(@"Your device is: %@", [self hardwareDescription]);
  301. break;
  302. }
  303. return CGSizeZero;
  304. }
  305. + (void)logMessage:(NSString *)hardware {
  306. NSLog(@"This is a device which is not listed in this category. Please visit https://github.com/InderKumarRathore/UIDeviceUtil and add a comment there.");
  307. NSLog(@"Your device hardware string is: %@", hardware);
  308. }
  309. @end