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

Objective c 如何在程序启动时取消框架链接,objective-c,ios,frameworks,linker,dropbox,Objective C,Ios,Frameworks,Linker,Dropbox,我正在为iPhoneOS3.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上启动。输出中存在错误

我正在为iPhoneOS3.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/Bus Time.app/Bus Time


因此,问题是:

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

谢谢你的回答。我很感激

  • 在文件列表中选择安全框架
  • 展开右侧边栏(视图>实用程序>显示实用程序)
  • 在“目标成员资格”下,将“必需”更改为“可选”
  • 在文件列表中选择安全框架
  • 展开右侧边栏(视图>实用程序>显示实用程序)
  • 在“目标成员资格”下,将“必需”更改为“可选”

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

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


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

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

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


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

    为什么要将目标锁定在3.x?仍然运行3.x的iOS设备数量少得令人难以置信。大约一年前,3.x仅在约11%的iOS设备上运行。那是在5.x之前,6.x就要到了。谢谢你的回答!就因为我使用的是iPhone第一代。这一代的设计令人难以置信,它已经为我工作了4年多。我知道是时候买新的4S了,但不是现在。我需要先开发一些东西。您不能在运行时以编程方式取消某些东西的链接。您必须以另一种方式进行,如果可能,以编程方式链接它,这也意味着以编程方式访问类、选择器和/或C符号。通常,您可以使用弱框架链接来让运行时为您完成所有困难的工作,因此您唯一需要手动完成的部分就是在使用符号之前检查它们是否为null。正确的答案取决于您是否想要指向弱链接的指针,以便您可以这样尝试,或者您是否知道这样做行不通,并且希望知道如何动态加载。谢谢您的回答。我对动态链接的了解真的不多。我会努力了解更多。我尝试将这些框架标记为可选的(项目-构建阶段-将二进制文件与库链接),之后我的总线时间在iPhone上成功启动。我尝试在dropbox示例应用程序中也这样做。开始-好的。尝试使用dropbox api功能-崩溃!正如所料。模拟器运行得很好。所以模拟器有一个链接框架,iPhone没有。所以我的问题解决了!你为什么瞄准3.x?仍然运行3.x的iOS设备数量少得令人难以置信。大约一年前,3.x仅在约11%的iOS设备上运行。那是在5.x之前,6.x就要到了。谢谢你的回答!就因为我使用的是iPhone第一代。这一代的设计令人难以置信,它已经为我工作了4年多。我知道是时候买新的4S了,但不是现在。我需要先开发一些东西。您不能在运行时以编程方式取消某些东西的链接。您必须以另一种方式进行,如果可能,以编程方式链接它,这也意味着以编程方式访问类、选择器和/或C符号。通常,您可以使用弱框架链接来让运行时为您完成所有困难的工作,因此您唯一需要手动完成的部分就是在使用符号之前检查它们是否为null。正确的答案取决于您是否想要指向弱链接的指针,以便您可以这样尝试,或者您是否知道这样做行不通,并且希望知道如何动态加载。谢谢您的回答。我对动态链接的了解真的不多。我会努力了解更多。我尝试将这些框架标记为可选的(项目-构建阶段-将二进制文件与库链接),之后我的总线时间在iPhone上成功启动。我尝试在dropbox示例应用程序中也这样做。开始-好的。尝试使用dropbox api功能-崩溃!正如所料。模拟器运行得很好。所以模拟器哈