我遇到了一个关于我的应用iOS共享扩展的问题。以下是我在共享扩展的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 页面或 Web URL。我在某个地方读到,我必须将以下内容添加到 NSExtensionActivationRule 字典中。<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
,还进行了一些其他测试,结果只返回了没有帮助的字符串。
我知道从这些应用程序中获取URL是可能的,因为即使在NYTimes中也有一个选项针对Google Chrome,它绝对需要一个URL而不仅仅是文章标题。有什么想法可以获取该URL吗?
(null): couldn't parse contents of ' Share Extension/Info.plist': The data couldn’t be read because it isn’t in the correct format.
。如果您能提供更多详细信息并解释该代码为什么有效,那将非常有帮助。由于它给出了该错误消息,因此不确定它是否有效。 - Charlie FishitemProvider.hasItemConformingToTypeIdentifier("public.url")
返回false。那么我该如何获取URL呢? - Charlie Fish