`
啸笑天
  • 浏览: 3465232 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

区分ios设备,os版本,sdk版本

    博客分类:
  • 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/
分享到:
评论
1 楼 啸笑天 2013-06-17  
https://github.com/erica/uidevice-extension

相关推荐

    12.1的ios的xcode包

    在iOS的开发过程中,每个版本会有多个内部构建版本,这些版本通常以字母数字组合的形式表示,如16B5059d,用于区分不同的更新和修复。这表明该Xcode包可能包含了针对这个iOS构建版本的调试工具和库,以支持开发者...

    iOS 12.2真机调试包

    16E5181e是iOS 12.2的内部版本号,用于区分不同阶段的更新。 安装步骤如下: 1. 下载iOS 12.2的设备支持文件(12.2 (16E5181e))。 2. 打开Finder,找到Xcode应用程序,右键点击并选择“显示包内容”。 3. 进入路径...

    Whiteboard-bridge:white-web-sdk,white-sdk-ios,white-sdk-android

    iOS 习惯为秒,在 iOS sdk 中进行转换。 DSBridge 使用 dsBridge.registerAsyn方法中,不使用Promise,使用.then()写法。 dsBridge的注册方法:dsBridge.register,dsBridge.registerAsyn区分命名空间。 没有异步的 ...

    真机调试包ios 12.1和12.2(16E5201d)

    这些文件可能包含证书、配置描述文件(Profile)或者设备支持文件,它们是Xcode连接并调试特定iOS版本设备所必需的。 总的来说,这个压缩包为开发者提供了一个方便的途径,让他们能够在iOS 12.1和12.2设备上进行...

    ios 推送通知

    APNs是Apple提供的一项服务,它允许开发者向已安装其应用程序的iOS、iPadOS、watchOS和macOS设备发送通知。这些通知可以是提醒、消息、更新或其他与应用程序相关的实时信息。 要使用APNs,开发者需要在Apple ...

    xcode真机调试12.1(16B91) (16B92)支持包

    这两个版本号通常是iOS的内部构建号,用于区分不同的更新迭代。 Xcode的真机调试是开发者进行应用程序测试的关键环节,它允许开发者在实际设备上运行和测试应用,以确保其在不同硬件和操作系统版本上的兼容性和性能...

    libstdc++.zip

    2. **区分设备类型**:压缩包中的"iPhoneOS"和"IphoneSimulator"分别对应真机和模拟器的库文件。你需要根据项目的需求,选择合适的版本放置到正确的位置。通常,iPhoneOS文件用于真实设备,而iPhoneSimulator文件...

    Ipad真机调试 证书的制作

    - 在创建App ID时,需要注意区分特定App ID和通配符App ID的使用场景,避免在不同的SDK版本中出现兼容性问题。 - 保持证书的有效性和安全性是非常重要的,确保定期更新证书并妥善保管相关的私钥。 #### 五、总结 ...

    qt.rar_qt移植

    例如,对于移动设备,可能需要安装特定版本的Android SDK或iOS SDK。确保所有必要的编译工具、依赖库和开发环境已就绪。 2. **获取QT源码**:从QT官方网站下载适用于目标平台的源码,或者从Git仓库中克隆。不同平台...

    极光推送官方Demo

    极光推送(JPush)是阿里云推出的一款高效、稳定、便捷的移动推送服务,它可以帮助开发者实现向Android、iOS以及HarmonyOS等多平台设备推送通知和自定义消息。官方Demo是为开发者提供快速集成和理解JPush功能的实例...

    产品项目163问闯关

    - 操作系统:介绍了常见的电脑操作系统,如Windows、UNIX、Linux、苹果操作系统(macOS)、Chrome OS等,以及常见的手机操作系统,如Android、iOS、Symbian、Windows Phone、BlackBerry等。 - 数据库:区分了关系型...

    客户端打点日志

    - `sdkver`:SDK版本。 - `deviceid`:设备唯一标识。 - `channel`:渠道信息。 - `platform`:平台类型。 - `carrier`:运营商信息。 - `ua`:设备型号信息。 - `mac_wifi`:Wi-Fi MAC地址。 - `mac_3g`:3G MAC...

    互联网支付系统概要设计

    - **后台开发**:使用Cobol、JCL等技术,支持OS390平台以及其他操作系统。 - **中间件**:选择Websphere、Weblogic等,兼容Unix/Linux和Windows环境。 - **前端开发**:采用Eclipse、GWT等工具,兼容Unix/Linux和...

Global site tag (gtag.js) - Google Analytics