从 iOS Safari 共享扩展打开主应用程序

Open the main app from a iOS Safari Share Extension

我有一个 Safari 共享扩展程序,我希望能够从该扩展程序中打开主应用程序。用户会看到一个警告,他们可以选择打开应用程序。

func openAppHandler() {
    self.extensionContext?.completeRequest(returningItems: []) { (success) in
        if let url = URL(string: "myapp://...") {
            self.extensionContext?.open(url, completionHandler: nil)
        }
    }
}

调用方法 didSelectPost() 后出现警报,如您所见,它出现在扩展的后台优先级完成块中。 open 方法在它的文档中说 "In iOS 8, only the Today extension point (used for creating widgets) supports this method." 我猜它仍然不受 Safari 共享扩展的支持。

有谁知道从共享扩展程序打开我的主应用程序的方法吗?

我找到了解决方案 here。我不确定这在技术上是否适用于 Apple,但它可以正常工作。

@objc func openURL(_ url: URL) {
    return
}

func openContainerApp() {
    var responder: UIResponder? = self as UIResponder
    let selector = #selector(MyViewController.openURL(_:))

    while responder != nil {
        if responder!.responds(to: selector) && responder != self {
            responder!.perform(selector, with: URL(string: "myapp://url")!)
            return
        }
        responder = responder?.next
    }
}