如何使用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,1iPod Touch 4G
iPod5,1iPod Touch 5G
iPod7,1iPod Touch 6G
iPhone3,1 , iPhone3,2 , iPhone3,3iPhone 4
iPhone 4iPhone 4s
iPhone7,2iPhone 6
iPhone7,1iPhone 6 Plus
iPhone8,1iPhone 6s
iPhone8,2iPhone 6s Plus
iPhone8,4iPhone SE
iPhone9,1 , iPhone9,3iPhone 7
iPhone9,2 , iPhone 9,4iPhone 7 Plus
iPad2,1 , iPad2,2 , iPad2,3 , iPad2,4iPad 2
iPad3,1 , iPad3,2 , iPad3,3iPad 3
iPad3,4 , iPad3,5 , iPad3,6iPad 4
iPad4,1 , iPad4,2 , iPad4,3iPad Air
iPad5,3 , iPad5,4iPad Air 2
iPad2,5 , iPad2,6 , iPad2,7iPad Mini
iPad4,4 , iPad4,5 , iPad4,6iPad Mini 2
iPad4,7 , iPad4,8 , iPad4,9iPad Mini 3
iPad5,1 , iPad5,2iPad Mini 4
iPad6,3 , iPad6,4iPad Pro (9.7英寸)
iPad6,7 , iPad6,8iPad Pro (12.9英寸)

更新于:2020年6月27日

浏览量:374

启动你的职业生涯

完成课程获得认证

开始学习
广告