从Safari

时间:2015-10-23 20:39:04

标签: ios safari ios-extensions

我有一个iOS动作扩展,应该支持打开图片和网址(特别是网页)。但是,在Safari中共享图像时,操作扩展名不会显示在可用扩展名列表中。例如,访问https://en.wikipedia.org并点按共享图标会显示我的操作扩展程序,但访问https://upload.wikimedia.org/wikipedia/commons/c/c4/PM5544_with_non-PAL_signals.png并点按共享图标则不会。我还可以输入照片应用并选择一个或多个要共享的图像,这将显示我的动作扩展名作为选项。我首先尝试了我的Info.plist文件,如下所示:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>-1</integer>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>-1</integer>
        </dict>
    </dict>
</dict>

我希望通过共享表中的操作扩展程序接受来自所有应用的无限数量的图片和网址。然而,这种情况并非如此;点击图像上的共享图标时,不显示操作扩展名。我已经添加了NSExtensionActivationRule键的所有值,如下所示:

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>-1</integer>
            <key>NSExtensionActivationSupportsFileWithMaxCount</key>
            <integer>-1</integer>
            <key>NSExtensionActivationSupportsAttachmentsWithMaxCount</key>
            <integer>-1</integer>
            <key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
            <integer>-1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>-1</integer>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>-1</integer>
        </dict>
    </dict>
</dict>

但是,这仍然无法解决问题。这是我必须使用谓词的东西吗?如果是这样,如何以及为什么?

2 个答案:

答案 0 :(得分:0)

我的动作扩展程序存在同样的问题,它可以从各种应用程序(照片,邮件,消息和大多数第三方应用程序)导入图像,但不能从Safari中导入。这篇文章介绍了该做什么iOS Share extension not working on image urls。您必须编写自己的NSPredicate字符串,在Info.plist中使用它

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

请注意,在我的情况下,我的动作扩展也支持文本,因此是public.text行

答案 1 :(得分: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为我做了诀窍。