如何定位特定的iPhone版本?

时间:2009-05-04 13:38:34

标签: iphone

我有一些代码我想只在最新的iPhone SDK(3.0)上执行,但我似乎无法找到一种方法来定位3.0并忽略2.2.1等。有一个ifdef语句,但它似乎只涵盖了整个iPhone:

#if TARGET_OS_IPHONE

感谢任何帮助。

8 个答案:

答案 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