iOS分享扩展在图像URL上无法工作

5

我有一个共享扩展程序,使用以下规则:

<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”,我的共享扩展程序就可以解析该网站了。
我做错了什么?
谢谢。

我可以仅使用public.url获取Safari中的.jpg,并删除public.image的所有子内容。 - Gr8Warrior
3个回答

3
你没有做错任何事,只是因为苹果定义的常见键无法包含所有情况。(保留html标签)

enter image description here

对于您的情况,您需要编写自己的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 更改为任何其他统一类型标识符
以下是一些常见的 UTI: enter image description here

2
基于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>

0

我通过以下方式解决了这个问题:

<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 做到了这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接