过去,我使用以下预处理器代码有条件地执行不同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
答案 0 :(得分:8)
这是您的应用的部署目标(可安装应用的最低版本),而不是应用在设备中运行的版本。
在项目设置中,您可以设置该字段:
如果你这样改变,输入:
NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);
返回7000
如果你想要的是检查手术系统的实际版本,我建议你这个问题:
但是,它是在运行时完成的,而不是在编译时完成的。
答案 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