如果我的iOS 4 iPhone应用程序在iOS 3.2手机上执行,会发生什么?

问题描述:

我认为它只会崩溃,对吧?如果我开发一款使用iOS 4 SDK的iPhone应用程序,并使其进入应用程序商店,我如何确保它不会被运行旧版iOS的用户下载?如果我的iOS 4 iPhone应用程序在iOS 3.2手机上执行,会发生什么?

在此先感谢您的帮助!

+0

目前还没有iOS 3.2手机。 iOS 3.2仅适用于iPad。 iOS 3.0和3.1适用于iPhone。 – 2010-06-08 02:05:56

如果您的项目指定4.0作为目标,那么它甚至不会在3.2手机上加载 - 没问题。

当您将应用程序发布到商店时,您可以指定最低的操作系统级别和可接受的设备(例如,您不需要在iPod Touch上查找GPS)。有一个兼容性检查可以防止应用程序在不兼容的情况下被加载。应用程序审批流程(希望)确保您所说的实际上是兼容的。

如果您以某种方式使用设备上不存在的API(因为您在引入该API之前定位了某个版本或出于任何其他原因),那么是的,您将因未知选择器而崩溃。

您可以使用

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200 

检查你的目标是什么版本?第一个数字(3)是主要的修订,第三个数字(2)是次版本。因此显示的检查是3.2。

而不是使用编译时的预处理程序指令来分割你的代码,可以考虑使用运行时检查像respondsToSelector:,使用针对零NSClassFromString检查,以确定是否存在类和联弱到新的框架和库使用亚当埃伯巴赫的做法。

这将允许你写一个应用程序,可以住在多个设备上,无需任何代码隔离或单独的二进制文件。

+0

会导致代码膨胀,或者更糟糕,性能更慢/更重? – 2010-06-08 10:59:49

+0

我相信性能的影响是完全可以忽略的......根据你的代码膨胀的定义,我倾向于不同意。这里有几行代码,可以在删除对旧操作系统的支持时删除。 – Jasarien 2010-06-09 11:49:45

+0

respondsToSelector是一个很好的方法,可能比预处理器更好。 – 2010-06-10 22:17:34