0

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

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

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

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

#import <Photos/Photos.h>

我在 Xcode 中收到的错误是:

“dyld:库未加载:/System/Library/Frameworks/Photos.framework/Photos 引用自:/var/mobile/Applications/2CA13C9B-EABC-47C3-A198-A7C703EACD59/ABCapp.app/ABCapp 原因:找不到图像”

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

谢谢。

4

1 回答 1

0

使用框架弱链接

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

是 Marco Arment 对弱链接的看法

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

于 2015-10-05T20:36:04.480 回答