iOS共享扩展程序无法处理图片网址

时间:2016-07-06 14:16:05

标签: ios ios-extensions

我有一个使用这些规则的共享扩展程序:

<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>

它适用于普通网站和图片,但我无法像这样解析图像网址:(http://www.zappos.com/images/z/3/3/5/4/0/3/3354034-p-2x.jpg)。我厌倦了添加其他规则,但当我使用Safari打开此网站并点击分享时,我的分享扩展仍然不会出现。

但如果我制定规则TRUEPREDICATE,我的共享扩展程序可以解析该网站。

我做错了什么? 感谢

3 个答案:

答案 0 :(得分:2)

你没有做错任何事,只是因为Apple定义的公共密钥(以下图表)不能包括所有情况。

enter image description here

对于您的情况,您必须编写自己的NSPredicate字符串,如Apple建议的那样:Declaring Supported Data Types for a Share or Action Extension

我改变了苹果的例子:

<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更改为任何其他Uniform Type Identifiers

下面列出了一些常见的UTI:
enter image description here

答案 1 :(得分:1)

根据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>

答案 2 :(得分: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&gt; 0为我做了诀窍。