iOS 8 共享扩展不适用于 iBooks

iOS 8 share extension doesn't work with iBooks

我尝试使用我的自定义扩展在 iBooks 中共享 selected/highlighted 文本,但它里面没有任何内容 self.extensionContext

<NSExtensionContext: 0x17541d90> - UUID: <__NSConcreteUUID 0x1765e860> D69F0393-C5F1-4DEB-9A97-B479C2BC0C95 - _isHost: NO
items:
(
)

所以当我在提供的列表中选择我的扩展后,它只是弹出空的 SLComposeServiceViewController

邮件、iMessages、Twitter 等按预期工作。我必须做任何额外的魔法来处理这个吗?

有趣的是

  • 从 iBooks 共享时,self.extensionContext.inputItems 是一个空数组。它没有给你任何可以分享的东西。
  • 从 iBooks 共享仅适用于 Apple 提供的扩展。在我的 iPhone 上,iBooks 提供了其他扩展——Evernote、Things 等等——但其中 none 可以正常工作。他们都提出了空洞的内容。

我的看法:来自 Apple 扩展的共享依赖于一些未记录的秘密行为,并且您没有可以应用的额外魔法来通过应用商店批准流程。

如果您将激活规则设置为 TRUEPREDICATE(这意味着该扩展应该始终显示)或其他非常宽松的规则,您的扩展将显示在 iBooks 中。但看起来您现在无法获得任何要共享的内容。我会向 Apple 提交一个关于它的错误。

看来问题已经解决iOS 9、以下代码(在Swift)正确returns在iBooks中选择的内容:

for item: AnyObject in self.extensionContext!.inputItems {
        let inputItem = item as! NSExtensionItem
        for provider: AnyObject in inputItem.attachments! {
            let itemProvider = provider as! NSItemProvider
            if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeText as String) {
                itemProvider.loadItemForTypeIdentifier(kUTTypeText as String, options: nil, completionHandler: { (txt, error) in
                    NSOperationQueue.mainQueue().addOperationWithBlock {
                            //Doing stuff with txt
                    }
                })
            }
        }   
    }