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

时间:2012-05-24 19:41:09

标签: objective-c ios frameworks linker dropbox

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

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

我决定保存在3.1.3下使用该程序的可能性,但如果它是4.2或更高,则会有Dropbox功能。

要使用Dropbox框架,我需要链接另一个框架:

  • Security.framework
  • 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  在/ var / mobile / Applications / C1FC10E5-0A36-4DEB-BD27-5028C205C89D / Bus Time.app/Bus Time


所以问题是:

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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