执行环境

可以从 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下设备版本获取的更多相关文章

  1. 史上最全的iOS各种设备信息获取总结

    来源:si1ence 链接:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述一下各种信息 ...

  2. iOS: iOS各种设备信息获取

    Author:si1ence Link:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述 ...

  3. ios下通过webservice获取数据

    经历了两天的摸索,终于成功获取了数据,因为公司要做一个停车入库的信息查询,所以需要访问webservice的接口,由于没有接触过webservice,所以第一天就是各种搜索资料,类库,各种尝试,甚至是 ...

  4. 识别ios系统设备并获取版本号

    let isIOS = userAgent.toLowerCase().indexOf("like mac os x") > 0; //ios终端 if (isIOS) { ...

  5. iOS 获取设备版本型号

    #import "sys/utsname.h" /** *  设备版本 * *  @return e.g. iPhone 5S */+ (NSString*)deviceVersi ...

  6. iOS开发-Swift获取手机设备信息(UIDevice)

    使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...

  7. Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?

    上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取 ...

  8. iOS开发-Object-C获取手机设备信息(UIDevice)

    一.获取UiDevice设备信息 // 获取设备名称 NSString *name = [[UIDevice currentDevice] name]; // 获取设备系统名称 NSString *s ...

  9. ios下点击穿透focus获取问题

    在ios下的浏览器中当点击当前页的一个按钮,用window.location.href进行跳转时,如果下一个页面里这点击按钮的位置是一个textarea或者text等那么他会触发focus事件,会出现 ...

随机推荐

  1. 超实用的PHP代码片段!

    摘要:本文分享了九个超级有用的PHP代码片段,当你在开发网站.应用或者博客时,利用这些代码能为你节省大量的时间.你可以直接拿来用! 此前,研发频道曾发布<直接拿来用,10个PHP代码片段> ...

  2. QBXT Day 5图论相关

    图论是NOIP的一个非常重要的考点,换句话说,没有图论,NOIP的考纲就得少一大半(虽然很NOIP没有考纲) 图论这玩意吧,和数论一样是非常变态的东西,知识点又多又杂,但是好在一个事,他比较直观比较好 ...

  3. 通过helm 安装 harbor 不成功问题处理

    helm 安装 harbor 安装不成功处理过程 通过安装脚本 helm install c7n/harbor \ --set expose.ingress.hosts.core=harbor.ls. ...

  4. 歌手详情数据处理和Song类的封装

    我们现在每首歌曲的数据都是这样的 我们需要在这个数据里面去提取我们需要的部分,来构造成我们需要的数据对象 那我们要和创建singer.js一样  同样也要创建song.js类 我们还要获取到每首歌对应 ...

  5. 系统分析与设计HW6

    1. 使用 UML State Model建模 建模对象: 参考 Asg_RH 文档, 对 Reservation/Order 对象建模. 建模要求: 参考练习不能提供足够信息帮助你对订单对象建模,请 ...

  6. REST API (四)之Generic views

    通用的视图 Django’s generic views... were developed as a shortcut for common usage patterns... 它们采取一些常见的习 ...

  7. 【MyBatis】----【MyBatis】--封装---别名---properties

    一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...

  8. Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib 的一种情形

    没有引用任何.net 4.5的东西,也没有引用 Newtonsoft.dll,原因是引用了微软的tlb类型库,引用方法如 https://www.cnblogs.com/nanfei/p/108798 ...

  9. Django聚合数据

    背景: 有些时候,光靠数据库中已有字段的数据,还不足以满足一些特殊场景的需求,例如显示一个作者的所有书籍数量. 这时候就需要在已有数据基础上,聚合出这些没有的数据. 为查询集生产聚合: Django ...

  10. 【css】子元素浮动到了父元素外,父元素没有随子元素自适应高度,如何解决?

    正常情况 如果子元素没有设置浮动(float),父元素的高度会随着子元素高度的改变而改变的. 设置浮动以后 父元素的高度不会随着子元素的高度而变化. 例如:在一个ul中定义若干个li,并设置float ...