iOS 判断手机型号及系统版本(包括iPhone 11系列)_ios 系统型号对应 iphone 11,-程序员宅基地

iPhoneX推出已经有很长时间了,从最初的简单适配到前一段时间拿到真机开始做更优化的适配,我在部分地方用到了判断手机型号及系统版本的方法,下面分享一下。
首先需要导入头文件

#import <sys/utsname.h>

之后进行判断

+ (NSString *)getCurrentDeviceModel{

    struct utsname systemInfo;

    uname(&systemInfo);

    NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];

    if ([deviceModel isEqualToString:@"iPhone3,1"])    return @"iPhone 4";

    if ([deviceModel isEqualToString:@"iPhone3,2"])    return @"iPhone 4";

    if ([deviceModel isEqualToString:@"iPhone3,3"])    return @"iPhone 4";

    if ([deviceModel isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";

    if ([deviceModel isEqualToString:@"iPhone5,1"])    return @"iPhone 5";

    if ([deviceModel isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";

    if ([deviceModel isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";

    if ([deviceModel isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";

    if ([deviceModel isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";

    if ([deviceModel isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";

    if ([deviceModel isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";

    if ([deviceModel isEqualToString:@"iPhone7,2"])    return @"iPhone 6";

    if ([deviceModel isEqualToString:@"iPhone8,1"])    return @"iPhone 6s";

    if ([deviceModel isEqualToString:@"iPhone8,2"])    return @"iPhone 6s Plus";

    if ([deviceModel isEqualToString:@"iPhone8,4"])    return @"iPhone SE";

    // 日行两款手机型号均为日本独占,可能使用索尼FeliCa支付方案而不是苹果支付

    if ([deviceModel isEqualToString:@"iPhone9,1"])    return @"iPhone 7";

    if ([deviceModel isEqualToString:@"iPhone9,2"])    return @"iPhone 7 Plus";

    if ([deviceModel isEqualToString:@"iPhone9,3"])    return @"iPhone 7";

    if ([deviceModel isEqualToString:@"iPhone9,4"])    return @"iPhone 7 Plus";

    if ([deviceModel isEqualToString:@"iPhone10,1"])   return @"iPhone_8";

    if ([deviceModel isEqualToString:@"iPhone10,4"])   return @"iPhone_8";

    if ([deviceModel isEqualToString:@"iPhone10,2"])   return @"iPhone_8_Plus";

    if ([deviceModel isEqualToString:@"iPhone10,5"])   return @"iPhone_8_Plus";

    if ([deviceModel isEqualToString:@"iPhone10,3"])   return @"iPhone X";

    if ([deviceModel isEqualToString:@"iPhone10,6"])   return @"iPhone X";

    if ([deviceModel isEqualToString:@"iPhone11,8"])   return @"iPhone XR";

    if ([deviceModel isEqualToString:@"iPhone11,2"])   return @"iPhone XS";

    if ([deviceModel isEqualToString:@"iPhone11,6"])   return @"iPhone XS Max";

    if ([deviceModel isEqualToString:@"iPhone11,4"])   return @"iPhone XS Max";

    if ([deviceModel isEqualToString:@"iPhone12,1"])   return @"iPhone 11";

    if ([deviceModel isEqualToString:@"iPhone12,3"])   return @"iPhone 11 Pro";

    if ([deviceModel isEqualToString:@"iPhone12,5"])   return @"iPhone 11 Pro Max";

    if ([deviceModel isEqualToString:@"iPhone12,8"])   return @"iPhone SE (2nd generation)";

    if ([deviceModel isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";

    if ([deviceModel isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";

    if ([deviceModel isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";

    if ([deviceModel isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";

    if ([deviceModel isEqualToString:@"iPod5,1"])      return @"iPod Touch (5 Gen)";

    if ([deviceModel isEqualToString:@"iPad1,1"])      return @"iPad";

    if ([deviceModel isEqualToString:@"iPad1,2"])      return @"iPad 3G";

    if ([deviceModel isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";

    if ([deviceModel isEqualToString:@"iPad2,2"])      return @"iPad 2";

    if ([deviceModel isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";

    if ([deviceModel isEqualToString:@"iPad2,4"])      return @"iPad 2";

    if ([deviceModel isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";

    if ([deviceModel isEqualToString:@"iPad2,6"])      return @"iPad Mini";

    if ([deviceModel isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";

    if ([deviceModel isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";

    if ([deviceModel isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";

    if ([deviceModel isEqualToString:@"iPad3,3"])      return @"iPad 3";

    if ([deviceModel isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";

    if ([deviceModel isEqualToString:@"iPad3,5"])      return @"iPad 4";

    if ([deviceModel isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";

    if ([deviceModel isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";

    if ([deviceModel isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";

    if ([deviceModel isEqualToString:@"iPad4,4"])      return @"iPad Mini 2 (WiFi)";

    if ([deviceModel isEqualToString:@"iPad4,5"])      return @"iPad Mini 2 (Cellular)";

    if ([deviceModel isEqualToString:@"iPad4,6"])      return @"iPad Mini 2";

    if ([deviceModel isEqualToString:@"iPad4,7"])      return @"iPad Mini 3";

    if ([deviceModel isEqualToString:@"iPad4,8"])      return @"iPad Mini 3";

    if ([deviceModel isEqualToString:@"iPad4,9"])      return @"iPad Mini 3";

    if ([deviceModel isEqualToString:@"iPad5,1"])      return @"iPad Mini 4 (WiFi)";

    if ([deviceModel isEqualToString:@"iPad5,2"])      return @"iPad Mini 4 (LTE)";

    if ([deviceModel isEqualToString:@"iPad5,3"])      return @"iPad Air 2";

    if ([deviceModel isEqualToString:@"iPad5,4"])      return @"iPad Air 2";

    if ([deviceModel isEqualToString:@"iPad6,3"])      return @"iPad Pro 9.7";

    if ([deviceModel isEqualToString:@"iPad6,4"])      return @"iPad Pro 9.7";

    if ([deviceModel isEqualToString:@"iPad6,7"])      return @"iPad Pro 12.9";

    if ([deviceModel isEqualToString:@"iPad6,8"])      return @"iPad Pro 12.9";

    

    if ([deviceModel isEqualToString:@"AppleTV2,1"])      return @"Apple TV 2";

    if ([deviceModel isEqualToString:@"AppleTV3,1"])      return @"Apple TV 3";

    if ([deviceModel isEqualToString:@"AppleTV3,2"])      return @"Apple TV 3";

    if ([deviceModel isEqualToString:@"AppleTV5,3"])      return @"Apple TV 4";

    

    if ([deviceModel isEqualToString:@"i386"])         return @"Simulator";

    if ([deviceModel isEqualToString:@"x86_64"])       return @"Simulator";

    return deviceModel;

}

来源网站 https://www.theiphonewiki.com/wiki/Models

每个人的适配方法不同,我在开发中只需要判断iPhoneX。

判断手机系统版本,iOS 11以后有时候需要进行一下特别的修改

NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];

或者

    if (@available(iOS 11.0, *)) {
     //
    }

 



作者:总有骄阳lcy
链接:https://www.jianshu.com/p/a9ffbd620719
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

iOS开发,获取手机型号,系统版本号

iOS 的APP在开发的过程中,有时候为了bug的跟踪,需要收集用户使用手机的设备,手机系统版本,手机型号,以及应用版本,应用信息等等。这些的信息便于开发者诊断问题,是能够通过开发api可以获取到的,iOS的SDK中提供了 UIDevice,NSBundle,NSLocale.

01 :UIDevice 帮助我们全方位的了解所使用的设备的信息,

   A:NSString *userPhoneNameStr = [[UIDevice currentDevice] name];//手机名称

  B:NSString *deviceNameStr = [[UIDevice currentDevice] systemName];//手机系统名称
  C:NSString *systemVersionStr = [[UIDevice currentDevice] systemVersion];//手机系统版本号
  D: NSString *phoneModelStr = [[UIDevice currentDevice] model];//类型 是模拟器还是真机

  E:NSString *phoneModelStr = [[UIDevice currentDevice] model];//类型 是模拟器还是真机

  F:NSString *phoneUDIDStr = [[UIDevice currentDevice] model];//设备唯一标示码

02:NSBundle ,这是一个目录,我们称之为程序的main bundle,通过这个目录获取应用的信息,比如说应用的名称,版本号,应用软件的版本。

     //app 应用信息的获取字典类型,

    NSDictionary * dicInfo =[[NSBundle mainBundle] infoDictionary]; 
    
    NSString * appNameStr =[dicInfo objectForKey:@"CFBundleName"]; //当前应用名称
    NSString * appVersionStr =[dicInfo objectForKey:@"CFBundleShortVersionString"];//当前应用版本
    NSString * appBuildStr =[dicInfo objectForKey:@"CFBundleVersion"];//当前应用版本号码
    NSString * appXcodeStr =[dicInfo objectForKey:@"DTXcode"];//Xcode 版本
    NSString * appSDKNameStr = [dicInfo objectForKey:@"DTSDKName"];//SDK 的版本。

    NSLog(@"01:当前应用名称:%@",appNameStr);

    NSLog(@"02:当前应用版本:%@",appVersionStr);

    NSLog(@"03:当前应用版本号:%@",appBuildStr);

    NSLog(@"04:开发的Xcode版本:%@",appXcodeStr);

    NSLog(@"05:SDK的版本:%@",appSDKNameStr);

标注:只选择了几个经常用到的信息,dicInfo一共29个值,

  03NSLocale  可以获取用户的本地化信息的设置,比如说:国家,语言,日期的格式,提供正确的地理位置。
————————————————
版权声明:本文为CSDN博主「lv自定义」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lvchao1122/article/details/52344381

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a18339063397/article/details/91549934

智能推荐

对put,delete的restful请求进行过滤处理的工具类_openresty过滤put请求-程序员宅基地

文章浏览阅读2.7k次。package com.lovo.util;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URLDecoder;import java.util.ArrayList;import java.util.Col_openresty过滤put请求

KMP算法(Python)-程序员宅基地

文章浏览阅读389次,点赞4次,收藏7次。p[j+1],让j=nex[j],意思是发现aabaaa和aabaab不匹配了,现在找到aabaa的(相等前后缀的最大长度),那就是aa,j跳到2的位置,相对于j = nex[j]。找到aabaa的(相等前后缀的最大长度)相对于找到1,2(aa)和4,5(aa)相等,再考虑aa+a和aa+b匹不匹配,看起来不匹配,再找到aa的(相等前后缀的最大长度)为(a),那么a+a显然和a+a相匹配。目前在最大长度的情况下,前缀是aabaa,后缀是aabaa,分别编号1,2,3,4,5。

linux 勿删 libc.so.6 恢复操作_linux系统的libc-2.17.so文件有问题,从其他机器拷一个相同的文件覆盖-程序员宅基地

文章浏览阅读807次。不小心把一台服务器上的 libc.so.6 给mv改名字了,导致大部分基础命令都不好使centos 7 可以使用 ldconfig -l -v /lib64/libc-2.17.so 或者重新设置软链接 sln /lib64/libc.so-2.12 /lib64/libc.so.6 文章出处:https://blog.csdn.net/barry1020441722/article/details/108083566经测试正常凝思操作..._linux系统的libc-2.17.so文件有问题,从其他机器拷一个相同的文件覆盖

R语言因子实验设计nlme拟合非线性混合模型分析有机农业施氮水平-程序员宅基地

文章浏览阅读109次。原文链接:http://tecdat.cn/?p=24134测试非线性回归中的交互作用因子实验在农业中非常普遍,它们通常用于测试实验因素之间相互作用的重要性。例如,可以在两种不同的施氮水平(例如高和低)下进行基因型评估,以了解基因型的排名是否取决于养分的可用性。对于那些不太了解农业的人,我只会说这样的评估是相关的,因为我们需要知道我们是否可以推荐相同的基因型,例如,在传统农业(高氮可用性)和有机..._混合模型 畸形拟合

SpringBoot集成SpringCloudFeign-程序员宅基地

文章浏览阅读881次,点赞20次,收藏14次。1.背景介绍1. 背景介绍Spring Cloud Feign 是一个声明式的 Web 服务客户端,它使用 Feign 框架为 Spring Cloud 提供了一个简单的 HTTP 客户端。Feign 是 Netflix 开源的一个用于构建定制 HTTP 客户端的框架,它可以让开发者通过简单的注解和接口来编写 HTTP 请求,而无需手动编写 HTTP 请求和响应的代码。Spring C...

【UnityUGUI】UGUI的六大组件和三大基础控件详解_unity ugui基础控件-程序员宅基地

文章浏览阅读493次,点赞16次,收藏20次。屏幕分辨率计算公式 = 画布尺寸 * 缩放系数像素单位转存储单位尺寸 x 16 位 / 8字节 /1024 =?kbCnvasscaler——画布缩放控制器。_unity ugui基础控件

随便推点

asp控件Repeater运用-程序员宅基地

文章浏览阅读91次。双层repeater嵌套 <asp:Repeater ID="rpt_dataRepeatgroup" runat="server" OnItemDataBound="rpt_dataRepeatgroup_ItemDataBound"> <HeaderTemplate> ..._"

【数据结构】——二叉搜索树-程序员宅基地

文章浏览阅读6.3k次,点赞22次,收藏63次。目录前言二叉搜索树的概念二叉搜索树的操作树的节点实现搜索树的基本结构插入数据查找删除拷贝构造函数 二叉搜索树的应用前言在c++中的容器里map和set的学习需要二叉搜索树的铺垫,也为后边的的红黑树和AVL树做铺垫,也就是说,今天主要讲搜索树的基本结构和应用。二叉搜索树的概念所有的根节点大于左子树的节点,小于右子树的节点的二叉树就叫做二叉搜索树。二叉搜索的性质:如果左子树不为空,则左子树上的所有节点都小于根节点。 如果右子树不为..._二叉搜索树

Win7 自带FTP将文件复制到FTP服务器时发生错误。-程序员宅基地

文章浏览阅读1.1k次。错误截图:错误信息:将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。详细信息:200 Type set to I.200 PORT commad successful.451 No mapping for the Unicode character exits in target multi-bye code page.解决..._filezilla 200 type set to i

Python3+Selenium3自动化测试-(三)-程序员宅基地

文章浏览阅读118次。selenium键盘事件#coding=utf-8from selenium import webdriverimport timefrom selenium.webdriver.common.keys import Keys#打开狐火浏览器driver = webdriver.Firefox()#访问目标网址driver.get("http://1..._iwebshop selenium

深度学习论文翻译解析(二):An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Ap...-程序员宅基地

文章浏览阅读1.5k次。论文标题:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition论文作者: Baoguang Shi, Xiang Bai and Cong Yao论文代码的下载地址:http://mc.eistar.n..._转录层与连接时间分类

dom4j生成、解析xml-程序员宅基地

文章浏览阅读64次。Java代码 /** *创建xml *@paramobj泛型对象 *@paramentityPropertys泛型对象的List集合 *@paramEncodeXML自定义编码类型 *@paramXMLPathXML文件的路径及文件名..._dom4j生成解析xml

推荐文章

热门文章

相关标签