IT Share you

Xcode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN

shareyou 2020. 12. 5. 10:56
반응형

Xcode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN


iOS에서 실행되는 간단한 프로그램 HelloWorld가 있습니다. 동일한 코드가 오랫동안 잘 실행되었습니다. 최근에 Macbook의 Xcode 9에 연결된 ipad에서 프로그램이 실행될 때 아래와 같은 BoringSSL 오류가 발생합니다. 시뮬레이터에서 프로그램을 실행할 때이 오류가 표시되지 않습니다. iOS는 11.2입니다. Xcode는 9.2입니다.

내 코드에는 BoringSSL에 대한 참조가 없습니다. 그러나 NSMutableURLRequest를 사용하여 서버에 https 호출을합니다. 호출이 잘 작동하고 BoringSSL 메시지를 제외한 모든 것이 잘 작동하는 것 같습니다.

메시지가 나타나는 이유를 디버깅 할 수있는 방법이 있습니까? HellowWorld [466 : 85961],이 두 숫자는 무엇을 의미합니까?

메시지의 의미는 무엇이며 어떻게 피할 수 있습니까?

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

스크린 샷 추가


메시지가 나타나는 이유를 디버깅 할 수있는 방법이 있습니까?

, 있습니다 . 아직 언급되지 않은 것이 조금 놀랍습니다.

CFNetworkFoundation의 네트워킹 클래스 의 핵심을 처리합니다 .- CFNETWORK_DIAGNOSTICS환경 변수 를 통한 자세한 로깅 기능 (종종 간과 됨)도 있습니다 .

프로그래밍 방식으로 CFNetwork진단 로깅 활성화 :

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

0에서 3까지의 정수 값으로 설정해야합니다. 여기서 0은 꺼져 있고 숫자가 클수록 더 많은 로깅이 제공됩니다. 정상적인 개발 중에 Xcode의 체계 편집기를 통해이 환경 변수를 설정할 수 있습니다. 응용 프로그램은 엑스 코드에서 실행하면 CFNetwork로그 항목 디버그 콘솔 영역에 표시됩니다 (표시되지 않는 경우, 선택 View> Debug Area> Show Debug Area).

환경 변수는 앱 시작 시퀀스의 시작 부분에 배치되어야합니다. 일반적으로 이것을 main의 시작 부분에 두는 것으로 충분하지만, 사용하는 C ++ 정적 이니셜 라이저가있는 경우 CFNetwork그 앞에 넣어야합니다.

참고 : Swift에서이 코드는 main.swift. 기본적으로 Swift 앱에는 main.swift; “The Swift Programming Language”는 어떻게 추가하는지 설명합니다.
* 또한 Swift에서 setenv.

위의 환경 변수를 설정하면 문제가 발생한 위치를 확인하는 데 확실히 도움이되며, 적어도 다소 모호한 오류 메시지를 진단하기 시작할 수있는 시작점이 될 것입니다.

CFNetwork 진단 로깅


info.plist에 "App Transport Security Settings"키를 추가하여 문제를 해결했습니다. "Allow Arbitrary Loads"가 "Yes"로 설정되어 있는지 확인합니다.


위의 방법이 작동하지 않는 사람들에게는 이것이 내 경우 문제였습니다.

나는 송신 된 GETJSON의와 요청 요청 본문 사용 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]);

아마도 신속한 프로젝트와 비슷한 것을 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/47802071/xcode-9-ios-11-boringssl-ssl-error-zero-return

반응형