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

oo7oh9g9  于 2023-05-19  发布在  iOS
关注(0)|答案(2)|浏览(147)

我的基于文档浏览器的测试应用程序工作正常。显示浏览器。它具有特殊的导出文档类型。我可以创建这种类型的文件,我可以打开这种类型的文件。
只有一个问题我的应用程序还包括一个缩略图扩展。据我所知,该扩展的单个方法(QLThumbnailProvider provideThumbnail(for:_:)的覆盖)从未被调用。因此,我的文件(如文档浏览器、文件应用程序等中所示)没有正确的缩略图。
有人在iOS 13中使用缩略图扩展吗?我正在设备上测试(因为文档浏览器应用程序在模拟器上不起作用)。
这是我的信息列表设置。首先是APP。下面是我们定义文档类型并导出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的发布 * 没有 * 神奇地让它开始工作。

wf82jlnq

wf82jlnq1#

自iOS13以来,有一个新的QuickLookThumbnailing.框架,用于处理iOS和macOS的缩略图。确保它是由你的扩展链接的,否则当dyld试图加载框架时,你会得到一个无声的崩溃。

eoigrqb6

eoigrqb62#

我知道这个问题已经很老了,如果我的建议太明显,我提前道歉,但是你检查过smiley.jpg有正确的目标成员吗?它应该是缩略图扩展目标的成员。我还没有在你的例子中尝试过,但是在我自己的设置中,我发现如果成员资格被设置为,例如,主应用程序而不是扩展程序,你的问题就会出现。希望这能帮上忙。顺便说一下,我浪费了大量的时间试图使QLThumbnailProvider与QLThumbnailReply(contextSize:currentContextDrawing:)一起工作,但无济于事。什么皮塔。其他初始化器工作正常。

相关问题