Skip to content

Instantly share code, notes, and snippets.

@hujunfeng
Last active January 9, 2019 04:07
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save hujunfeng/202dd9428dde362227946b9ba732d255 to your computer and use it in GitHub Desktop.
A Swift struct to read the model names for iOS devices.
import Darwin
/// A struct for reading device model names for iOS devices.
public struct Hardware {
public let machine: String
public init() {
machine = Hardware.getSystemInformation("hw.machine")
}
static func getSystemInformation(_ name: String) -> String {
var size: Int = 0
sysctlbyname(name, nil, &size, nil, 0)
var info = [CChar](repeating: 0, count: size)
sysctlbyname(name, &info, &size, nil, 0)
return String(cString: info)
}
public var model: String {
switch machine {
// iPhone
case "iPhone1,1": return "iPhone"
case "iPhone1,2": return "iPhone 3G"
case "iPhone2,1": return "iPhone 3GS"
case "iPhone3,1": return "iPhone 4 (GSM)"
case "iPhone3,3": return "iPhone 4 (CDMA)"
case "iPhone4,1": return "iPhone 4S"
case "iPhone5,1": return "iPhone 5"
case "iPhone5,2": return "iPhone 5"
case "iPhone5,3": return "iPhone 5c"
case "iPhone5,4": return "iPhone 5c"
case "iPhone6,1": return "iPhone 5s"
case "iPhone6,2": return "iPhone 5s"
case "iPhone7,1": return "iPhone 6 Plus"
case "iPhone7,2": return "iPhone 6"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
case "iPhone8,4": return "iPhone SE"
case "iPhone9,1": return "iPhone 7"
case "iPhone9,2": return "iPhone 7 Plus"
case "iPhone9,3": return "iPhone 7"
case "iPhone9,4": return "iPhone 7 Plus"
case "iPhone10,1": return "iPhone 8"
case "iPhone10,2": return "iPhone 8 Plus"
case "iPhone10,3": return "iPhone X"
case "iPhone10,4": return "iPhone 8"
case "iPhone10,5": return "iPhone 8 Plus"
case "iPhone10,6": return "iPhone X"
case "iPhone11,2": return "iPhone XS"
case "iPhone11,4": return "iPhone XS Max China"
case "iPhone11,6": return "iPhone XS Max"
case "iPhone11,8": return "iPhone XR"
// iPod touch
case "iPod1,1": return "iPod touch"
case "iPod2,1": return "iPod touch (2nd gen)"
case "iPod3,1": return "iPod touch (3rd gen)"
case "iPod4,1": return "iPod touch (4th gen)"
case "iPod5,1": return "iPod touch (5th gen)"
case "iPod7,1": return "iPod touch (6th gen)"
// iPad
case "iPad1,1": return "iPad"
case "iPad2,1": return "iPad 2 (Wi-Fi)"
case "iPad2,2": return "iPad 2 (GSM)"
case "iPad2,3": return "iPad 2 (CDMA)"
case "iPad2,4": return "iPad 2 (Wi-Fi, Rev)"
case "iPad2,5": return "iPad mini (Wi-Fi)"
case "iPad2,6": return "iPad mini (GSM)"
case "iPad2,7": return "iPad mini (CDMA)"
case "iPad3,1": return "iPad (3rd gen, Wi-Fi)"
case "iPad3,2": return "iPad (3rd gen, CDMA)"
case "iPad3,3": return "iPad (3rd gen, GSM)"
case "iPad3,4": return "iPad (4th gen, Wi-Fi)"
case "iPad3,5": return "iPad (4th gen, GSM)"
case "iPad3,6": return "iPad (4th gen, CDMA)"
case "iPad4,1": return "iPad Air (Wi-Fi)"
case "iPad4,2": return "iPad Air (Cellular)"
case "iPad4,3": return "iPad Air (Rev)"
case "iPad4,4": return "iPad mini 2 (Wi-Fi)"
case "iPad4,5": return "iPad mini 2 (Cellular)"
case "iPad4,6": return "iPad mini 2 (Rev)"
case "iPad4,7": return "iPad mini 3 (Wi-Fi)"
case "iPad4,8": return "iPad mini 3 (Cellular)"
case "iPad4,9": return "iPad mini 3 (Cellular)"
case "iPad5,1": return "iPad mini 4 (Wi-Fi)"
case "iPad5,2": return "iPad mini 4 (Cellular)"
case "iPad5,3": return "iPad Air 2 (Wi-Fi)"
case "iPad5,4": return "iPad Air 2 (Cellular)"
case "iPad6,3": return "iPad Pro (9.7-inch, Wi-Fi)"
case "iPad6,4": return "iPad Pro (9.7-inch, Cellular)"
case "iPad6,7": return "iPad Pro (12.9-inch, Wi-Fi)"
case "iPad6,8": return "iPad Pro (12.9-inch, Cellular)"
case "iPad6,11": return "iPad (5th gen, Wi-Fi)"
case "iPad6,12": return "iPad (5th gen, Cellular)"
case "iPad7,1": return "iPad Pro (12.9-inch, 2nd, Wi-Fi)"
case "iPad7,2": return "iPad Pro (12.9-inch, 2nd, Cellular)"
case "iPad7,3": return "iPad Pro (10.5-inch, Wi-Fi)"
case "iPad7,4": return "iPad Pro (10.5-inch, Cellular)"
case "iPad7,5": return "iPad (6th gen, Wi-Fi)"
case "iPad7,6": return "iPad (6th gen, Cellular)"
case "iPad8,1": return "iPad Pro (3rd gen, 11 inch, Wi-Fi)"
case "iPad8,2": return "iPad Pro (3rd gen, 11 inch, 1TB, Wi-Fi)"
case "iPad8,3": return "iPad Pro (3rd gen, 11 inch, Wi-Fi+Cellular)"
case "iPad8,4": return "iPad Pro (3rd gen, 11 inch, 1TB, Wi-Fi+Cellular)"
case "iPad8,5": return "iPad Pro (3rd gen, 12.9 inch, Wi-Fi)"
case "iPad8,6": return "iPad Pro (3rd gen, 12.9 inch, 1TB, Wi-Fi)"
case "iPad8,7": return "iPad Pro (3rd gen, 12.9 inch, Wi-Fi+Cellular)"
case "iPad8,8": return "iPad Pro (3rd gen, 12.9 inch, 1TB, Wi-Fi+Cellular)"
// Simulator
case "i386", "x86_64": return "Simulator"
default: return "Unknown Hardware \(machine)"
}
}
}
let hw = Hardware()
print(hw.machine)
print(hw.model)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment