42

当它在 3.0 设备上运行时,我想在我的 2.0 应用程序中使用 iPhone OS 3.0 的一些功能。我不想一路走3.0,因为还有客户还不想更新。

我对 MapKit.framework (-weak_framework MapKit) 的弱链接进行了一些实验。我发现这很麻烦,因为我不得不欺骗编译器/链接器以将 2.0 SDK 与除使用 MapKit 的代码之外的所有代码一起使用。

有没有人有这方面的经验?你在做什么使它编译/链接。是否有人已经向 Apple 提交了一个应用程序,该应用程序与其他操作系统版本的框架建立了弱链接?

4

5 回答 5

36

Apple 有一个如何做到这一点的示例,特别是制作一个使用 MFMailComposeViewController 的 2.x 兼容应用程序....

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

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

于 2009-06-22T05:32:26.287 回答
5

您始终可以使用 dlopen 函数链接到不属于当前 SDK 的框架。当然,对于不公开的框架,这是不推荐的(在这种情况下,不推荐 == 应用商店禁止)。但是,随着未发布版本的操作系统中的新框架公开,这是一种选择。只需检查您的版本号,并打开可用的框架。对个别功能很有用,如果您大量使用新东西,则不是很多。

于 2009-06-12T13:58:31.403 回答
1

这可能不是您要寻找的答案,但我使用的方法是只拥有两个单独的应用程序。我没有用 3.0 升级来更新我现有的应用程序,而是将它作为一个新应用程序发布。老用户可以随意使用 2.0 应用,想要 3.0 功能的人可以升级。

于 2009-06-12T13:43:40.410 回答
0

关于弱链接(库和框架)的很棒的方法在这里:

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

虽然它有点过时了......使用最新的 x 代码,弱链接整个框架的过程实际上更容易:

  1. 右键单击目标并选择获取信息
  2. 转到“常规”选项卡
  3. 在底部的链接库部分中,将您想要弱链接的所有库的类型从必需更改为弱。
  4. 利润
于 2010-08-25T22:35:52.210 回答
-1

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

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

于 2009-06-12T13:49:26.293 回答