Last active
August 19, 2024 18:02
-
-
Save jonblatho/7f5e7a0206ebed1b3cbf5923bef70865 to your computer and use it in GitHub Desktop.
An easy way to get a pretty name for an iOS device model.
This file contains hidden or 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 UIKit | |
extension UIDevice { | |
/// A "pretty" device name for the machine identifier. | |
/// | |
/// Current for devices supporting iOS 9 and later and tvOS 9 and later, as of WWDC 2019. | |
var modelName: String { | |
var machineString = String() | |
var systemInfo = utsname() | |
uname(&systemInfo) | |
let machineMirror = Mirror(reflecting: systemInfo.machine) | |
machineString = machineMirror.children.reduce("") { identifier, element in | |
guard let value = element.value as? Int8 , value != 0 else { return identifier } | |
return identifier + String(UnicodeScalar(UInt8(value))) | |
} | |
switch machineString { | |
// iPod touch | |
case "iPod5,1": return "iPod Touch (5th generation)" | |
case "iPod7,1": return "iPod Touch (6th generation)" | |
case "iPod9,1": return "iPod Touch (7th generation)" | |
// iPhone | |
case "iPhone4,1": return "iPhone 4s" | |
case "iPhone5,1", "iPhone5,2": return "iPhone 5" | |
case "iPhone5,3", "iPhone5,4": return "iPhone 5c" | |
case "iPhone6,1", "iPhone6,2": return "iPhone 5s" | |
case "iPhone7,2": return "iPhone 6" | |
case "iPhone7,1": return "iPhone 6 Plus" | |
case "iPhone8,1": return "iPhone 6s" | |
case "iPhone8,2": return "iPhone 6s Plus" | |
case "iPhone8,4": return "iPhone SE" | |
case "iPhone9,1", "iPhone9,3": return "iPhone 7" | |
case "iPhone9,2", "iPhone9,4": return "iPhone 7 Plus" | |
case "iPhone10,1", "iPhone10,4": return "iPhone 8" | |
case "iPhone10,2", "iPhone10,5": return "iPhone 8 Plus" | |
case "iPhone10,3", "iPhone10,6": return "iPhone X" | |
case "iPhone11,8": return "iPhone XR" | |
case "iPhone11,2": return "iPhone XS" | |
case "iPhone11,4", "iPhone11,6": return "iPhone XS Max" | |
// iPad | |
case "iPad2,1","iPad2,2","iPad2,3","iPad2,4": return "iPad 2" | |
case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad (3rd generation)" | |
case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad (4th generation)" | |
case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air (2013)" | |
case "iPad5,3", "iPad5,4": return "iPad Air 2" | |
case "iPad6,11", "iPad6,12": return "iPad (5th generation)" | |
case "iPad7,5", "iPad7,6": return "iPad (6th generation)" | |
case "iPad11,3", "iPad11,4": return "iPad Air (2019)" | |
// iPad mini | |
case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad mini (2012)" | |
case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad mini 2" | |
case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad mini 3" | |
case "iPad5,1", "iPad5,2": return "iPad mini 4" | |
case "iPad11,1", "iPad11,2": return "iPad mini (2019)" | |
// iPad Pro | |
case "iPad6,3", "iPad6,4": return "iPad Pro (9.7-inch)" | |
case "iPad6,7", "iPad6,8": return "iPad Pro (12.9-inch 1G)" | |
case "iPad7,1", "iPad7,2": return "iPad Pro (12.9-inch 2G)" | |
case "iPad7,3", "iPad7,4": return "iPad Pro (10.5-inch)" | |
case "iPad8,1","iPad8,2","iPad8,3","iPad8,4": return "iPad Pro (11-inch)" | |
case "iPad8,5","iPad8,6","iPad8,7","iPad8,8": return "iPad Pro (12.9-inch 3G)" | |
// HomePod | |
case "AudioAccessory1,1": return "HomePod" | |
// Apple TV | |
case "AppleTV5,3": return "Apple TV (4th generation)" | |
case "AppleTV6,2": return "Apple TV 4K" | |
// Devices not covered above | |
default: return machineString | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is very useful. I have created a project that allows getting and returning all these models and visionOS and newer iOS devices. Please let me know what you think: http://github.com/kudit/Device