DBDeviceInfoProvider.m 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // The MIT License
  2. //
  3. // Copyright (c) 2016 Dariusz Bukowski
  4. //
  5. // Permission is hereby granted, free of charge, to any person obtaining a copy
  6. // of this software and associated documentation files (the "Software"), to deal
  7. // in the Software without restriction, including without limitation the rights
  8. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. // copies of the Software, and to permit persons to whom the Software is
  10. // furnished to do so, subject to the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be included in
  13. // all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21. // THE SOFTWARE.
  22. #import "DBDeviceInfoProvider.h"
  23. #import <sys/utsname.h>
  24. @implementation DBDeviceInfoProvider
  25. // Based on the list provided in https://github.com/dennisweissmann/DeviceKit
  26. // DeviceKit is a value-type replacement of UIDevice created by Dennis Weissmann.
  27. - (NSString *)deviceModel {
  28. struct utsname systemInfo;
  29. uname(&systemInfo);
  30. NSString *deviceModelCode = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
  31. if ([deviceModelCode isEqualToString:@"iPod5,1"]) {
  32. return @"iPod Touch 5";
  33. } else if ([deviceModelCode isEqualToString:@"iPod7,1"]) {
  34. return @"iPod Touch 6";
  35. } else if ([deviceModelCode isEqualToString:@"iPhone3,1"] || [deviceModelCode isEqualToString:@"iPhone3,2"] || [deviceModelCode isEqualToString:@"iPhone3,3"]) {
  36. return @"iPhone 4";
  37. } else if ([deviceModelCode isEqualToString:@"iPhone4,1"]) {
  38. return @"iPhone 4s";
  39. } else if ([deviceModelCode isEqualToString:@"iPhone5,1"] || [deviceModelCode isEqualToString:@"iPhone5,2"]) {
  40. return @"iPhone 5";
  41. } else if ([deviceModelCode isEqualToString:@"iPhone5,3"] || [deviceModelCode isEqualToString:@"iPhone5,4"]) {
  42. return @"iPhone 5c";
  43. } else if ([deviceModelCode isEqualToString:@"iPhone6,1"] || [deviceModelCode isEqualToString:@"iPhone6,2"]) {
  44. return @"iPhone 5s";
  45. } else if ([deviceModelCode isEqualToString:@"iPhone7,2"]) {
  46. return @"iPhone 6";
  47. } else if ([deviceModelCode isEqualToString:@"iPhone7,1"]) {
  48. return @"iPhone 6 Plus";
  49. } else if ([deviceModelCode isEqualToString:@"iPhone8,1"]) {
  50. return @"iPhone 6s";
  51. } else if ([deviceModelCode isEqualToString:@"iPhone8,2"]) {
  52. return @"iPhone 6s Plus";
  53. } else if ([deviceModelCode isEqualToString:@"iPhone9,1"] || [deviceModelCode isEqualToString:@"iPhone9,3"]) {
  54. return @"iPhone 7";
  55. } else if ([deviceModelCode isEqualToString:@"iPhone9,2"] || [deviceModelCode isEqualToString:@"iPhone9,4"]) {
  56. return @"iPhone 7 Plus";
  57. } else if ([deviceModelCode isEqualToString:@"iPhone8,4"]) {
  58. return @"iPhone SE";
  59. } else if ([deviceModelCode isEqualToString:@"iPhone10,1"] || [deviceModelCode isEqualToString:@"iPhone10,4"]) {
  60. return @"iPhone 8";
  61. } else if ([deviceModelCode isEqualToString:@"iPhone10,2"] || [deviceModelCode isEqualToString:@"iPhone10,5"]) {
  62. return @"iPhone 8 Plus";
  63. } else if ([deviceModelCode isEqualToString:@"iPhone10,3"] || [deviceModelCode isEqualToString:@"iPhone10,6"]) {
  64. return @"iPhone X";
  65. } else if ([deviceModelCode isEqualToString:@"iPhone11,2"]) {
  66. return @"iPhone XS";
  67. } else if ([deviceModelCode isEqualToString:@"iPhone11,4"] || [deviceModelCode isEqualToString:@"iPhone11,6"]) {
  68. return @"iPhone XS Max";
  69. } else if ([deviceModelCode isEqualToString:@"iPhone11,8"]) {
  70. return @"iPhone XR";
  71. } else if ([deviceModelCode isEqualToString:@"iPad2,1"] || [deviceModelCode isEqualToString:@"iPad2,2"] || [deviceModelCode isEqualToString:@"iPad2,3"] || [deviceModelCode isEqualToString:@"iPad2,4"]) {
  72. return @"iPad 2";
  73. } else if ([deviceModelCode isEqualToString:@"iPad3,1"] || [deviceModelCode isEqualToString:@"iPad3,2"] || [deviceModelCode isEqualToString:@"iPad3,3"]) {
  74. return @"iPad 3";
  75. } else if ([deviceModelCode isEqualToString:@"iPad3,4"] || [deviceModelCode isEqualToString:@"iPad3,5"] || [deviceModelCode isEqualToString:@"iPad3,6"]) {
  76. return @"iPad 4";
  77. } else if ([deviceModelCode isEqualToString:@"iPad4,1"] || [deviceModelCode isEqualToString:@"iPad4,2"] || [deviceModelCode isEqualToString:@"iPad4,3"]) {
  78. return @"iPad Air";
  79. } else if ([deviceModelCode isEqualToString:@"iPad5,3"] || [deviceModelCode isEqualToString:@"iPad5,4"]) {
  80. return @"iPad Air 2";
  81. } else if ([deviceModelCode isEqualToString:@"iPad6,11"] || [deviceModelCode isEqualToString:@"iPad6,12"] || [deviceModelCode isEqualToString:@"iPad3,3"]) {
  82. return @"iPad 5";
  83. } else if ([deviceModelCode isEqualToString:@"iPad7,5"] || [deviceModelCode isEqualToString:@"iPad7,6"] || [deviceModelCode isEqualToString:@"iPad3,6"]) {
  84. return @"iPad 6";
  85. } else if ([deviceModelCode isEqualToString:@"iPad2,5"] || [deviceModelCode isEqualToString:@"iPad2,6"] || [deviceModelCode isEqualToString:@"iPad2,7"]) {
  86. return @"iPad Mini";
  87. } else if ([deviceModelCode isEqualToString:@"iPad4,4"] || [deviceModelCode isEqualToString:@"iPad4,5"] || [deviceModelCode isEqualToString:@"iPad4,6"]) {
  88. return @"iPad Mini 2";
  89. } else if ([deviceModelCode isEqualToString:@"iPad4,7"] || [deviceModelCode isEqualToString:@"iPad4,8"] || [deviceModelCode isEqualToString:@"iPad4,9"]) {
  90. return @"iPad Mini 3";
  91. } else if ([deviceModelCode isEqualToString:@"iPad5,1"] || [deviceModelCode isEqualToString:@"iPad5,2"]) {
  92. return @"iPad Mini 4";
  93. } else if ([deviceModelCode isEqualToString:@"iPad6,3"] || [deviceModelCode isEqualToString:@"iPad6,4"]) {
  94. return @"iPad Pro (9.7-inch)";
  95. } else if ([deviceModelCode isEqualToString:@"iPad6,7"] || [deviceModelCode isEqualToString:@"iPad6,8"]) {
  96. return @"iPad Pro (12.9-inch)";
  97. } else if ([deviceModelCode isEqualToString:@"iPad7,1"] || [deviceModelCode isEqualToString:@"iPad7,2"]) {
  98. return @"iPad Pro (12.9-inch) 2";
  99. } else if ([deviceModelCode isEqualToString:@"iPad7,3"] || [deviceModelCode isEqualToString:@"iPad7,4"]) {
  100. return @"iPad Pro (10.5-inch)";
  101. } else if ([deviceModelCode isEqualToString:@"iPad8,1"] || [deviceModelCode isEqualToString:@"iPad8,2"] || [deviceModelCode isEqualToString:@"iPad8,3"] || [deviceModelCode isEqualToString:@"iPad8,4"]) {
  102. return @"iPad Pro (11-inch)";
  103. } else if ([deviceModelCode isEqualToString:@"iPad8,5"] || [deviceModelCode isEqualToString:@"iPad8,6"] || [deviceModelCode isEqualToString:@"iPad8,7"] || [deviceModelCode isEqualToString:@"iPad8,8"]) {
  104. return @"iPad Pro (12.9-inch) 3";
  105. } else if ([deviceModelCode isEqualToString:@"i386"] || [deviceModelCode isEqualToString:@"x86_64"]) {
  106. return @"Simulator";
  107. } else {
  108. return [[UIDevice currentDevice] model];
  109. }
  110. }
  111. - (NSString *)systemVersion {
  112. UIDevice *device = [UIDevice currentDevice];
  113. return [NSString stringWithFormat:@"%@ %@", [device systemName], [device systemVersion]];
  114. }
  115. - (NSString *)deviceInfoString {
  116. return [NSString stringWithFormat:@"%@, %@", [self deviceModel], [self systemVersion]];
  117. }
  118. @end