我的应用程序的iOS Share Extension出现问题。我在共享扩展程序Info.plist
中有以下代码。
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
主要问题是Google Chrome,NYTimes,WSJ和许多其他应用中都没有显示扩展程序。所有这些都应该提供网页或Web URL。
我在某处读到了我必须将以下内容添加到NSExtensionActivationRule dict中。
<key>NSExtensionActivationSupportsText</key>
<true/>
如果我添加,则共享扩展名会出现在上面列出的应用中,但只会将字符串返回到我的扩展程序。例如,如果我在Google Chrome浏览器中转到apple.com
并使用我的共享扩展程序,它只会将Apple
作为字符串提供给我的应用程序并不支持我的扩展程序。它应该提供某种类型的URL或类似的东西。在NYTimes应用程序中,它只会将文章的标题发送到扩展名。
扩展程序在Safari中完美运行。只是不确定第三方应用程序。
以下是在我的扩展程序的swift文件中接收URL的主要代码。
if let item = extensionContext?.inputItems.first as? NSExtensionItem {
if let itemProvider = item.attachments?.first as? NSItemProvider {
if itemProvider.hasItemConformingToTypeIdentifier("public.url") {
itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? NSURL {
print (shareURL.absoluteString!)
从那里我处理URL作为我的应用程序应该。
当我添加NSExtensionActivationSupportsText
选项时,我将上面的代码从public.url
略微更改为public.text
以及其他一些内容来测试它,它只是返回超级无用的字符串。< / p>
我知道这可以从这些应用程序中获取URL,因为即使在NYTimes中它也有谷歌浏览器的选项,它可能需要一个URL,而不仅仅是文章标题。关于如何获取该URL的任何想法?
答案 0 :(得分:8)
我建议你使用它:
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<string>
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
).@count == 1
).@count == 1
</string>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
考虑到你的代码来获取附件,你只是检查第一个inputItems和第一个附件,你需要在两种情况下都有foreach循环并检查所有这些。