如何在程序启动时取消链接框架



我正在为 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 预期在:/System/Library/Frameworks/Security.framework/Security in/var/mobile/applications/C1FC10E5-0A36-4DEB-BD27-5028C205C89D/总线 Time.app/Bus 时间


所以问题是:

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

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

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

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

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

  1. 在文件列表中选择"安全框架"。
  2. 展开右侧边栏(查看>实用程序>显示实用程序)。
  3. 在"目标成员资格"下,将"必需"更改为"可选"。

最新更新