未调用 iOS 13 缩略图扩展 (QLThumbnailProvider)

Posted

技术标签:

【中文标题】未调用 iOS 13 缩略图扩展 (QLThumbnailProvider)【英文标题】:iOS 13 thumbnail extension (QLThumbnailProvider) not being called 【发布时间】:2020-02-16 12:31:27 【问题描述】:

我的基于文档浏览器的测试应用运行良好。它显示浏览器。它具有特殊的导出文档类型。我可以创建那种类型的文件,我可以打开那种类型的文件。

只有一个问题。我的应用程序还包括一个缩略图扩展。据我所知,该扩展的单一方法(QLThumbnailProvider provideThumbnail(for:_:) 的覆盖)永远不会被调用。所以我的文件,如文档浏览器、文件应用程序等中所示,没有正确的缩略图。

有没有人在 ios 13 中获得缩略图扩展?我正在设备上进行测试(因为文档浏览器应用无法在模拟器上运行)。

这是我的 Info.plist 设置。首先,应用程序。这是我们定义文档类型和导出 UTI 的部分:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>PeopleGroup2</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.neuburg.pplgrp2new</string>
        </array>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.content</string>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>PeopleGroup2</string>
        <key>UTTypeIconFiles</key>
        <array/>
        <key>UTTypeIdentifier</key>
        <string>com.neuburg.pplgrp2new</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>pplgrp2new</string>
        </dict>
    </dict>
</array>

这是缩略图扩展 Info.plist 的关键部分:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>QLSupportedContentTypes</key>
        <array>
            <string>com.neuburg.pplgrp2new</string>
        </array>
        <key>QLThumbnailMinimumDimension</key>
        <integer>10</integer>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.quicklook.thumbnail</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).ThumbnailProvider</string>
</dict>

如您所见,缩略图扩展支持的内容类型与应用导出的 UTI 相匹配。但是显然没有调用 ThumbnailProvider 代码。

这里是缩略图提供程序代码,只是一个底层测试:

@objc class ThumbnailProvider: QLThumbnailProvider 
    override func provideThumbnail(for request: QLFileThumbnailRequest, 
        _ handler: @escaping (QLThumbnailReply?, Error?) -> Void) 
            let url = Bundle.main.url(forResource: "smiley", withExtension: "jpg")!
            let reply = QLThumbnailReply(imageFileURL: url)
            handler(reply, nil)
    

但是好像没有调用。

有人可以给我看一个实际有效的例子吗?

实际测试项目在这里:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/bk2ch23p810DocumentBrowser

编辑:iOS 13.2 的发布没有神奇地让这开始工作。

【问题讨论】:

QLThumbnailProvider 在使用 Xcode 11 编译相应的应用程序扩展时被破坏。我有类似的问题并尝试使用 Xcode 的 Xcode 11 和 Xcode 10.3 编译 Apple 自己的 Particles sample app。示例应用程序也使用UIDocumentBrowserViewControllerUIDocumentQLThumbnailProvider。我只能使用 Xcode 10.3(设备上的 iOS 12,模拟器上的 iOS 12 + 13)获得工作缩略图。 【参考方案1】:

从 iOS13 开始,有一个新的 QuickLookThumbnailing.framework 可以处理 iOS 和 macOS 的缩略图。确保它由您的扩展程序链接,否则当 dyld 尝试加载框架时,您将得到一个静默崩溃。

【讨论】:

我的缩略图提供程序扩展链接和导入 QuickLookThumbnailing 框架。当您创建缩略图扩展时,所有这些都会自动发生。确实,Apple 的 Particle 应用程序以您描述的方式静默崩溃,但我的却没有。我不是在问他们的应用程序。我在问我的。为了帮助我,请下载我的项目并使缩略图扩展以某种方式开始工作。 :) 告诉我你是怎么做到的。 :))))

以上是关于未调用 iOS 13 缩略图扩展 (QLThumbnailProvider)的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单视频缩略图:尝试在 IOS 13.1.3 设备上创建视频缩略图表单本地存储时出错

将图像和缩略图一起上传,但未生成缩略图

未调用 iOS 推送通知服务扩展 (didReceive)

引导缩略图列表未显示缩略图

如何在不使用 safari 或 iOS 上的海报的情况下获取 HTML5 视频缩略图?

Youtube 未加载高分辨率缩略图