如何在运行时包含框架?



我在app Store中有一个应用,它的最低支持版本是iOS 7.1。

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

在下一个版本的应用程序的代码中,我已经确保如果它在iOS 7设备上运行,新功能是隐藏的。

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

#import <Photos/Photos.h>

我在Xcode中收到的错误是:

"dyld: Library not loaded:/System/Library/Frameworks/Photos.framework/Photos .参考来源:/var/mobile/applications/2CA13C9B-EABC-47C3-A198-A7C703EACD59/ABCapp.app/ABCapp原因:"图像未找到"

是否有办法在运行时而不是编译时做到这一点,以确保我仍然可以支持iOS 7?

谢谢。

使用框架弱链接。

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

Marco Arment对弱链接的看法:

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

最新更新