Open My application from my keyboard extension in swift 3.0

I am trying to open from my keyboard extension. I am having custom keyboard and I have add that keyboard from setting. On my custom keyboard there is one button “Show More”, and I want to open my app on this button click.

So I have tried following code :

  • How can I access `AnyHashable` types in `Any` in Swift?
  • Two UIBezierPaths intersection as a UIBezierPath
  • How to solve “String interpolation produces a debug description for an optional value; did you mean to make this explicit?” in Xcode 8.3 beta?
  • How to call post service with parameters swift 3.0 Alamofire 4.0?
  • Can't set URLRequest Authorization Header
  • addArc(withCenter) closing path
  • let context = NSExtensionContext()! as URL, completionHandler: nil)
     var responder = self as UIResponder?
     while (responder != nil) {
          if responder?.responds(to: Selector("openURL:")) == true {
               responder?.perform(Selector("openURL:"), with: url)
          responder = responder!.next

    It is working successfully, but as we know in swift Selector("method_name:") is deprecated and use #selector(classname.methodname(_:)) instead so it is giving warning. And I want to solve that warning. So I have tried as Xcode automatically suggested :

     if responder?.responds(to: #selector(UIApplication.openURL(_:))) == true {
          responder?.perform(#selector(UIApplication.openURL(_:)), with: url)

    Also tried :

     if responder?.responds(to: #selector( == true {
          responder?.perform(#selector(, with: url)

    I have also tried others possible ways, but no luck. If anyone know how to do, please let me know.

    I referred this link, Julio Bailon’s answer :

    openURL not work in Action Extension

    Solutions Collect From Internet About “Open My application from my keyboard extension in swift 3.0”

    Following code works on Xcode 8.3.3, iOS10, Swift3 without any compiler warnings:

    func openUrl(url: URL?) {
        let selector = sel_registerName("openURL:")
        var responder = self as UIResponder?
        while let r = responder, !r.responds(to: selector) {
            responder =
        _ = responder?.perform(selector, with: url)