构建2.2.1时可以使用iPhone 3.0符号吗?

时间:2009-06-24 21:13:29

标签: iphone iphone-sdk-3.0

我已经在iPhone应用程序上工作了一段时间,但仍然想支持2.2.1

其中一项功能是用户可以通过点击链接通过电子邮件启动应用程序。在2.2.1世界中,我通过实现应用程序:handleOpenURL:message来实现这一点。

在iPhone 3.0中,他们改变了添加应用程序:didFinishLaunchingWithOptions:method(这很棒,比旧方法更有意义)。在该方法中,您使用密钥UIApplicationLaunchOptionsURLKey来查找URL是什么。

问题是,如果我使用该密钥,我的应用程序不会在2.2.1中构建,因为它是在3.0中引入的。什么是最优雅的解决方案,仍然支持2.2.1?我正在考虑使用UIApplicationLaunchOptionsURLKey枚举的实际值,但我认为这很难看。有没有人遇到这个并想到更好的方法?

6 个答案:

答案 0 :(得分:1)

最简单的方法是#define 3.0代码和2.2.1代码,这样你就可以进行条件编译。注意:这意味着您将拥有一个3.0的二进制文件和另一个的二进制文件。

所以

#ifdef IPHONE_OS_3.0

/* DO 3.0 stuff */

#endif

#ifdef IPHONE_OS_2.2.1

/*DO 2.2.1 stuff */
#endif

作为对你的评论的回应,如果代码不同,你必须为每个代码块设置不同的#ifdef #endif,否则如果它只是3.0的不同,你会做类似的事情

#ifdef IPHONE_OS_3.0

/* DO 3.0 STUFF */

#else
/* DO STUFF FOR OTHER THAN 3.0 */
#endif

你将不得不弄清楚真正的定义是什么(我刚刚制定了它们):)

希望有所帮助

答案 1 :(得分:1)

使用3.0 SDK,但将“iPhone OS部署目标”设置为2.2.1或更早版本。

在OS 3.0下,您的应用程序:didFinishLaunchingWithOptions:将被调用,如果您在OS 2.2.1上运行,将会调用其中一个旧方法。

如果您不尝试使用任何其他3.0功能,我认为您不需要做任何其他事情,但您也可以查看有关Apple my other answer示例的MailComposer

答案 2 :(得分:0)

有一个question about 3.0 features in 2.0 iPhone OS。但是你想知道(在运行时)符号是否在UIKit中或者在UIKit中退出。我很害怕,那里还没有回答。

答案 3 :(得分:0)

要拥有一个适用于两个操作系统版本的应用程序,您必须针对2.2.1 SDK进行构建。由于该SDK不知道UIApplicationLaunchOptionsURLKey符号,如果您在OS 3.0上运行应用程序时识别它的价值,则别无选择,只能在代码中定义它。

另一方面,OS 3.0的采用非常强大(根据我见过的一个数字已经超过75%),所以只使用你的应用OS 3.0也是一个需要考虑的解决方案。

答案 4 :(得分:0)

那么如果你想拥有一个支持多个OS版本的二进制文件,你还应该怎么做?我特别坚持如何有条件地为3.0加载必要的库。

答案 5 :(得分:-1)

#ifdef __IPHONE_3_0
// iPhone 3.0 specific stuff
#else
// iPhone 2.2 (or below) specific stuff
#endif