You can't communicate directly with your app's process. If you don't want to launch the app immediately, you can just pass it some data via your shared container:
let sharedUserDefaults = NSUserDefaults(suiteName: "group.com.mycompany.myapp")!
sharedUserDefaults.setBool(true, forKey: "tracking location")
sharedUserDefaults.synchronize()
Then in your app's applicationDidBecomeActive:
, you can read that value out:
let sharedUserDefaults = NSUserDefaults(suiteName: "group.com.mycompany.myapp")!
if sharedUserDefaults.boolForKey("tracking location") {
startTrackingLocation()
}
sharedUserDefaults.removeObjectForKey("tracking location")
sharedUserDefaults.synchronize()
Your today widget controller can also be a CLLocationManagerDelegate
and track the user's location while the widget is visible.