如何使用 Swift 确定设备类型(iPhone、iPod Touch)?


在开发 iOS 应用程序时,我们有时需要知道应用程序安装在哪个设备上,并根据使用的设备提供自定义功能。例如,我们希望在 iPhone X 上提供一些功能,但在 iPhone 7 上不提供。在本文中,我们将学习如何使用 iOS 应用程序查找正在使用的 iOS 设备。

让我们了解一些实现预期结果所需的概念,

utsname − 这是 iOS 的 Darwin 模块中的一个结构

uname − uname 是一个函数,它以 utsname 作为输入,并返回 Int32 作为输出。

镜像 − 任何类型实例的子结构和显示样式的表示。

在 iOS SDK 上查找正在使用的设备是一项简单的任务,如果我们只需要查找型号或名称,我们可以使用以下任何代码,它将返回一个字符串。

但是以上代码无法确定正在使用的确切设备,它只能告诉我们正在使用 iPhone。要获取正在使用的确切设备,我们需要执行一些步骤。

在 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”变量与多个值进行比较,以根据需求获取模型名称。

以下是在 iOS 12.0 版本的模拟器上运行 iPhone 7 Plus 时代码运行情况的示例

一些苹果设备的型号代码及其对应的名称如下:

iPod4,1iPod Touch 4G
iPod5,1iPod Touch 5G
iPod7,1iPod Touch 6G
iPhone3,1 , iPhone3,2 , iPhone3,3iPhone 4
iPhone4,iPhone 4s
iPhone5,1 , iPhone5,2iPhone 5
iPhone5,3 , iPhone5,4iPhone 5c
iPhone6,1 , iPhone6,2iPhone 5s
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日

678 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告