iOS在地图上添加共享扩展
我想在苹果地图上添加共享扩展,有谁知道该怎么做。 我尝试按如下方式设置NSExtensionAttributes,但不起作用,我的APP不显示在地图的分享表中。
NSExtensionAttributes NSExtensionActivationRule NSExetnsionActivationSupportsWebURLWithMaxCount NSExetnsionActivationSupportsWebPageWithMaxCount
我不确定为什么NSExtensionActivationSupportsText
不能用于地图,但是当我尝试时我得到了相同的结果。
你需要的是一个更复杂的激活规则。 将激活规则的types设置为“string”,并使用应用程序扩展编程指南中描述的SUBQUERY
格式设置值。 当你这样做时,你可以请求一个或多个特定的UTI。 地图将提供纯文本( public.plain-text
),它应该等同于NSExtensionActivationSupportsText
但显然不是。 它还提供一个位置卡( public.card
)和一个URL( public.url
)。
通过UTI检查这些信息的激活规则将如下所示
SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text").@count >= 1).@count >= 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1 OR SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.vcard").@count >= 1).@count >= 1
这只是三个SUBQUERY
子句,用于检查每个UTI, SUBQUERY
在一起。
根据您可以处理的数据,您可能希望减less这些数据,以仅覆盖您的扩展知道如何处理的UTI。 例如,如果你想要的只是URL,只能使用该部分:
SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, SUBQUERY($attachment.registeredTypeIdentifiers, $uti, $uti UTI-CONFORMS-TO "public.url" AND NOT $uti UTI-CONFORMS-TO "public.file-url").@count >= 1).@count >= 1).@count >= 1
这个版本只是检查你是否得到一个不是文件URL的URL。
地图提供了一个苹果地图的URL,这将是像http://maps.apple.com/?q=37.332331,-122.031219&sll=37.332331,-122.031219
如果你使用vcard UTI,你会得到一个NSString
编码成一个NSData
。 如果你解码它,看起来像这样:
BEGIN:VCARD VERSION:3.0 PRODID:-//Apple Inc.//iOS 8.2//EN N:;Shared Location;;; FN:Shared Location item1.ADR;type=HOME;type=pref:;;;;;; item2.URL;type=pref:http://maps.apple.com/?q=37.332331\,-122.031219&sll=37.332331\,-122.031219 item2.X-ABLabel:map url END:VCARD