iOS下设备版本获取
执行环境
可以从 UIDevice 的属性 model 得到在现在执行的环境。例子如下:
|
1 2 3 4 5 6 7 8 9 10 |
NSString *modelname = [[UIDevice currentDevice]model]; if ([modelname isEqualToString:@"iPhone"]) { // iPhone } if ([modelname isEqualToString:@"IPod Touch"]) { // iPod touch } if ([modelname isEqualToString:@"iPhone Simulator"]) { // iPhone Simulator } |
或者
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#import <TargetConditionals.h> #if TARGET_OS_IPHONE // iPhone Device #endif #if TARGET_IPHONE_SIMULATOR // iPhone Simulator #endif #if !TARGET_IPHONE_SIMULATOR // iPhone Device #endif |
或:
if ([[UIDevicecurrentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
// iPhone and iPod touch style UI
} else {
// iPad style UI
}
iPhone 机器版本
可以通过 uname 函数取得当前机器的版本。例子如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
struct utsname u; uname(&u); NSString *machine = [NSString stringWithCString:u.machine]; if ([machine isEqualToString:@"iPhone1,1"]) { // iPhone 1G } if ([machine isEqualToString:@"iPhone1,2"]) { // iPhone 3G } if ([machine isEqualToString:@"iPhone2,1"]) { // iPhone 3GS } if ([machine isEqualToString:@"iPod1,1"]) { // iPod touch 1G } if ([machine isEqualToString:@"iPod2,1"]) { // iPod touch 2G } if ([machine isEqualToString:@"iPod3,1"]) { // iPod touch Late2009 } |
或者通过 sysctlbyname() 函数取得:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
- (NSString *) platform { size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); /* Possible values: "iPhone1,1" = iPhone 1G "iPhone1,2" = iPhone 3G "iPhone2,1" = iPhone 3GS "iPod1,1" = iPod touch 1G "iPod2,1" = iPod touch 2G */ NSString *platform = [NSString stringWithCString:machine]; free(machine); return platform; } |
iPhone OS 版本
可以使用 UIDevice 的属性 systemVersion 来得到。例子如下:
|
1 2 3 4 5 6 7 8 9 10 |
NSString *osversion = [UIDevice currentDevice].systemVersion; if ([osversion isEqualToString:@"2.1"]) { // iPhone } if ([osversion isEqualToString:@"2.2.1"]) { // iPod touch } if ([osversion isEqualToString:@"3.0"]) { // iPhone Simulator } |
这里有一个别人写好的类库,专门用来得到系统版本信息,用起来比较方便。
iPhone SDK 版本宏
就像在windows系统下用 WINVER 宏来判断 windows 系统版本一样,iPhone OS 中也有类似的宏。
|
1 2 3 4 |
// 当前系统支持的最小版本 __IPHONE_OS_VERSION_MIN_REQUIRED // 当前系统支持的最大版本 __IPHONE_OS_VERSION_MAX_ALLOWED |
比如用 iPhone OS SDK 3.1.2 编译的程序
|
1 2 |
__IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_3_0 __IPHONE_OS_VERSION_MAX_ALLOWED == __IPHONE_3_1 |
这时,我们可以在程序中使用下面类似的 $ifdef 语句:
|
1 2 3 4 5 |
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_2_2 // iPhone OS SDK 3.0 以后版本的处理 #else // iPhone OS SDK 3.0 之前版本的处理 #endif |
又或者 iPhone OS SDK 4 推出的时候,可以:
|
1 2 3 4 5 6 7 8 9 |
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_2_2 #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_1 // iPhone OS SDK 4.0 以后版本的处理 #else // iPhone OS SDK 3.0 ~ 4.0 版本的处理 #endif #else // iPhone OS SDK 3.0 之前版本的处理 #endif |
感谢:http://www.yifeiyang.net/iphone-development-techniques-of-environmental-chapter-7-distinguish-between-different-versions-of-the-iphone/
iOS下设备版本获取的更多相关文章
- 史上最全的iOS各种设备信息获取总结
来源:si1ence 链接:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述一下各种信息 ...
- iOS: iOS各种设备信息获取
Author:si1ence Link:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述 ...
- ios下通过webservice获取数据
经历了两天的摸索,终于成功获取了数据,因为公司要做一个停车入库的信息查询,所以需要访问webservice的接口,由于没有接触过webservice,所以第一天就是各种搜索资料,类库,各种尝试,甚至是 ...
- 识别ios系统设备并获取版本号
let isIOS = userAgent.toLowerCase().indexOf("like mac os x") > 0; //ios终端 if (isIOS) { ...
- iOS 获取设备版本型号
#import "sys/utsname.h" /** * 设备版本 * * @return e.g. iPhone 5S */+ (NSString*)deviceVersi ...
- iOS开发-Swift获取手机设备信息(UIDevice)
使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...
- Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?
上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取 ...
- iOS开发-Object-C获取手机设备信息(UIDevice)
一.获取UiDevice设备信息 // 获取设备名称 NSString *name = [[UIDevice currentDevice] name]; // 获取设备系统名称 NSString *s ...
- ios下点击穿透focus获取问题
在ios下的浏览器中当点击当前页的一个按钮,用window.location.href进行跳转时,如果下一个页面里这点击按钮的位置是一个textarea或者text等那么他会触发focus事件,会出现 ...
随机推荐
- 超实用的PHP代码片段!
摘要:本文分享了九个超级有用的PHP代码片段,当你在开发网站.应用或者博客时,利用这些代码能为你节省大量的时间.你可以直接拿来用! 此前,研发频道曾发布<直接拿来用,10个PHP代码片段> ...
- QBXT Day 5图论相关
图论是NOIP的一个非常重要的考点,换句话说,没有图论,NOIP的考纲就得少一大半(虽然很NOIP没有考纲) 图论这玩意吧,和数论一样是非常变态的东西,知识点又多又杂,但是好在一个事,他比较直观比较好 ...
- 通过helm 安装 harbor 不成功问题处理
helm 安装 harbor 安装不成功处理过程 通过安装脚本 helm install c7n/harbor \ --set expose.ingress.hosts.core=harbor.ls. ...
- 歌手详情数据处理和Song类的封装
我们现在每首歌曲的数据都是这样的 我们需要在这个数据里面去提取我们需要的部分,来构造成我们需要的数据对象 那我们要和创建singer.js一样 同样也要创建song.js类 我们还要获取到每首歌对应 ...
- 系统分析与设计HW6
1. 使用 UML State Model建模 建模对象: 参考 Asg_RH 文档, 对 Reservation/Order 对象建模. 建模要求: 参考练习不能提供足够信息帮助你对订单对象建模,请 ...
- REST API (四)之Generic views
通用的视图 Django’s generic views... were developed as a shortcut for common usage patterns... 它们采取一些常见的习 ...
- 【MyBatis】----【MyBatis】--封装---别名---properties
一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...
- Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib 的一种情形
没有引用任何.net 4.5的东西,也没有引用 Newtonsoft.dll,原因是引用了微软的tlb类型库,引用方法如 https://www.cnblogs.com/nanfei/p/108798 ...
- Django聚合数据
背景: 有些时候,光靠数据库中已有字段的数据,还不足以满足一些特殊场景的需求,例如显示一个作者的所有书籍数量. 这时候就需要在已有数据基础上,聚合出这些没有的数据. 为查询集生产聚合: Django ...
- 【css】子元素浮动到了父元素外,父元素没有随子元素自适应高度,如何解决?
正常情况 如果子元素没有设置浮动(float),父元素的高度会随着子元素高度的改变而改变的. 设置浮动以后 父元素的高度不会随着子元素的高度而变化. 例如:在一个ul中定义若干个li,并设置float ...