iOS 9: Bloqueo - [NSXPCDISTANTOBJECT methodSignatureForSelector:]


Estoy recibiendo un error extraño:

Excepción fatal: NSInvalidArgumentException *** - [_NSXPCDistantObject methodSignatureForSelector:]: No se ha establecido ningún protocolo en conexión conexión al servicio llamado com.manzana.nsurlsessiond "

Este problema solo parece estar sucediendo en iOS 9. De acuerdo con el seguimiento de la pila, el error se desencadena por una llamada a -[UIApplication _sendWillEnterForegroundCallbacks].

Thread : Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 6485512008 __exceptionPreprocess
1  libobjc.A.dylib                6833323904 objc_exception_throw
2  CoreFoundation                 6485511824 -[NSException initWithCoder:]
3  Foundation                     6500536092 -[_NSXPCDistantObject methodSignatureForSelector:]
4  CoreFoundation                 6485526892 ___forwarding___
5  CoreFoundation                 6484495532 _CF_forwarding_prep_0
6  CoreFoundation                 6485141004 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
7  CoreFoundation                 6485138988 _CFXRegistrationPost
8  CoreFoundation                 6485138348 ___CFXNotificationPost_block_invoke
9  CoreFoundation                 6485554212 -[_CFXNotificationRegistrar find:object:observer:enumerator:]
10 CoreFoundation                 6484354836 _CFXNotificationPost
11 Foundation                     6500543948 -[NSNotificationCenter postNotificationName:object:userInfo:]
12 UIKit                          6577878356 -[UIApplication _sendWillEnterForegroundCallbacks]
   continues ... 

Por lo que parece que cuando la aplicación entrará en primer plano, algún observador registrado intenta volver a conectarse con nsurlsessiond a través de RPC y falla? Hago una sesión de transferencia de fondo usando NSURLSession, pero no puedo reproducir esto, así que no estoy seguro de si está relacionado o no.

¿Alguien ha visto este asunto antes? ¿Hay algo que pueda hacer para solucionarlo?

Author: bcattle, 2015-11-14

2 answers

Parece un error en iOS descrito aquí: https://forums.developer.apple.com/thread/45651#140745

AFAICT este bloqueo es causado por el soporte de sesión en segundo plano de NSURLSession. Esto pasa el trabajo a su demonio (nsurlsessiond) usando NSXPCConnection (no forma parte del SDK de iOS, sino de la API pública en OS X, para que pueda leer sobre ello allí). NSXPCConnection tiene la noción de conexiones interrumpidas, es decir, la conexión IPC entre el cliente y el servidor se ha roto pero puede restablecerse. El soporte de sesiones en segundo plano de NSURLSession, al igual que todos los clientes de NSXPCConnection, debe gestionar estas interrupciones de forma rutinaria. Por desgracia, hay un error en la forma en que hace eso. Este error es una condición de carrera que se manifiesta como este accidente. Esperamos arreglar esto en una futura versión del sistema operativo, pero no puedo compartir ningún detalle concreto.

 10
Author: zh.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-20 12:37:01

Parece que algo que se ha suscrito previamente a las notificaciones UIApplicationWillEnterForeground fue desasignado sin desuscribirse o que la interfaz esperada no está presente.

Revisaría cualquier lugar en el que su aplicación se haya suscrito a esa notificación, y me aseguraría de que no se suscriba correctamente y de que se implementen los métodos a los que se hace referencia.

Al fallar methodSignatureForSelector se indicaría que el método que NSNotificationCenter quiere llamar con la notificación no está implementado. Podría ser un falta de método, o un error tipográfico.

 0
Author: Dave Lyon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 22:13:57