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
3 ответа
Есть ли способ, которым я могу отладить, почему появляется сообщение?
Да, есть, и я немного удивлен, что это еще не было упомянуто.
CFNetwork
обращается с ядром Foundation
сетевые классы - он также имеет (часто упускается из виду) возможность детальной регистрации через CFNETWORK_DIAGNOSTICS
переменная окружения.
Программное включение CFNetwork
ведение журнала диагностики:
setenv("CFNETWORK_DIAGNOSTICS", "3", 1);
Это должно быть установлено в целочисленное значение от 0 до 3, где 0 выключен, а более высокие числа дают постепенно больше регистрации. Во время обычной разработки вы можете установить эту переменную среды через редактор схем Xcode. Когда приложение запускается из Xcode, CFNetwork
записи журнала появятся в области консоли отладки (если они не видны, выберите View
> Debug Area
> Show Debug Area
).
Переменная окружения должна быть помещена в самом начале последовательности запуска приложения. Обычно достаточно поместить это в начало main, но если у вас есть статические инициализаторы C++, которые используют CFNetwork
Вы должны будете поставить это перед тем.
Примечание: в Swift этот код будет
main.swift
, По умолчанию приложения Swift не имеютmain.swift
; "Язык программирования Swift" объясняет, как его добавить.
* Также обратите внимание, что в Swift удалите точку с запятой в концеsetenv
,
Установка приведенной выше переменной среды определенно должна помочь определить причину проблемы или, по крайней мере, дать вам отправную точку для начала диагностики довольно расплывчатого сообщения об ошибке.
Мне удалось решить эту проблему, добавив ключ "Настройки безопасности транспорта приложения" в список info.plist. Убедитесь, что для параметра "Разрешить произвольные загрузки" установлено значение "Да".
Для тех из вас, у кого вышеописанные методы не работали, вот в чем проблема в моем случае:
Я отправлял GET
запрос с телом запроса JSON с использованием Alamofire. Я изменил это на GET
запрос, который содержит параметры в качестве параметров запроса в URL вместо (вдоль строк GET https://your-api.com/v1/request?param=value
). Тогда это сработало без нареканий.
Я получил похожее сообщение при попытке использовать NSLog для публикации очень длинного списка, так как он долгое время публиковал список в консоли отладки, а затем выводил часть списка, а затем несколько ...
чтобы показать, что в консоли было больше, чего не было напечатано, я исправил это (используя OBJ-C) и добавил этот #define к своему VC.m
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
возможно, вы можете использовать что-то похожее на ваш быстрый проект.