Расширение миниатюры iOS 13 (QLThumbnailProvider) не вызывается - PullRequest
0 голосов
/ 20 октября 2019

Тестовое приложение для документов на моем браузере работает нормально. Это показывает браузер. У него есть специальный экспортируемый тип документа. Я могу создавать файлы этого типа, я могу открывать файлы этого типа.

Есть только одна проблема. Мое приложение также включает в себя расширение миниатюр. Насколько я могу судить, единственный метод этого расширения (переопределение 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-списка расширений миниатюр:

<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 not волшебным образом заставили это начать работать.

1 Ответ

0 голосов
/ 01 ноября 2019

Начиная с iOS13, появилась новая QuickLookThumbnailing.framework, которая обрабатывает миниатюры для iOS и macOS. Убедитесь, что он связан вашим расширением, иначе вы получите тихий сбой, когда dyld попытается загрузить фреймворк.

...