iOS在地图上添加共享扩展

Fre*_*ang 3 maps ios ios8-share-extension

我想在Apple的地图上添加分享扩展,有谁知道怎么做.我尝试将NSExtensionAttributes设置如下,但它不起作用,我的APP没有显示在地图的共享表中.

NSExtensionAttributes

NSExtensionActivationRule
  NSExetnsionActivationSupportsWebURLWithMaxCount
  NSExetnsionActivationSupportsWebPageWithMaxCount
Run Code Online (Sandbox Code Playgroud)

Tom*_*ton 13

我不确定为什么NSExtensionActivationSupportsText不能使用Maps,但是当我尝试时我得到了相同的结果.

您需要的是更复杂的激活规则.将激活规则的类型设置为"string",并使用App Extension Programming Guide中SUBQUERY描述的格式设置值.当您这样做时,您可以请求一个或多个特定的UTI.地图将提供纯文本(),它应该相当于但显然不是.它还提供位置卡()和URL().public.plain-textNSExtensionActivationSupportsTextpublic.cardpublic.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
Run Code Online (Sandbox Code Playgroud)

这只是SUBQUERY检查每个UTI的三个条款,一起进行OR-ed.

根据您可以处理的数据,您可能希望减少它以仅涵盖您的扩展程序知道如何处理的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
Run Code Online (Sandbox Code Playgroud)

此版本仅检查您是否获得了不是文件URL的URL.

地图提供Apple地图网址,例如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
Run Code Online (Sandbox Code Playgroud)