Расширение iOS Share не работает с URL-адресами изображений

У меня есть расширение общего доступа, которое использует эти правила:

<dict>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
    <key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
    <integer>1</integer>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>10</integer>
    <key>NSExtensionActivationSupportsText</key>
    <integer>1</integer>
</dict>

Он отлично работает для обычных веб-сайтов и изображений, но я не могу анализировать URL-адреса изображений следующим образом: ( http://www.zappos.com/images/z/3/3/5/4/0/3/3354034-p-2x.jpg). Я устал добавлять другие правила, но мое расширение общего доступа не появляется, когда я открываю этот веб-сайт в Safari и нажимаю «Поделиться».

Но если я сделаю правило TRUEPREDICATE, мое расширение общего доступа сможет анализировать сайт.

Что я делаю неправильно? Спасибо


person Canberk Ersoy    schedule 06.07.2016    source источник
comment
Я могу получить .jpg из сафари, используя только public.url и удалив все дочерние элементы public.image.   -  person Shailendra Suriyal    schedule 01.09.2017


Ответы (3)


Основываясь на ответе wj2061, следующий предикат захватит все без исключения вложения, предоставленные хост-приложением.

<key>NSExtensionActivationRule</key>
<string>SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.item" ||
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.content"
    ).@count == $extensionItem.attachments.@count
    ).@count > 0
</string>
person Alex    schedule 01.11.2016

Вы не сделали ничего плохого, это просто потому, что общие ключи (следующей таблицы), определенные Apple, не могут включать все случаи.

введите здесь описание изображения

В вашем случае вы должны написать свою собственную строку NSPredicate, как Apple предложила здесь: Объявление поддерживаемых типов данных для общего ресурса или расширения действия

Я изменил пример Apple следующим образом:

<key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <string>SUBQUERY (
                  extensionItems,
                  $extensionItem,
                   SUBQUERY (
                     $extensionItem.attachments,
                     $attachment,
                     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image";
                   ).@count == $extensionItem.attachments.@count
                ).@count == 1
       </string>
    </dict>

Вы можете изменить public.image на любой другой универсальный идентификатор типа .

Некоторые из распространенных ИМП перечислены ниже:
введите здесь описание изображения

person wj2061    schedule 10.07.2016

Я решил эту проблему с помощью

<key>NSExtensionActivationRule</key>
            <string>SUBQUERY (
                extensionItems,
                $extensionItem,
                SUBQUERY (
                $extensionItem.attachments,
                $attachment,
                (
                ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO &quot;com.adobe.pdf&quot;
                || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO &quot;public.image&quot;
                || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO &quot;public.url&quot;
                )
                ).@count == $extensionItem.attachments.@count
                ).@count > 0</string>

Последняя строка @count > 0 помогла мне.

person Shailendra Suriyal    schedule 24.10.2017