dyld未找到AVAssetDownloadTask

13
尝试在应用程序中添加离线HLS(一项新的iOS 10功能)。我正在尝试以下内容,以便该应用程序仍可在iOS 9上运行而不具备离线HLS功能。在iOS 10上运行良好,也可以编译为iOS 9。
    @available(iOS 10.0, *)
    @objc class DownloadManager: NSObject, AVAssetDownloadDelegate {
           //Do stuff with downloading assets
      }

然而,当我在iOS 9设备上运行此应用程序时,应用程序会立即崩溃并显示以下消息:

dyld: Symbol not found: _OBJC_CLASS_$_AVAssetDownloadTask Referenced from: /var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod Expected in: /System/Library/Frameworks/AVFoundation.framework/AVFoundation in /var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod

我已将与此相关的所有代码限制为DownloadManager类,因此不知道下一步该怎么办。谢谢!

3个回答

12

我找到了解决方法。我必须将AVFoundation设置为弱链接。 我在苹果的网站上找到了相关信息。

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html

整个框架的弱链接

当您引用另一个框架中的符号时,大多数这些符号会与您的代码强链接。为了创建指向符号的弱链接,包含符号的框架必须明确添加weak_import属性(请参阅标记弱链接符号)。但是,如果您不维护框架并需要将其符号设置为弱链接,则可以显式告诉编译器将所有符号标记为弱链接。为此,您必须在Xcode中打开项目,并修改目标连接到框架的方式,如下所示:

选择要修改的目标并展开“链接二进制文件与库”构建阶段以查看目标当前连接的框架。如果您想要弱链接到的框架在“链接二进制文件与库”构建阶段中列出,请选择它,然后选择“编辑”>>“删除”以将其删除。现在您可以告诉链接器为该框架使用弱链接。

选择目标,打开其信息窗口,然后单击“生成”。在“其他链接器标志”构建设置中,添加以下命令行选项规范,其中<framework_name>是要弱链接到的框架名称:-weak_framework <framework_name> 构建产品。


所以解决方案是:将AVFoundation添加到“链接二进制文件和库”中,并进行可选设置? - Renatus
不是的,(至少我没有这样做)步骤在链接和我发布的评论中有描述。 - NickDK

6
我也遇到了同样的问题,我使用了弱链接AVFoundation框架。以下是步骤:
在“构建设置”中,在“其他链接器标志”中添加-weak_framework AVFoundation。

1
这张图片展示了如何弱化一个框架:

how to weak link a framework


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接