你如何在运行时#include框架

时间:2015-10-05 20:26:30

标签: ios objective-c frameworks include photosframework

我在App Store中有一个应用程序,其最低支持版本是iOS 7.1。

对于下一个版本,我已经对它进行了增强,以使用iOS 8中引入的Photos框架。

在下一版应用的代码中,我确保如果它在iOS 7设备上运行,则会隐藏新功能。

然而,当我尝试在我的iOS 7.1测试设备上运行应用程序时,它失败了,因为我已经在许多类中包含了Photos框架,使用:

#import <Photos/Photos.h>

我在Xcode中收到的错误是:

&#34; dyld:未加载库:/System/Library/Frameworks/Photos.framework/Photos   参考自:/var/mobile/Applications/2CA13C9B-EABC-47C3-A198-A7C703EACD59/ABCapp.app/ABCapp   原因:图片未找到&#34;

有没有办法在运行时执行此操作而不是编译时间以确保我仍然可以支持iOS 7?

感谢。

1 个答案:

答案 0 :(得分:0)

使用framework weak linking

  

当框架中的符号定义为弱链接时,符号不必在运行时出现,以便进程继续运行。静态链接器在引用该符号的任何代码模块中标识弱链接符号。动态链接器在运行时使用相同的信息来确定进程是否可以继续运行。如果框架中不存在弱链接符号,则代码模块可以继续运行,只要它不引用该符号。

here's Marco Arment take on weak linking

  

如果您希望自己的iPhone或iPad应用程序与旧版本的操作系统一起使用,或者如果您想制作一个可在iPhone和iPad上运行的通用应用程序,则需要确保代码永远不会尝试调用方法或实例化其操作系统上不存在的对象。 [...]避免所有这一切的另一个选择是弱链接,这使得运行时在第一次使用之前手动查找每个符号的存在。