我有一些代码我想只在最新的iPhone SDK(3.0)上执行,但我似乎无法找到一种方法来定位3.0并忽略2.2.1等。有一个ifdef语句,但它似乎只涵盖了整个iPhone:
#if TARGET_OS_IPHONE
感谢任何帮助。
答案 0 :(得分:89)
您可以使用此#define更改为每个SDK构建的内容...
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_2_2
// iPhone 3.0 code here
#endif
在运行时执行此操作以运行3.0及更高版本的代码:
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 3.0)
{
// iPhone 3.0 code here
}
答案 1 :(得分:19)
我要小心floatValue返回结果:
[[[UIDevice currentDevice] systemVersion] floatValue]
与任何花车一样,它可能不完全符合您的预期。在我的系统上运行上面的操作时,混淆了我的条件语句没有执行的原因,我注意到返回的值是:
3.20000005
请在此处推荐解决方案:How to check iOS version?
摘录:
NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"3.1.3" options: NSNumericSearch];
if (order == NSOrderedSame || order == NSOrderedDescending) {
// OS version >= 3.1.3
} else {
// OS version < 3.1.3
}
答案 2 :(得分:6)
更新:建设时使用Xcode 4在iPhone(4.3.1)上运行,这似乎对我不起作用。另外,我得到__IPHONE_OS_VERSION_MIN_REQUIRED = 30200
。
The iPhone Developer's Cookbook说你也可以这样做:
#ifdef _USE_OS_4_OR_LATER
// code to compile for 4.0 or later
#else
// code to compile for pre-4.0
#endif
而且,它似乎对我有用。 :)
答案 3 :(得分:4)
非常确定你也可以这样做:
#ifdef __IPHONE_3_0
// 3.0 code here
#endif
答案 4 :(得分:0)
这是Xcode的构建选项。左上角的下拉菜单上写着“myapp - 3.0 | Debug”之类的内容 选择你想要的构建和presto,你的完成。
答案 5 :(得分:0)
使用从this answer添加OTHER_CFLAGS =“ - g3 -save-temps -dD”的技巧,我发现定义了__IPHONE_OS_VERSION_MIN_REQUIRED 20000,项目的目标是2.2.1。也许这会奏效吗?
答案 6 :(得分:0)
我很确定对OP的评论总结了这一点。你不能。因为编译时指令不能做出运行时决定。在Xcode中,如果你的目标是3.0,它将无法在2.2.1手机上运行。如果你的目标是2.2.1,它将无法编译,因为你有3.0特定的代码。
唯一真正的解决方案是您的应用程序的两个版本,其中一个版本为3.0编译,另一个版本为2.2.1。
答案 7 :(得分:-2)
嗯,我的两分钱:
如何使用最新版本建立您的应用程序说3.0,以便您可以利用所有新的&amp;很酷的API,并指定部署目标作为您想要支持的最新版本,所以那些没有时间去升级他们的设备的人将继续运行您的应用程序。在这种情况下,如上所示,您需要检查最新版本的SDK并提供备用功能,以使您的应用程序向后兼容。
此致 Hardik