Cha*_*ish 12 ios swift ios-extensions
我的应用程序的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>
Run Code Online (Sandbox Code Playgroud)
主要问题是Google Chrome,NYTimes,WSJ和许多其他应用中都没有显示扩展程序.所有这些都应该提供Web页面或Web URL.
我在某处读到了我必须将以下内容添加到NSExtensionActivationRule dict中.
<key>NSExtensionActivationSupportsText</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
如果我添加,则共享扩展名会出现在上面列出的应用中,但只会将字符串返回到我的扩展程序.例如,如果我进入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!)
Run Code Online (Sandbox Code Playgroud)
从那里我处理URL作为我的应用程序应该.
当我加入了NSExtensionActivationSupportsText选项我改变了上面的代码略有public.url到public.text一起一些其他的东西,以测试它,它只是返回超级无益的字符串.
我知道这可以从这些应用程序中获取URL,因为即使在NYTimes中它也有谷歌浏览器的选项,它可能需要一个URL,而不仅仅是文章标题.有关如何获取该URL的任何想法?
我建议你用这个:
<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>
Run Code Online (Sandbox Code Playgroud)
考虑到你的代码来获取附件,你只是检查第一个inputItems和第一个附件,你需要在两种情况下都有foreach循环并检查所有这些.