2

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

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

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

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

4

6 回答 6

1

最简单的方法是围绕 3.0 代码和 2.2.1 代码进行#define,以便进行条件编译。注意:这意味着您将有一个用于 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

你将不得不弄清楚真正的定义是什么(我只是编造的:))

希望有帮助

于 2009-06-24T21:19:36.033 回答
1

使用 3.0 SDK,但将“iPhone OS Deployment Target”设置为 2.2.1 或更早版本。

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

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

于 2009-06-27T14:23:51.723 回答
0

有一个关于 2.0 iPhone OS 中的 3.0 功能的问题。但是您想知道(在运行时)符号是否存在于 UIKit 中或其他任何地方。恐怕,那里还没有回答。

于 2009-06-24T21:30:42.393 回答
0

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

另一方面,OS 3.0 的采用率非常高(根据我看到的一个数据,已经超过 75%),因此仅让您的应用程序采用 OS 3.0 也是一个需要考虑的解决方案。

于 2009-06-24T23:02:16.170 回答
0

那么,如果你想要一个支持多个操作系统版本的二进制文件,你也应该怎么做?我特别纠结于如何有条件地为 3.0 加载必要的库。

于 2009-06-29T19:58:42.757 回答
-1
#ifdef __IPHONE_3_0
// iPhone 3.0 specific stuff
#else
// iPhone 2.2 (or below) specific stuff
#endif
于 2009-06-24T21:33:44.447 回答