当前位置: 首页 > 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…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...