1

我正在为 iPhone OS 3.1.3 开发,我需要使用 Dropbox API。

问题是 Dropbox API 至少需要 iOS 4.2。行。

我决定保留在 3.1.3 下使用该程序的可能性,但如果是 4.2 及更高版本,就会有 Dropbox 功能。

要使用 Dropbox 框架,我需要链接其他框架:

  • 安全框架
  • QuartzCore.framework

我已经做到了。

当我将 Dropbox.framework 链接到我的项目时,该程序在 iPhone 模拟器上运行良好,但无法在我的 iPhone 3.1.3 上启动。输出中有错误:


dyld:找不到符号:_kSecAttrAccessible 引用自:/var/mobile/Applications/C1FC10E5-0A36-4DEB-BD27-5028C205C89D/Bus Time.app/Bus Time Expected in:/System/Library/Frameworks/Security.framework/Security in /var/mobile/Applications/C1FC10E5-0A36-4DEB-BD27-5028C205C89D/Bus Time.app/Bus Time


所以问题是:

我可以在程序启动时检测 iOS 版本并取消链接框架吗?或者您能否提供另一种使用 3.1.3 的保管箱的方法?

谢谢您的回答。我很感激。

4

2 回答 2

2
  1. 在文件列表中选择安全框架。
  2. 展开右侧边栏(视图 > 实用程序 > 显示实用程序)。
  3. 在“目标会员”下,将“必需”更改为“可选”。
于 2012-05-24T23:27:36.097 回答
2

您不能在运行时以编程方式取消链接框架。

您可以在运行时以编程方式链接框架,例如通过使用 NSBundle API、dlopen 或各种其他方式。如果这样做,则必须手动加载所需的 ObjC 对象和/或 C 符号。

或者,您可以弱链接框架,这使得运行时为您完成大部分工作。如果它在那里,它将在启动时加载,并且它的所有 ObjC 对象和 C 符号都可供您使用。否则,它的所有 ObjC 对象和 C 符号都将为空。因此,您所要做的就是检查 null 以决定是否运行需要该框架的代码。

于 2012-05-24T23:32:25.570 回答