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