2014-09-04 339 views
5

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

回答

13

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

您可以指定NSExtensionActivationRuleTRUEPREDICATE首先在发展,允许各种附件。

的AppStore的/ iTunes商店的应用程序要求延期的连接结构可以被记录为图像: enter image description here

其结果是,你必须包括下列键在NSExtensionActivationRule您的扩展的Info.plist文件的

  1. NSExtensionActivationSupportsImageWithMaxCount
  2. NSExtensionActivationSupportsText
  3. NSExtensionActivationSupportsWebURLWithMaxCount

更新:

如果你想限制可能指向显示您的扩展(仅适用于iTunes Store的工作),你可以使用“谓语句”对于更复杂的过滤器。

请参阅下面的苹果文档: 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" 
    )[email protected] == 1 
)[email protected] == 1 
&& 
SUBQUERY (
    extensionItems, 
    $extensionItem, 
    SUBQUERY (
     $extensionItem.attachments, 
     $attachment, 
     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" 
    )[email protected] == 1 
)[email protected] == 1 
&& 
SUBQUERY (
    extensionItems, 
    $extensionItem, 
    SUBQUERY (
     $extensionItem.attachments, 
     $attachment, 
     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" 
    )[email protected] == 1 
)[email protected] == 1 

我没有尝试附件里面的过滤器(仅网址中包含“itunes.apple.com”),但我想你可以使用预测限制点扩展显示并在你的视图控制器内部采取行动之前有更多的检查(不是完美的解决方案,但应该工作,如果没有更好的方法来检查附件内容。)

干杯!

+0

非常感谢,但我怎么能严格限制扩展到iTunes内容:以“itunes.apple.com”开头的网址和只有这些网址?我无法弄清楚我可以用于NSExtensionActivationRule的谓词,它可以完成这项工作。 – Frank 2014-12-22 12:46:55

+0

嗨@Frank,请参阅我的更新。 – 2014-12-23 03:16:33

+0

是的,就像iTunes的魅力一样,并且在几次测试后,似乎并没有出现在其他上下文中。非常感谢。 – Frank 2014-12-23 10:16:21