当前位置: 首页 > news >正文

iOS如何获取设备型号的最新方法总结

每一种 iOS 设备型号都有对应的一个或多个硬件编码/标识符,称为 device model 或者叫 machine name

通常的做法是,先获取设备的 device model 值,再手动映射为具体的设备型号(或者直接把 device model 值传给后端,让后端去做映射,这样的好处是可以随时兼容新设备)。

完整的 device mode 数据参考 Wiki:https://www.theiphonewiki.com/wiki/Models

我们可以先获取 device model 值,记为 internalName ,然后进行对比判断,转换成具体的设备型号。实现代码如下图所示:

+ (NSString *)deviceName {struct utsname systemInfo;uname(&systemInfo);NSString *internalName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];NSDictionary *dict = @{// iPhone@"iPhone1,1" : @"iPhone",@"iPhone1,2" : @"iPhone 3G",@"iPhone2,1" : @"iPhone 3GS",@"iPhone3,1" : @"iPhone 4",@"iPhone3,2" : @"iPhone 4",@"iPhone3,3" : @"iPhone 4",@"iPhone4,1" : @"iPhone 4S",@"iPhone5,1" : @"iPhone 5",@"iPhone5,2" : @"iPhone 5",@"iPhone5,3" : @"iPhone 5c",@"iPhone5,4" : @"iPhone 5c",@"iPhone6,1" : @"iPhone 5s",@"iPhone6,2" : @"iPhone 5s",@"iPhone7,2" : @"iPhone 6",@"iPhone7,1" : @"iPhone 6 Plus",@"iPhone8,1" : @"iPhone 6s",@"iPhone8,2" : @"iPhone 6s Plus",@"iPhone8,4" : @"iPhone SE (1st generation)",@"iPhone9,1" : @"iPhone 7",@"iPhone9,3" : @"iPhone 7",@"iPhone9,2" : @"iPhone 7 Plus",@"iPhone9,4" : @"iPhone 7 Plus",@"iPhone10,1" : @"iPhone 8",@"iPhone10,4" : @"iPhone 8",@"iPhone10,2" : @"iPhone 8 Plus",@"iPhone10,5" : @"iPhone 8 Plus",@"iPhone10,3" : @"iPhone X",@"iPhone10,6" : @"iPhone X",@"iPhone11,8" : @"iPhone XR",@"iPhone11,2" : @"iPhone XS",@"iPhone11,6" : @"iPhone XS Max",@"iPhone11,4" : @"iPhone XS Max",@"iPhone12,1" : @"iPhone 11",@"iPhone12,3" : @"iPhone 11 Pro",@"iPhone12,5" : @"iPhone 11 Pro Max",@"iPhone12,8" : @"iPhone SE (2nd generation)",@"iPhone13,1" : @"iPhone 12 mini",@"iPhone13,2" : @"iPhone 12",@"iPhone13,3" : @"iPhone 12 Pro",@"iPhone13,4" : @"iPhone 12 Pro Max",@"iPhone14,4" : @"iPhone 13 mini",@"iPhone14,5" : @"iPhone 13",@"iPhone14,2" : @"iPhone 13 Pro",@"iPhone14,3" : @"iPhone 13 Pro Max",@"iPhone14,6" : @"iPhone SE (3rd generation)",@"iPhone14,7" : @"iPhone 14",@"iPhone14,8" : @"iPhone 14 Plus",@"iPhone15,2" : @"iPhone 14 Pro",@"iPhone15,3" : @"iPhone 14 Pro Max",// iPad@"iPad1,1" : @"iPad",@"iPad2,1" : @"iPad 2",@"iPad2,2" : @"iPad 2",@"iPad2,3" : @"iPad 2",@"iPad2,4" : @"iPad 2",@"iPad3,1" : @"iPad (3rd generation)",@"iPad3,2" : @"iPad (3rd generation)",@"iPad3,3" : @"iPad (3rd generation)",@"iPad3,4" : @"iPad (4th generation)",@"iPad3,5" : @"iPad (4th generation)",@"iPad3,6" : @"iPad (4th generation)",@"iPad6,11" : @"iPad (5th generation)",@"iPad6,12" : @"iPad (5th generation)",@"iPad7,5" : @"iPad (6th generation)",@"iPad7,6" : @"iPad (6th generation)",@"iPad7,11" : @"iPad (7th generation)",@"iPad7,12" : @"iPad (7th generation)",// iPad Air@"iPad4,1" : @"iPad Air",@"iPad4,2" : @"iPad Air",@"iPad4,3" : @"iPad Air",@"iPad5,3" : @"iPad Air 2",@"iPad5,4" : @"iPad Air 2",@"iPad11,3" : @"iPad Air (3rd generation)",@"iPad11,4" : @"iPad Air (3rd generation)",// iPad Pro@"iPad6,7" : @"iPad Pro (12.9-inch)",@"iPad6,8" : @"iPad Pro (12.9-inch)",@"iPad6,3" : @"iPad Pro (9.7-inch)",@"iPad6,4" : @"iPad Pro (9.7-inch)",@"iPad7,1" : @"iPad Pro (12.9-inch) (2nd generation)",@"iPad7,2" : @"iPad Pro (12.9-inch) (2nd generation)",@"iPad7,3" : @"iPad Pro (10.5-inch)",@"iPad7,4" : @"iPad Pro (10.5-inch)",@"iPad8,1" : @"iPad Pro (11-inch)",@"iPad8,2" : @"iPad Pro (11-inch)",@"iPad8,3" : @"iPad Pro (11-inch)",@"iPad8,4" : @"iPad Pro (11-inch)",@"iPad8,5" : @"iPad Pro (12.9-inch) (3rd generation)",@"iPad8,6" : @"iPad Pro (12.9-inch) (3rd generation)",@"iPad8,7" : @"iPad Pro (12.9-inch) (3rd generation)",@"iPad8,8" : @"iPad Pro (12.9-inch) (3rd generation)",@"iPad8,9" : @"iPad Pro (11-inch) (2nd generation)",@"iPad8,10" : @"iPad Pro (11-inch) (2nd generation)",@"iPad8,11" : @"iPad Pro (12.9-inch) (4th generation)",@"iPad8,12" : @"iPad Pro (12.9-inch) (4th generation)",// iPad mini@"iPad2,5" : @"iPad mini",@"iPad2,6" : @"iPad mini",@"iPad2,7" : @"iPad mini",@"iPad4,4" : @"iPad mini 2",@"iPad4,5" : @"iPad mini 2",@"iPad4,6" : @"iPad mini 2",@"iPad4,7" : @"iPad mini 3",@"iPad4,8" : @"iPad mini 3",@"iPad4,9" : @"iPad mini 3",@"iPad5,1" : @"iPad mini 4",@"iPad5,2" : @"iPad mini 4",@"iPad11,1" : @"iPad mini (5th generation)",@"iPad11,2" : @"iPad mini (5th generation)",//other@"i386":@"iPhone Simulator",@"x86_64":@"iPhone Simulator",};NSString *model = [dict objectForKey:internalName];if (model.length == 0) {model = internalName;}return model;
}

相关文章:

iOS如何获取设备型号的最新方法总结

每一种 iOS 设备型号都有对应的一个或多个硬件编码/标识符,称为 device model 或者叫 machine name 通常的做法是,先获取设备的 device model 值,再手动映射为具体的设备型号(或者直接把 device model 值传给后端,让后…...

SpringBoot之RestTemplate使用Apache的HttpClient连接池

SpringBoot自带的RestTemplate是没有使用连接池的,只是SimpleClientHttpRequestFactory实现了ClientHttpRequestFactory、AsyncClientHttpRequestFactory 2个工厂接口,因此每次调用接口都会创建连接和销毁连接,如果是高并发场景下会大大降低性…...

第49节:cesium 倾斜模型osgb转3dtiles,并加载(含源码+视频)

结果示例: 完整步骤: 1、启动并登陆cesiumlab 2、准备OSGB模型数据(含下载地址) 链接:https://pan.quark.cn/s/46ac7b0b2bed 提取码:TvWL3、倾斜模型切片 选择倾斜模型data文件夹 空间参考、零点坐标 默认 强制双面关闭、无光照 打开...

零信任安全模型详解:探讨零信任安全策略的原理、实施方法和最佳实践,确保在网络中实现最小特权原则

在当今日益复杂和危险的网络环境中,传统的网络安全模型已经不再能够满足对抗不断进化的威胁。零信任安全模型应运而生,以其强调“不信任,始终验证”的理念,成为了当今信息技术领域中的热门话题。本文将深入探讨零信任安全模型&…...

01_nodejs简介

01 【nodejs简介】 1.前言 Node 的重要性已经不言而喻,很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外,目前最为流行的 Web 开发模式是前后端分离的形式,即前端开发者…...

企业架构LNMP学习笔记4

企业服务器LNMP环境搭建: 常见的软件架构: 1)C/S: client/server 2)B/S: browser/server 不管是C还是B,都是属于客户端属于前端。那么运维人员主要是负责和管理的Server端,也统称为服务器端。为了快速的…...

探索UniApp分包

目录 什么是UniApp分包? UniApp分包的原理 优势 如何使用UniApp分包 1.manifest.json文件配置 2.静态图片资源分包注意事项 3.pages.json配置 结论 探索UniApp分包:优化移动应用性能与用户体验 在移动应用开发领域,性能和用户体验是至…...

uniapp 支持图片放大

<view class"list" v-for"(item, index) in urls" :key"index"><image :src"item" click"viewImg(item, index)" disabled></image></view> js // 预览大图 viewImg(data, index) {uni.previewImag…...

Oracle数据泵备份恢复(导出导入)详细语句

数据泵备份 查询已存在备份目录 select * from dba_directories;新建备份目录 create directory dbbak as /u01/dbbak;注意&#xff1a;在本地新建对应的物理目录 给指定用户赋权 grant read, write on directory dbbak to testuser; 或者直接把目录的权限设置为公开 g…...

【JS案例】JS实现积分抽奖(内附源码)

JS案例实现积分抽奖 &#x1f31f;效果展示 &#x1f31f;HTML结构 &#x1f31f;CSS样式 &#x1f31f;实现思路 &#x1f31f;具体实现 1.定义抽奖次数渲染 2.点击抽奖按钮,实现滚动抽奖效果 3.弹窗处理 &#x1f31f;完整代码 &#x1f31f;写在最后 &#x1f3…...

angular抛出 ExpressionChangedAfterItHasBeenCheckedError错误分析

当变更检测完成后又更改了表达式值时&#xff0c;Angular 就会抛出 ExpressionChangedAfterItHasBeenCheckedError 错误。Angular 只会在开发模式下抛出此错误。 在开发模式下&#xff0c;Angular 在每次变更检测运行后都会执行一次附加检查&#xff0c;以确保绑定没有更改。这…...

动态链接库的__declspec(dllexport)关键字的概念

在 Windows 操作系统下&#xff0c;创建一个动态链接库&#xff08;DLL&#xff09;项目时&#xff0c;您需要通过 __declspec(dllexport) 关键字来显式地标记希望在 DLL 中 公开 的函数、类、变量等符号。这是因为在默认情况下&#xff0c;编译器会将函数和符号视为 私有&…...

群晖NAS:DS Video、Jellyfin等视频电影电视剧海报、背景墙搜刮器

群晖NAS&#xff1a;DS Video、Jellyfin等视频电影电视剧海报、背景墙搜刮器 本文只使用豆瓣插件方式&#xff0c;系统默认的 The Movie Database 好注册&#xff0c;但是授权码输入后域名不通过&#xff0c;很麻烦。 1、插件地址&#xff1a; https://www.aliyundrive.com/s…...

WEBGL(3):鼠标动态绘制点

1 实现思路 绘制单个点鼠标事件监听点击事件将点推送到数组中绘制数组中所有点 2 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…...

Sass基础

Sass基础 简介 Sass是一种stylesheet语言&#xff0c;可以被编译成CSS。Sass允许你使用诸如variabels&#xff0c;nested rules&#xff0c;mixins&#xff0c;functions等等语法&#xff0c;这些都将在本篇的接下来进行讲解。 因为之前一直学的后端&#xff0c;前端只是因为…...

Java中的消息队列有哪些?

在Java中&#xff0c;有几种常见的消息队列实现&#xff0c;包括&#xff1a; Apache Kafka&#xff1a;一个分布式流处理平台&#xff0c;具有高吞吐量、可持久化、可扩展等特点。 RabbitMQ&#xff1a;一个开源的消息代理&#xff0c;实现了AMQP&#xff08;高级消息队列协议…...

多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比

多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比 目录 多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现GRU-Adaboost和GRU多变量时间序列预测对比 模型描述 M…...

测试用例编写规范参考

章节目录&#xff1a; 一、规范目的二、模块划分三、颗粒度规范四、编写规范五、具体分项5.1 用例标题5.2 前置条件5.3 操作步骤5.4 预期结果 六、用例维护七、结束语 一、规范目的 规范合理&#xff0c;可执行性。一定要保证高可读性。 二、模块划分 同级别、同等级功能点。…...

unity3d:功能验证,收集开源项目的工程合集

unity3d功能验证&#xff0c;和收集开源项目的工程合集 目录持续更新地址 【腾讯文档】UnityForTest目录 https://docs.qq.com/doc/DWm9HSkVhTGdyUUVo 源码 https://github.com/luoyikun/UnityForTest 动画 创建骨骼动画 BoneAnimation场景 代码创建Mesh&#xff0c;骨骼…...

plotly_beforehover 用法:

在Plotly.js中&#xff0c;plotly_beforehover是在鼠标悬停在数据点上之前触发的回调事件。它的主要作用是在鼠标悬停事件发生前做一些准备工作。 plotly_beforehover事件是与图表对象绑定的&#xff0c;可以通过调用on方法来绑定事件处理程序。下面是一个示例代码&#xff1a…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...