Расширение Swift Share не отображается для PDF-файлов

Используя Swift5.3.2, iOS13.0,

Расширение My Share работает с изображениями и видео.

Однако это не работает для PDF-файлов.

Проблема в том, что мое приложение не отображается в списке Share-Apps для PDF-документа, которым я пытаюсь поделиться со своим приложением.

Я знаю, что правила должны быть правильно установлены внутри info.plist.

Я предпринял следующие две попытки - но обе безуспешно!

Может ли кто-нибудь сказать мне, что нужно для расширения общего доступа к PDF в iOS?

попытка 1: Info.plist

      <key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsFileWithMaxCount</key>
            <integer>20</integer>
            <key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>100</integer>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>25</integer>
        </dict>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionPrincipalClass</key>
    <string>CustomShareNavigationController</string>
</dict>

попытка 2: Info.plist

      <key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <string>
        SUBQUERY (
            extensionItems,
            $extensionItem,
                SUBQUERY (
                    $extensionItem.attachments,
                    $attachment,
                    ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.file-url"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
                    || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
                ).@count == $extensionItem.attachments.@count
        ).@count == 1
        </string>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionPrincipalClass</key>
    <string>CustomShareNavigationController</string>
</dict>

1 ответ

Когда вы инициируете общий доступ к PDF-файлу в Safari, он фактически учитывает 2 элемента ввода: PDF-файл и URL-адрес. Поскольку ваш NSExtensionActivationRuleпредикат конкретно указывает, что @count == 1, он вернет false, так как вашему предикату соответствует более 1 элемента. Таким образом, исправление заключается в изменении @count == 1к @count >= 1или какая логика лучше всего подходит для вашего приложения.

Обновленный запрос, который работал у меня:

      <key>NSExtensionActivationRule</key>
<string>
SUBQUERY (
    extensionItems,
    $extensionItem,
        SUBQUERY (
            $extensionItem.attachments,
            $attachment,
            ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.file-url"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg"
            || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png"
        ).@count == $extensionItem.attachments.@count
).@count >= 1
</string>
Другие вопросы по тегам