Skip to content

Instantly share code, notes, and snippets.

@acalism
Last active November 9, 2017 11:29
Show Gist options
  • Select an option

  • Save acalism/70e8e6d5c00a5cfc409c072747cc37ef to your computer and use it in GitHub Desktop.

Select an option

Save acalism/70e8e6d5c00a5cfc409c072747cc37ef to your computer and use it in GitHub Desktop.
// 一些设备通用消息 //
struct DeviceInfo {
//获取设备名称 例如:elan的手机
static let deviceName = UIDevice.current.name
//获取系统版本 例如:10.3
static let sysVersion = UIDevice.current.systemVersion
//获取设备的型号 例如:iPhone 7 Plus
static let deviceModel = UIDevice.current.modelName
/// 例如:iPhone9,2
static let model: String = {
var size = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: Int(size))
sysctlbyname("hw.machine", &machine, &size, nil, 0)
return String(cString: machine)
}()
/// 另一种获取model的方法(结果同上)
static let anotherModel: String = {
var systemInfo = utsname()
uname(&systemInfo)
let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8, value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}
return identifier
}
/// 判断是否在模拟器上运行
static let isSimulator: Bool = {
#if arch(i386) || arch(x86_64)
return true
#else
return false
#endif
}()
}
extension UIDevice {
var modelName: String {
// 数据来源:https://www.theiphonewiki.com/wiki/Models
switch DeviceInfo.anotherModel {
case "iPod5,1": return "iPod Touch 5"
case "iPod7,1": return "iPod Touch 6"
case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4"
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 "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": return "iPad 2"
case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad Mini"
case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad 3"
case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad 4"
case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air"
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 "iPad5,3", "iPad5,4": return "iPad Air 2"
case "iPad6,3", "iPad6,4": return "iPad Pro (9.7-inch)"
case "iPad6,7", "iPad6,8": return "iPad Pro (12.9-inch)"
case "iPad6,11", "iPad6,12": return "iPad 5"
case "iPad7,1", "iPad7,2": return "iPad Pro 2 (12.9-inch)"
case "iPad7,3", "iPad7,4": return "iPad Pro (10.5-inch)"
case "AppleTV2,1": return "Apple TV 2"
case "AppleTV3,1", "AppleTV3,2": return "Apple TV 3"
case "AppleTV5,3": return "Apple TV 4"
case "AppleTV6,2": return "Apple TV 4K"
case "Watch1,1": return "Apple Watch 1 (38mm)"
case "Watch1,2": return "Apple Watch 1 (42mm)"
case "Watch2,6": return "Apple Watch Series 1 (38mm)"
case "Watch2,7": return "Apple Watch Series 1 (42mm)"
case "Watch2,3": return "Apple Watch Series 2 (38mm)"
case "Watch2,4": return "Apple Watch Series 2 (42mm)"
case "Watch3,1", "Watch3,3": return "Apple Watch Series 3 (38mm)"
case "Watch3,2", "Watch3,4": return "Apple Watch Series 3 (42mm)"
case "i386", "x86_64": return "Simulator"
default: return identifier
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment