Last active
January 9, 2019 04:07
-
-
Save hujunfeng/202dd9428dde362227946b9ba732d255 to your computer and use it in GitHub Desktop.
A Swift struct to read the model names for iOS devices.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)" | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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