Как распечатать сбойные ссылки NSURLConnection, чтобы найти множество исключений NSAppTransportSecurity?
Веб-просмотры в моих приложениях получают эти ошибки от новых стандартов iOS 9 NSAppTransportSecurity:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Я не знаю, где генерируется эта ошибка, но по сути я хочу узнать, как узнать, какой URL был предпринят?
После этого я могу настроить plist соответствующим образом.
До сих пор я установил точку останова в - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
но этот код не вызывается при получении ошибки.
1 ответ
Если вы просто отлаживаете, установите для переменной среды CFNETWORK_DIAGNOSTICS значение 3, например
setenv("CFNETWORK_DIAGNOSTICS", "3", 1);
в начале вашего приложения, прежде чем вызывать что-либо, что потенциально может привести к загрузке кода инфраструктуры CFNetwork (т. е. в начале main). Вы должны получить URL-адреса в консоли.
Если вам нужно сделать это в приложении доставки таким образом, чтобы вы могли отлаживать его удаленно, зарегистрируйте объект NSURLProtocol глобально, а в методе canInitWithRequest: напечатайте значение и верните NO. Это должно произойти достаточно рано в процессе, чтобы оно работало даже при включенной строгой транспортной безопасности.
Пример:
@interface MyProtocol: NSURLProtocol
@end
@implementation MyProtocol
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
NSLog(@"Request: %@\n", request); // Log it in whatever way you need.
return NO;
}
@end
...
// Somewhere else, e.g. in applicationDidFinishLaunching:, do this:
[NSURLProtocol registerClass:[MyProtocol class]];
Заказ не гарантируется, но ошибочный URL-адрес, скорее всего, будет напечатан примерно до сбоя.