6

I implemented added a today widget into my app. The today extension includes an UITableView. Now I'd like to open the app if a cell of the UITableView has been pressed. Does someone of you know how to do this?

paro
  • 217
  • 3
  • 10
  • 1
    Please take a look at this http://stackoverflow.com/questions/24019820/today-app-extension-widget-tap-to-open-containing-app – JulianM Aug 14 '15 at 20:40

2 Answers2

11

Today extensions have access to an NSExtensionContext which allows you to open an app. In your extension controller:

let myAppUrl = NSURL(string: "myapp://some-context")!
extensionContext?.openURL(myAppUrl, completionHandler: { (success) in
    if (!success) {
        // let the user know it failed
    }
})

The success parameter is provided because the system may not be able to open a particular URL (say you want to launch "twitter://" but the user does not have the Twitter app installed. If you're launching your own app, this shouldn't be an issue.

Christopher Pickslay
  • 17,523
  • 6
  • 79
  • 92
2

The provided code by Christopher Pickslay works fine, you just need to add the following lines to the application's info.plist (open as a source code):

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.mikitamanko.myapp</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>some-context</string>
            </array>
        </dict>
    </array>

right after the

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

Here's the complete guide how to open the app or share Users Defaults with Extension and the containing app.

Mikita Manko
  • 1,133
  • 9
  • 9