2015-09-09 15 views
6

Sto provando a eseguire il debug di un'app che effettua molte chiamate HTTP. Sto vedendo questo nella console:Interruzione su kCFStreamErrorDomainSSL

2015-09-08 17:21:01.458 MyApp[3186:3064431] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 

capisco come aggiungere eccezioni al mio plist, ma c'è modo di aggiungere un punto di interruzione in cui queste richieste non riescono a vedere ciò che viene richiesto?

risposta

3

Provare ad aggiungere un punto di interruzione simbolico in HTTPProtocol::failWithStreamError e/o StrictSecurityPolicy::logInsecureLoadFailure.

(Questo, purtroppo, non può rendere più facile per ottenere la traccia dello stack della richiesta reale, dal momento che questa eccezione si verifica in modo asincrono con il codice vero e richiesta di creazione. Ma potrebbe aiutare in ogni modo.)

+1

Sembra che si può afferrare l'URL fuori registro '$ x1' quando si rompe il' StrictSecurityPolicy :: logInsecureLoadFailure'. –

+0

E nell'improbabile caso che non si sappia da dove provengono le richieste, è sempre possibile aggiungere punti di interruzione print-and-continue su tutti i metodi interessanti relativi agli URL (inizializzatori e metodo di caricamento sincrono di NSURLConnection, le classi dell'attività NSURLSession * 'inizializzatori e i metodi NSString e NSData per il recupero dei dati da un URL), stampare l'oggetto o l'attività di connessione e l'URL, attendere fino al raggiungimento del punto di interruzione dell'errore, quindi cercare l'URL nell'output di debug risultante. – dgatwood

6

non ero in grado di eseguire gran parte della traccia dello stack quando si aggiungono questi punti di interruzione; tuttavia, questo post del blog mi ha aiutato a capire quali domini sono insufficienti:

http://timekl.com/blog/2015/08/21/shipping-an-app-with-app-transport-security/

tl; dr: impostare l'ambiente CFNETWORK_DIAGNOSTICS variabile a 1 (come impostare le variabili d'ambiente, se avete bisogno di una mano: http://nshipster.com/launch-arguments-and-environment-variables/). questo registrerà tutta l'attività di CFNetwork in un file che vedrai nella console; cerca quel file per "Fail" e puoi vedere quali richieste stanno fallendo e perché.

+0

La stampa di $ x1 non ha funzionato? Cercando di capire se fosse deterministico o no ... –

+1

Questo è molto utile! –

+0

Vedere anche https://developer.apple.com/library/ios/qa/qa1887/_index.html –

-1

Mentre si lavora con iOS 9, dobbiamo mettere sotto le righe in info.plist altrimenti nessuna chiamata API funzionerà.

<key>NSAppTransportSecurity</key> 
<dict> 
<key>NSExceptionDomains</key> 
<dict> 
<key>dev.YourCompanyName.com</key> 
<dict> 
<key>NSIncludesSubdomains</key> 
<false/> 
<key>NSExceptionAllowsInsecureHTTPLoads</key> 
<true/> 
<key>NSExceptionRequiresForwardSecrecy</key> 
<true/> 
<key>NSExceptionMinimumTLSVersion</key> 
<string>TLSv1.2</string> 
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> 
<true/> 
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
<true/> 
<key>NSThirdPartyExceptionMinimumTLSVersion</key> 
<string>TLSv1.2</string> 
<key>NSRequiresCertificateTransparency</key> 
<false/> 
</dict> 
</dict> 
</dict> 
+0

Ciò non è accurato. Alcune di queste chiavi potrebbero essere richieste o meno in base alla sicurezza dell'endpoint. La mia domanda riguarda specificamente l'interruzione/debug delle chiamate non protette. https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/ –