2015-11-14 27 views
27

sto ottenendo uno strano bug:iOS 9: Crash su - [_ NSXPCDistantObject methodSignatureForSelector:]

irreversibile: NSInvalidArgumentException *** - [_ NSXPCDistantObject methodSignatureForSelector:]: Nessun protocollo è stato impostato sulla connessione collegamento al servizio denominato com.apple.nsurlsessiond"

Questo problema appare solo per accadere su iOS 9. Secondo l'analisi dello stack, il bug viene attivato da una chiamata 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 ... 

Quindi sembrerebbe che quando l'app entrerà in primo piano, qualche osservatore registrato tenta di riconnettersi con nsurlsessiond tramite RPC e non riesce? Faccio una sessione di trasferimento in background usando NSURLSession, ma non riesco a riprodurlo quindi non sono sicuro che sia correlato o meno.

Qualcuno ha già visto questo problema prima? C'è qualcosa che posso fare per affrontarlo?

+3

C'è stato un sacco di rapporti sugli arresti anomali su iOS 9 riguardanti il ​​centro notifiche e NSInvalidArgumentException. Sembra che l'arresto si verifichi quando l'app è in background e il sistema operativo distrugge l'app mentre alcuni dati sono ancora in fase di elaborazione. Non sono sicuro se sia lo stesso bug che stai affrontando. –

risposta

10

Sembra un bug in iOS descritto qui: https://forums.developer.apple.com/thread/45651#140745

AFAICT questo incidente è causato dal supporto sfondo la sessione di NSURLSession. Questo passa al suo demone (nsurlsessiond) usando NSXPCConnection (non parte dell'SDK di iOS, ma all'API pubblica su OS X, quindi puoi leggerlo lì). NSXPCConnection ha la nozione di connessioni interrotte, ovvero la connessione IPC tra il client e il server è stata danneggiata ma può essere ristabilita. Il supporto della sessione in background di NSURLSession, come tutti i client NSXPCConnection, deve ovviamente gestire queste interruzioni. Ahimè, c'è un bug nel modo in cui lo fa. Questo bug è una condizione di competizione che si manifesta con questo crash. Speriamo di risolvere questo problema in una versione futura del sistema operativo, ma non posso condividere dettagli concreti.

+0

Dovresti davvero modificare la tua risposta con il contenuto del link nel caso in cui il link non sia più valido. Così com'è, questa è una risposta solo per link – JAL

0

Sembra che qualcosa che è stato precedentemente sottoscritto alle notifiche UIApplicationWillEnterForeground sia stato deallocato senza annullare la sottoscrizione o che l'interfaccia prevista non sia presente.

Vorrei verificare per qualsiasi luogo che la tua app ha sottoscritto quella notifica, e assicurarmi che non si abboni correttamente e che i metodi a cui si fa riferimento siano implementati.

L'errore su methodSignatureForSelector indicava che il metodo che NSNotificationCenter desidera chiamare con la notifica non è implementato. Potrebbe essere un metodo mancante o un refuso.

+0

Grazie per la risposta. Il problema è che non uso 'UIApplicationWillEnterForeground', piuttosto sembra essere qualcosa che Apple sta usando internamente a causa del testo di eccezione che menziona' nsurlsessiond'. – bcattle