NSExtensionActivationRule和iOS应用程序扩展:如何在iTunes中激活扩展

8
我想为我的iOS 8应用程序制作一个扩展(最好是动作扩展,但共享扩展也可以胜任)。 我希望这个扩展能够从iTunes可访问,以便我的用户可以发送iTunes链接到我的应用程序。 但是我无法弄清楚如何使此扩展仅从iTunes(而不是其他应用程序)中可用。 我尝试了NSExtensionActivationRule.NSExtensionActivationSupportsWebURLWithMaxCount,但它只能在Safari中激活我的扩展,而不能在iTunes中激活。 我想知道是否有一种方法可以使用谓词来检测iTunes的“元素/链接”(缺乏更好的术语)。 是否有人有解决方法?
1个回答

18

AppStore/iTunes Store应用程序中的NSExtensionItem实际上包含三种类型的附件,即Image、Text和URL。

您可以在开发中首先将您的NSExtensionActivationRule指定为TRUEPREDICATE,这将允许所有类型的附件。

AppStore/iTunes Store应用程序扩展请求的附件结构可以被记录为图像:

enter image description here

因此,您需要在您的扩展信息.plist文件的NSExtensionActivationRule中包含以下键:

  1. NSExtensionActivationSupportsImageWithMaxCount
  2. NSExtensionActivationSupportsText
  3. NSExtensionActivationSupportsWebURLWithMaxCount

更新:

如果您想限制扩展点只显示在iTunes Store上工作的情况下,您可以使用“谓词语句”进行更复杂的过滤。

请参考下面的Apple文档: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW8

例如:

我想让我的扩展仅在附件满足条件的情况下显示:一个图像、一个纯文本和一个URL,符合上述图像中的条件。我使用以下预测:

SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
    ).@count == 1
).@count == 1
&&
SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
    ).@count == 1
).@count == 1
&&
SUBQUERY (
    extensionItems,
    $extensionItem,
    SUBQUERY (
        $extensionItem.attachments,
        $attachment,
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
    ).@count == 1
).@count == 1

我没有尝试筛选附件内部的内容(仅包含“itunes.apple.com”的URL),但我认为您可以使用预测来限制操作表中显示的点扩展,并在在您的视图控制器内执行操作之前进行更多检查(这不是一个完美的解决方案,但如果没有更好的方法来检查附件内容,应该可以工作)。

干杯!


1
非常感谢,但是我该如何严格限制扩展仅适用于iTunes内容:以“itunes.apple.com”开头的URL和仅这些URL?我无法想出一个可用于NSExtensionActivationRule的谓词来完成此工作。 - Frank
没错,对于iTunes来说非常好用,经过几次测试后,该操作似乎不会出现在其他上下文中。非常感谢。 - Frank
1
子查询放在哪个文件中? - pomo
在扩展目标的info.plist中添加@pomo。 - D4ttatraya
1
好的,看起来它会在共享图像、URL和文本的任何应用程序中显示。但这可能不是很常见。我只是好奇你是否找到了一种特别查找itunes.apple.com URL的激活规则的方法。 - Jordan H
显示剩余2条评论

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