iOS:OS版本检查的预处理器

时间:2013-09-20 12:50:18

标签: ios objective-c c-preprocessor

过去,我使用以下预处理器代码有条件地执行不同iOS版本的代码:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
    // target is lower than iOS 6.0
    #else
    // target is at least iOS 6.0
    #endif
#endif

然而,对于iOS 7,我遇到以下问题:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
    // target is lower than iOS 7.0
    NSLog(@"This message should only appear if iOS version is 6.x or lower");
    #else
    // target is at least iOS 7.0
    #endif
#endif

上面的NSLog消息显示在iOS 7下的控制台上。我做错了吗?

编辑:以下代码在iOS 7下运行(模拟器和设备)

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);

给出:版本60000

2 个答案:

答案 0 :(得分:8)

这是您的应用的部署目标(可安装应用的最低版本),而不是应用在设备中运行的版本。

在项目设置中,您可以设置该字段:

enter image description here

如果你这样改变,输入:

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);

返回7000

如果你想要的是检查手术系统的实际版本,我建议你这个问题:

How to check iOS version?

但是,它是在运行时完成的,而不是在编译时完成的。

答案 1 :(得分:0)

  #ifdef __AVAILABILITY_INTERNAL__IPHONE_9_0_DEP__IPHONE_9_0
    // you're in Xcode 7.x and can use buggy SDK with ios 9.0 only functionality
        CGFloat iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (iOSVersion>=9) {
        // same good old API that predates brave new post Steve Jobs world of bugs and crashes
    }
  #else
        // you're running Xcode 6.4 or older and should use older API here
  #endif