如何使用iPhone SDK确定设备类型(iPhone、iPod Touch)?
在开发iOS应用程序时,有时我们需要知道安装应用程序的设备,并根据使用的设备提供自定义功能。例如,我们想在iPhone X上提供一些功能,但在iPhone 7上不提供。在本文中,我们将学习如何使用iOS应用程序查找正在使用的iOS设备。
让我们来看一些实现预期结果所需的一些术语:
utsname − 这是iOS的Darwin模块中的一个结构。
uname − uname是一个函数,它以utsname作为输入,并返回Int32作为输出。
如果我们只需要查找型号或名称,那么在iOS SDK上查找正在使用的设备是一项简单的任务,我们可以使用以下任何代码,它将返回一个字符串。
- UIDevice.current.localizedModel
- UIDevice.current.model
- UIDevice.current.name
但是上述代码不能精确地显示正在使用的设备,它只能告诉我们正在使用iPhone。要获得正在使用的确切设备,我们必须经历一些步骤。
在Objective-C中,我们可以这样做:
NSString* deviceName() { struct utsname systemInfo; uname(&systemInfo); return [NSString stringWithCString:systemInfo.machine, encoding:NSUTF8StringEncoding]; }
Mirror − 任何类型实例的子结构和显示样式的表示。
在Swift中,我们将使用上述所有术语来获取设备编号作为输出。
func getDevice() -> 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 { identifier } identifier + String(UnicodeScalar(UInt8(value))) } return identifier }
此函数提供型号代码,但并非设备的精确名称。
我们将必须将此“identifier”变量与多个值进行比较,以根据需要获取型号名称。
以下是将此代码在iPhone 7 Plus模拟器上运行的结果。
一些苹果设备的型号代码及其对应的名称:
iPod4,1 | iPod Touch 4G |
iPod5,1 | iPod Touch 5G |
iPod7,1 | iPod Touch 6G |
iPhone3,1 , iPhone3,2 , iPhone3,3 | iPhone 4 |
iPhone 4 | iPhone 4s |
iPhone7,2 | iPhone 6 |
iPhone7,1 | iPhone 6 Plus |
iPhone8,1 | iPhone 6s |
iPhone8,2 | iPhone 6s Plus |
iPhone8,4 | iPhone SE |
iPhone9,1 , iPhone9,3 | iPhone 7 |
iPhone9,2 , iPhone 9,4 | iPhone 7 Plus |
iPad2,1 , iPad2,2 , iPad2,3 , iPad2,4 | iPad 2 |
iPad3,1 , iPad3,2 , iPad3,3 | iPad 3 |
iPad3,4 , iPad3,5 , iPad3,6 | iPad 4 |
iPad4,1 , iPad4,2 , iPad4,3 | iPad Air |
iPad5,3 , iPad5,4 | iPad Air 2 |
iPad2,5 , iPad2,6 , iPad2,7 | iPad Mini |
iPad4,4 , iPad4,5 , iPad4,6 | iPad Mini 2 |
iPad4,7 , iPad4,8 , iPad4,9 | iPad Mini 3 |
iPad5,1 , iPad5,2 | iPad Mini 4 |
iPad6,3 , iPad6,4 | iPad Pro (9.7英寸) |
iPad6,7 , iPad6,8 | iPad Pro (12.9英寸) |
广告