我有一个使用这些规则的共享扩展程序:
<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,我的共享扩展程序可以解析该网站。
我做错了什么? 感谢
答案 0 :(得分:2)
你没有做错任何事,只是因为Apple定义的公共密钥(以下图表)不能包括所有情况。
对于您的情况,您必须编写自己的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。
答案 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 "com.adobe.pdf"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
)
).@count == $extensionItem.attachments.@count
).@count > 0</string>
最后一行@count&gt; 0为我做了诀窍。