sessionReachabilityDidChange no llamado en el reloj

Me gustaría que mi aplicación de reloj responda a la aplicación principal del teléfono que mata. Cuando la aplicación de reloj se está ejecutando y la aplicación del teléfono se mata, no recibo ninguna callback de sessionReachabilityDidChange o sessionWatchStateDidChange . Basado en la documentation de Apple:

Se llama a este método para que el process actual sepa que la accesibilidad de la session de su contraparte cambió.

Por lo tanto, parece que debería recibir una callback. He configurado el delegado de WCSession en mi class en el reloj. La session en el reloj recibe devoluciones de llamada para el context de la aplicación. ¿Por qué no recibo una callback de accesibilidad?

Código debajo …

 + (SomeClass *)shanetworkingInstance { static dispatch_once_t pnetworking; static SomeClass *shanetworking = nil; dispatch_once(&pnetworking, ^{ shanetworking = [[SomeClass alloc] init]; [Model shanetworkingInstance].delegate = shanetworking; }); return shanetworking; } #pragma mark - setup - (void)initializeSession { if ([WCSession isSupported]) { WCSession *session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; [self sync]; } } -(BOOL) hasValidWCSession { return ([WCSession isSupported] && [WCSession defaultSession].isReachable); } #pragma mark - WCSessionDelegate - (void)session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *, id> *)applicationContext { NSLog(@"application context received on watch: %@", applicationContext); [[Model shanetworkingInstance] process:applicationContext]; } - (void)sessionWatchStateDidChange:(WCSession *)session { NSLog(@"wcession state changed on watch"); } - (void)sessionReachabilityDidChange:(WCSession *)session { NSLog(@"wcsession reachability changed on watch"); } 

La contraparte de la aplicación de iPhone no necesita estar ejecutándose para que el reachable pueda ser cierto desde la perspectiva de la aplicación Apple Watch. Si el iPhone en sí está emparejado y accesible, enviar posts usando WCSession desde la aplicación de reloj abrirá la aplicación de iPhone en segundo plano.

Por lo tanto, no esperaría sessionReachabilityDidChange: ser llamado en la aplicación de reloj cuando la aplicación de iOS es eliminada. Esto también significa que su aplicación de iPhone debe estar preparada para iniciarse en segundo plano en cualquier momento y activar WCSession rápidamente, para manejar las requestes entrantes desde la aplicación de reloj (similar a cómo ciertas notifications push, etc., pueden iniciar una aplicación de iOS) .

Sin embargo, desde la perspectiva de la aplicación de iPhone, la contraparte de la aplicación de reloj solo se considera alcanzable cuando "Apple Watch está sincronizado y activo y el Watch Watch asociado se ejecuta en primer plano" ( documentation ).

Además, tenga en count que sessionWatchStateDidChange: se invoca cuando " sessionWatchStateDidChange: el valor de las properties emparejadas, watchAppInstalled, complicationEnabled o watchDirectoryURL del object WCSession".