如何在2.0兼容的应用程序中select使用iPhone OS 3.0function?

我想在我的2.0应用程序中运行3.0设备时使用iPhone OS 3.0的一些function。 我不想一直走到3.0,因为有客户不想更新。

我尝试了MapKit.framework(-weak_framework MapKit)的弱链接。 我发现它非常麻烦,因为我不得不欺骗编译器/链接器使用2.0 SDK,除了使用MapKit的代码之外的所有代码。

有没有人有更多的经验呢? 你在做什么来编译/链接。 有没有人向苹果公司提交过一个应用程序,这个应用程序与其他操作系统版本的框架弱连接?

苹果有一个如何做到这一点的例子,特别是使用MFMailComposeViewController的2.x兼容的应用程序….

http://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

答案涉及到使用3.0 SDK进行编译,将部署目标设置为2.x,确保3.0框架被标记为“弱”引用,然后做正确的事情,让你的代码工作,如果你在一个设备上新的框架不存在。

您可以使用dlopen函数始终链接到不属于当前SDK的框架。 当然,这不build议用于非公开的框架(在这种情况下,不build议在app store中禁止==)。 但是,随着未发布的操作系统版本的新框架公开化,这是一个select。 只要检查你的版本号,并打开框架可用。 如果你正在大量使用新的东西,那么对个人function很有用。

这可能不是你正在寻找的答案,但我使用的方法是只有两个单独的应用程序。 我没有用3.0升级更新我现有的应用程序,而是将其作为新应用程序发布。 旧用户可以使用2.0应用程序,只要他们想要的,并且需要3.0function的人可以升级。

这里的弱链接(包括库和框架)

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html#//apple_ref/doc/uid/20002378-107262

尽pipe这已经有点过时了…用最新的x代码,整个框架的弱连接过程实际上是比较容易的:

  1. 右键单击目标并select获取信息
  2. 转到“常规”选项卡
  3. 在底部的链接库部分中,将所需的“types”从需要更改为弱链接的所有库。
  4. 利润

我不认为你可以。 3.0和2.x使用完全不同的SDK,并链接到一组完全不同的文件和库。 我不确定,但我不认为你可以链接到3.0 SDK,仍然是2.X兼容。

(如果我错了,请添加评论)。