iOS Share Extension未显示/无法接收URL

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.urlpublic.text一起一些其他的东西,以测试它,它只是返回超级无益的字符串.

我知道这可以从这些应用程序中获取URL,因为即使在NYTimes中它也有谷歌浏览器的选项,它可能需要一个URL,而不仅仅是文章标题.有关如何获取该URL的任何想法?

Iva*_*čin 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>
Run Code Online (Sandbox Code Playgroud)

考虑到你的代码来获取附件,你只是检查第一个inputItems和第一个附件,你需要在两种情况下都有foreach循环并检查所有这些.