From d11fdcfb9305a57d0256aad045624a5a06c0077c Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Wed, 9 May 2018 20:16:30 -0700 Subject: [PATCH] Prevent console logging on iOS 11.3+ within WebSocket Summary: Fixes Xcode console output for web socket connections. Apple uses OSLog for logging within libnetworking starting 11.3+. The old way we hook into logging to prevent it will not work anymore. Let's hook into `__nwlog_pack` that is exclusively used by libnetworking and prevent the logging in there. Closes https://github.com/facebook/react-native/pull/18948 Reviewed By: fkgozali Differential Revision: D7940969 Pulled By: mmmulani fbshipit-source-id: a61beea34377044bfad7e3c446b2ec1138d6d1f5 --- .../WebSocket/RCTReconnectingWebSocket.m | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Libraries/WebSocket/RCTReconnectingWebSocket.m b/Libraries/WebSocket/RCTReconnectingWebSocket.m index 04e5dee57..55ed86f7b 100644 --- a/Libraries/WebSocket/RCTReconnectingWebSocket.m +++ b/Libraries/WebSocket/RCTReconnectingWebSocket.m @@ -19,6 +19,29 @@ #if RCT_DEV // Only supported in dev mode +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100300 /* __IPHONE_10_3 */ + +// From https://github.com/apple/swift/blob/ad40c770bfe372f879b530443a3d94761fe258a6/stdlib/public/SDK/os/os_log.m +typedef struct os_log_pack_s { + uint64_t olp_continuous_time; + struct timespec olp_wall_time; + const void *olp_mh; + const void *olp_pc; + const char *olp_format; + uint8_t olp_data[0]; +} os_log_pack_s, *os_log_pack_t; + +static void (*orig__nwlog_pack)(os_log_pack_t pack, os_log_type_t logType); + +static void my__nwlog_pack(os_log_pack_t pack, os_log_type_t logType) +{ + if (logType == OS_LOG_TYPE_ERROR && strstr(pack->olp_format, "Connection has no connected handler") == NULL) { + orig__nwlog_pack(pack, logType); + } +} + +#endif /* __IPHONE_10_3 */ + static void (*orig_nwlog_legacy_v)(int, char*, va_list); static void my_nwlog_legacy_v(int level, char *format, va_list args) { @@ -63,6 +86,11 @@ static void my_os_log_error_impl(void *dso, os_log_t log, os_log_type_t type, co rebind_symbols((struct rebinding[1]){ {"nwlog_legacy_v", my_nwlog_legacy_v, (void *)&orig_nwlog_legacy_v} }, 1); +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100300 /* __IPHONE_10_3 */ + rebind_symbols((struct rebinding[1]){ + {"__nwlog_pack", my__nwlog_pack, (void *)&orig__nwlog_pack} + }, 1); +#endif /* __IPHONE_10_3 */ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ rebind_symbols((struct rebinding[1]){ {"_os_log_error_impl", my_os_log_error_impl, (void *)&orig_os_log_error_impl}