diff --git a/Source/NSError+JSON.swift b/Source/NSError+JSON.swift index ff58d92c09..357d95fdbb 100644 --- a/Source/NSError+JSON.swift +++ b/Source/NSError+JSON.swift @@ -17,8 +17,9 @@ enum APIErrorCode : String { } fileprivate enum ErrorFields: String, RawStringExtractable { - case Code = "error_code" - case DeveloperMessage = "developer_message" + case error = "error" + case errorCode = "error_code" + case developerMessage = "developer_message" } extension NSError { @@ -30,16 +31,35 @@ extension NSError { } func isAPIError(code: APIErrorCode) -> Bool { - guard let errorCode = errorInfo?[ErrorFields.Code.rawValue] as? String else { return false } + guard let errorCode = errorInfo?[ErrorFields.errorCode.rawValue] as? String else { return false } return errorCode == code.rawValue } - + /// error_code can be in the different hierarchy. Like it can be direct or it can be contained in a dictionary under developer_message private var errorInfo: Dictionary? { - guard let errorInfo = userInfo[ErrorFields.DeveloperMessage.rawValue] as? Dictionary else { - return userInfo + var errorVaule: Any? + + if (userInfo[ErrorFields.errorCode.rawValue] != nil) { + errorVaule = userInfo[ErrorFields.errorCode.rawValue] + } + else if (userInfo[ErrorFields.error.rawValue] != nil) { + errorVaule = userInfo[ErrorFields.error.rawValue] + } + else if (userInfo[ErrorFields.developerMessage.rawValue] != nil) { + errorVaule = userInfo[ErrorFields.developerMessage.rawValue] + } + + return errorInfo(value: errorVaule) + } + + private func errorInfo(value: Any?) -> Dictionary? { + var errorInfo: Dictionary? = [:] + errorInfo?.setSafeObject(value, forKey: ErrorFields.errorCode.rawValue) + + if errorInfo?.count ?? 0 > 0 { + return errorInfo } - - return errorInfo + + return userInfo } } diff --git a/edX.xcodeproj/project.pbxproj b/edX.xcodeproj/project.pbxproj index 4770e55583..c0d83eb920 100644 --- a/edX.xcodeproj/project.pbxproj +++ b/edX.xcodeproj/project.pbxproj @@ -5660,7 +5660,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CONFIGURATION_BUILD_DIR = "$PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - CURRENT_PROJECT_VERSION = 2.21.3; + CURRENT_PROJECT_VERSION = 2.21.4; DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -6118,7 +6118,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CONFIGURATION_BUILD_DIR = "$PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - CURRENT_PROJECT_VERSION = 2.21.3; + CURRENT_PROJECT_VERSION = 2.21.4; DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -6165,7 +6165,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CONFIGURATION_BUILD_DIR = "$PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; - CURRENT_PROJECT_VERSION = 2.21.3; + CURRENT_PROJECT_VERSION = 2.21.4; DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = (