From 655ba9d2d17a74fc2431645706ecde3e7fb654bc Mon Sep 17 00:00:00 2001 From: opficdev <162981733+opficdev@users.noreply.github.com> Date: Sat, 27 Jun 2026 17:05:31 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20REST=20=EC=97=90=EB=9F=AC=20Crashlytics?= =?UTF-8?q?=20=EB=A9=94=ED=83=80=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/FirebaseCrashlyticsHelper.swift | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Application/DevLogInfra/Sources/Common/FirebaseCrashlyticsHelper.swift b/Application/DevLogInfra/Sources/Common/FirebaseCrashlyticsHelper.swift index 217b239e..17be0f5a 100644 --- a/Application/DevLogInfra/Sources/Common/FirebaseCrashlyticsHelper.swift +++ b/Application/DevLogInfra/Sources/Common/FirebaseCrashlyticsHelper.swift @@ -7,6 +7,7 @@ import FirebaseCrashlytics import Foundation +import Nexa enum FirebaseCrashlyticsHelper { static func record( @@ -39,6 +40,11 @@ private extension FirebaseCrashlyticsHelper { case underlyingCode } + enum RESTKey: String { + case statusCode = "restStatusCode" + case errorMessage = "restErrorMessage" + } + static func userInfo( for nsError: NSError, error: Error, @@ -51,10 +57,43 @@ private extension FirebaseCrashlyticsHelper { Key.underlyingCode.rawValue: nsError.code ] + restMetadata(for: error).forEach { + userInfo[$0.key] = $0.value + } + metadata.forEach { userInfo[$0.key] = $0.value } return userInfo } + + static func restMetadata(for error: Error) -> [String: String] { + guard let error = error as? NXError else { return [:] } + + switch error { + case let .invalidStatus(statusCode, data), + let .server(statusCode, data, underlying: _): + var metadata = [ + RESTKey.statusCode.rawValue: String(statusCode) + ] + + if let message = restErrorMessage(from: data) { + metadata[RESTKey.errorMessage.rawValue] = message + } + + return metadata + default: + return [:] + } + } + + private static func restErrorMessage(from data: Data?) -> String? { + struct RESTErrorBody: Decodable { + let message: String? + } + + guard let data else { return nil } + return try? JSONDecoder().decode(RESTErrorBody.self, from: data).message + } }