iOS 在地图上添加分享扩展

3

我想在苹果地图上添加分享扩展,有人知道如何操作吗?我尝试设置NSExtensionAttributes如下,但它不起作用,我的应用程序没有显示在地图的共享选项中。

NSExtensionAttributes

NSExtensionActivationRule
  NSExetnsionActivationSupportsWebURLWithMaxCount
  NSExetnsionActivationSupportsWebPageWithMaxCount

你尝试过激活规则的其他合法值吗? - Tom Harrington
是的,我尝试了其他所有合法属性:NSExtensionActivationSupportsFileWithMaxCount 100、NSExtensionActivationSupportsMovieWithMaxCount 100、NSExtensionActivationSupportsText YES、NSExtensionActivationSupportsWebPageWithMaxCount 100和NSExtensionActivationSupportsWebURLWithMaxCount 100。 - Fred Zhang
1个回答

18

我不确定为什么在Maps中 NSExtensionActivationSupportsText 不起作用,但是当我尝试时得到了相同的结果。

你需要一个更复杂的激活规则。将激活规则的类型设置为 "string",并使用应用扩展编程指南中描述的 SUBQUERY 格式设置值。这样做可以请求一个或多个特定的 UTI。Maps 将提供纯文本 (public.plain-text),它应该与 NSExtensionActivationSupportsText 等效,但显然不是这样。它还提供位置卡片 (public.card) 和 URL (public.url)。

检查任何这些 UTIs 的激活规则将如下所示:

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,然后进行OR运算。

根据您可以处理的数据,您可能希望将其缩小,仅涵盖您的扩展程序知道如何处理的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。

Maps提供了一个苹果地图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

@Tom:我能不能像NSExetnsionActivationSupportsWebPageWithMaxCount一样给一个最大计数限制?@count只适用于.@count == 1和.@count >=1。我能不能像.@count <= 10这样设定一个值呢? - Arun Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接