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

tim*_*son 1 ios ios-extensions

我有一个Safari共享扩展,我希望能够从扩展中打开主应用程序.向用户显示警报,其中他们可以选择打开应用程序.

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

didSelectPost()调用该方法后会出现警报 ,您可以看到它出现在扩展的后台优先级完成块中.该open方法在其文档中说"在iOS 8中,只有今天的扩展点(用于创建小部件)支持这种方法." 我猜它仍然是在Safari Share Extension中仍然不支持它的情况.

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

tim*_*son 7

我在这里找到了解决方案.我不确定这在技术上是否适用于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
    }
}
Run Code Online (Sandbox Code Playgroud)