If you use WCSession
's sendMessage
API on the watch it will wake the iOS app up in the background if it is not already running. So you could do something like:
watch extension code:
[[WCSession defaultSession] sendMessage:@{@"cmd":@"sendUpdate"} replyHandler:nil errorHandler:^{ /*handle errors*/ }]
iOS app code:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
<...>
[[WCSession defaultSession] setDelegate:self];
[[WCSession defaultSession] activateSession];
<...>
}
- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error {
}
- (void)sessionDidBecomeInactive:(WCSession *)session
{}
- (void)sessionDidDeactivate:(WCSession *)session
{
[session activateSession];
}
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message {
NSString *cmd = message[@"cmd"];
if ([cmd isEqual:@"sendUpdate"]) {
[self sendUpdate];
}
}
- (void)sendUpdate {
WCSession *session = [WCSession defaultSession];
if (session.isWatchAppInstalled && session.activationState == WCSessionActivationStateActivated) {
[[WCSession defaultSession] transferUserInfo:[self dictionaryFullOfUpdates]];
}
}
This is obviously simpler than what you'd probably do, but should give you the idea