如何在Swift中识别iPhone型号:新手完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何在Swift中识别iPhone型号:新手详解

\n\n

您是否曾想过,为什么您的Swift应用在iPhone 13上运行完美,但在iPhone SE(第二代)上却显得仓促绘制?或者为什么您添加的某些功能在旧型号上突然不可用?答案很简单:不同的iPhone拥有不同的能力——从屏幕尺寸到是否支持Face ID和触觉反馈。

\n\n

在本文中,我们将详细讲解如何在Swift中识别iPhone型号——从使用UIDevice的简单方法到使用sysctlbyname的专业方法。您将学会不仅仅是获取“iPhone”,而是精确识别面前的是iPhone 14 Pro Max还是iPhone 8。开始吧!

\n\n

为什么这很重要?

\n

每位iOS开发者迟早都会遇到需要根据具体设备调整界面或逻辑的情况。以下是几个实际场景:

\n
    \n
  • 自适应设计:在带“刘海”的iPhone(iPhone X及更新机型)上,元素布局需要与带Home键的旧型号不同。
  • \n
  • 性能优化:在旧设备(iPhone 6s、iPhone 7)上,应禁用繁重的动画或特效。
  • \n
  • 功能限制:并非所有型号都支持ARKit、LiDAR、120Hz显示屏或MagSafe。
  • \n
  • 分析:了解用户使用哪些型号有助于做出产品决策。
  • \n
\n\n

第一级:UIDevice(简单但有限)

\n

最简单的方法是使用内置类UIDevice。它返回设备的通用信息,但遗憾的是,不显示精确型号。

\n\n
import UIKit\n\nlet device = UIDevice.current\nprint("设备名称: \\(device.name)")\nprint("型号: \\(device.model)")           // "iPhone" 或 "iPad"\nprint("系统: \\(device.systemName)")     // "iOS"\nprint("版本: \\(device.systemVersion)")   // "17.0"\n
\n\n

您将得到什么: device.model 只会返回 "iPhone" 或 "iPad"。这对于了解它是否是移动设备很有用,但不适合精确识别。

\n\n

何时使用: 如果您只需要检查应用是否运行在iPhone上,而不是iPad或iPod touch。例如,用于隐藏iPad特有功能。

\n\n

第二级:sysctlbyname(专业方法)

\n

要获取精确的iPhone型号,需要调用系统函数sysctlbyname。它返回类似 "iPhone14,2"(即iPhone 13 Pro)的字符串。知道这些标识符后,可以将它们映射为人类可读的名称。

\n\n

以下是Swift中的可用代码:

\n\n
import UIKit\n\nfunc getDeviceModelCode() -> String {\n    var size = 0\n    sysctlbyname("hw.machine", nil, &size, nil, 0)\n    var machine = [CChar](repeating: 0, count: size)\n    sysctlbyname("hw.machine", &machine, &size, nil, 0)\n    return String(cString: machine)\n}\n\n// 使用\nlet modelCode = getDeviceModelCode()\nprint("型号代码: \\(modelCode)") // 例如:"iPhone14,2"\n
\n\n

现在您有了 "iPhone14,2"。但这对应什么型号?您需要一个映射字典。

\n\n

iPhone型号字典(截至2024年)

\n

以下是一个不完整但足以应对大多数任务的列表。完整列表可在开源资源中找到,或作为单独文件维护。

\n\n
func getDeviceModelName() -> String {\n    let modelCode = getDeviceModelCode()\n    \n    let modelMap: [String: String] = [\n        // iPhone 15 系列\n        "iPhone15,4": "iPhone 15",\n        "iPhone15,5": "iPhone 15 Plus",\n        "iPhone16,1": "iPhone 15 Pro",\n        "iPhone16,2": "iPhone 15 Pro Max",\n        \n        // iPhone 14 系列\n        "iPhone14,7": "iPhone 14                

博客

书籍推荐