XCode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN

У меня есть простая программа HelloWorld, работающая на iOS. Тот же код работает нормально в течение длительного времени. Недавно я заметил, что я получаю ниже ошибку BoringSSL, когда программа работает на моем ipad, подключенном к XCode 9 на моем Macbook. Я не вижу эту ошибку, когда запускаю программу в симуляторе. IOS - 11.2. Xcode - 9.2.

Мой код не имеет ссылки на BoringSSL. Однако он использует NSMutableURLRequest для вызова https на сервер. Вызов работает нормально, и все работает нормально, кроме сообщений BoringSSL.

Есть ли способ, чтобы я мог отлаживать, почему сообщение появляется? HellowWorld [466: 85961], что означают эти 2 цифры?

Кто-нибудь знает, что означает сообщение и как его избежать?

2017-12-13 15:41:13.486047-0500 HellowWorld[466:85961] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
2017-12-13 15:41:13.486363-0500 HellowWorld[466:85961] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert

Screenshot added

Ответ 1

Есть ли способ, чтобы я мог отлаживать, почему сообщение появляется?

Да, есть, и я немного удивлен, что он еще не упоминался.

CFNetwork обрабатывает ядро сетевых классов Foundation - у него также есть (часто пропускаемая) возможность детального ведения журнала через переменную среды CFNETWORK_DIAGNOSTICS.

Программирование CFNetwork журнала диагностики CFNetwork:

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);

Он должен быть установлен в целочисленное значение от 0 до 3, где 0 выключено, а более высокие номера дают более высокий уровень регистрации. Во время нормальной разработки вы можете установить эту переменную среды через редактор схем Xcodes. Когда приложение запускается из Xcode, CFNetwork журнала CFNetwork появятся в области консоли отладки (если не видны, выберите " View > " Debug Area > " Show Debug Area).

Переменная среды должна быть размещена прямо в начале последовательности запуска приложений. Обычно поставить это в начале main достаточно, но если у вас есть C++ статические инициализаторы, которые используют CFNetwork вы должны поставить его перед ними.

Примечание. В Swift этот код будет main.swift в main.swift. По умолчанию приложения Swift не имеют main.swift; "Быстрый язык программирования" объясняет, как добавить его.
* Также обратите внимание, что в Swift удалите полуколонку в конце setenv.

Установка переменной окружения выше должна определенно помочь в определении того, где проблема, или, по крайней мере, дать вам отправную точку, чтобы начать диагностировать несколько неопределенное сообщение об ошибке.

CFNetwork Diagnostic Logging

Ответ 2

Я получил аналогичное сообщение при попытке использовать NSLog для публикации очень длинного списка, поскольку он будет размещать список в течение длительного времени в консоли отладки, тогда он перечисляет часть списка, а затем несколько ... чтобы показать, что было больше который не был напечатан на консоли, я исправил это (используя OBJ-C) и добавив этот #define к моему VC.m

#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

возможно, вы можете использовать что-то похожее на ваш быстрый проект.