NSExtensionActivationRule& iOS App扩展:如何在iTunes中激活扩展程序

时间:2014-09-04 20:58:10

标签: ios objective-c iphone

我想为我的iOS 8应用程序进行扩展(最好是一个动作扩展,但共享扩展也能完成这项工作)。
我希望可以从iTunes访问此扩展程序,以便我的用户可以将iTunes链接发送到我的应用程序 但我无法弄清楚如何从iTunes中获取此扩展(顺便说一句,只能从iTunes获得) 我尝试过NSExtensionActivationRule.NSExtensionActivationSupportsWebURLWithMaxCount,但它只从Safari激活我的扩展,而不是从iTunes激活。 我想知道是否可以通过谓词来实现它,但我无法弄清楚如何构建一个可以检测iTunes“元素/链接”的谓词(因为缺少一个更好的术语)。
有人有解决方案吗?

1 个答案:

答案 0 :(得分:14)

来自AppStore / iTunes Store应用程序的NSExtensionItem实际上包含三种类型的附件,即图像,文本和URL。

您可以在开发中首先将 NSExtensionActivationRule 指定为 TRUEPREDICATE ,以允许各种附件。

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

因此,您必须在扩展程序的info.plist文件的 NSExtensionActivationRule 中包含以下键:

  1. NSExtensionActivationSupportsImageWithMaxCount
  2. NSExtensionActivationSupportsText
  3. NSExtensionActivationSupportsWebURLWithMaxCount
  4. <强>更新

    如果您想限制显示扩展程序的可能点(仅适用于iTunes Store),您可以使用&#34;谓词语句&#34;对于更复杂的过滤器。

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

    例如:

    如果扩展附件符合条件,我想让我的扩展程序显示:一个图像,一个纯文本和一个网址,它确认条件如上图所示。我使用以下预测:

    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
    

    我没有尝试在附件中进行过滤(只有网址包含&#34; itunes.apple.com&#34;),但我认为您可以使用预测来限制在操作表中显示的点扩展名并且在视图控制器中执行操作之前需要进行更多检查(不是一个完美的解决方案,但如果没有更好的方法来检查附件内容,则应该有效。)

    干杯!