Skip to content

Commit 7b92893

Browse files
feat: add additional params to errors (#96)
* feat: adding parameters to error logging * fix: linting, tidying up and unit test * fix: additional unit test * feat: resetting parameters after logging crash * chore: setting custom keys and values to empty before setting with specific * feat: using error record with userInfo * chore: tidying up * chore: linting * chore: adjusted as per PR comment request * chore: adjusted unit test * chore: adjusted unit test
1 parent f68dea9 commit 7b92893

7 files changed

Lines changed: 59 additions & 10 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import FirebaseCrashlytics
22

33
protocol CrashLogger {
4-
func record(error: Error)
4+
func record(error: Error, userInfo: [String: Any]?)
55
func setCrashlyticsCollectionEnabled(_ value: Bool)
66
}
77

8-
extension Crashlytics: CrashLogger { }
8+
extension Crashlytics: CrashLogger {}

Sources/GAnalytics/GAnalytics.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ extension GAnalytics: AnalyticsService {
106106

107107
/// Logs crashes accepting an error in Firebase package.
108108
public func logCrash(_ error: NSError) {
109-
crashLogger.record(error: error)
109+
crashLogger.record(error: error, userInfo: nil)
110110
}
111111

112112
/// Granting analytics and crashlytics permissions in Firebase package.

Sources/GAnalytics/GAnalyticsV2.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,17 @@ extension GAnalyticsV2: AnalyticsServiceV2 {
106106

107107
/// Logs crashes accepting an error in Firebase package.
108108
public func logCrash(_ error: NSError) {
109-
crashLogger.record(error: error)
109+
crashLogger.record(error: error, userInfo: nil)
110+
}
111+
112+
public func logCrash(_ crash: Error) {
113+
let errorUserInfo = (crash as? CustomNSError)?.errorUserInfo ?? [:]
114+
115+
let paramsToLog = additionalParameters.merging(errorUserInfo) { lhs, _ in
116+
lhs
117+
}
118+
119+
crashLogger.record(error: crash, userInfo: paramsToLog)
110120
}
111121

112122
/// Granting analytics and crashlytics permissions in Firebase package.

Sources/Logging/AnalyticsServiceV2.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,4 @@ extension AnalyticsServiceV2 {
2626
public func trackScreen(_ screen: LoggableScreen) {
2727
trackScreen(screen, parameters: [:])
2828
}
29-
30-
/// Protocol method for crash logging, calling the conforming type's method for passing errors as `NSError`s.
31-
public func logCrash(_ crash: Error) {
32-
logCrash(crash as NSError)
33-
}
3429
}

Tests/GAnalyticsTests/GAnalyticsV2Tests.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,34 @@ extension GAnalyticsTestsV2 {
272272
)
273273
}
274274

275+
func testLogCrashCustomNSError() {
276+
let error = MockCustomNSError(kind: "testError1")
277+
278+
sut.additionalParameters = ["additionalParameter": "param"]
279+
sut.logCrash(error)
280+
281+
XCTAssertEqual(crashLogger.errors.count, 1)
282+
XCTAssertEqual(crashLogger.loggedParams?["kind"] as? String, "testError1")
283+
XCTAssertEqual(crashLogger.loggedParams?["testString"] as? String, "stringValue")
284+
XCTAssertEqual(crashLogger.loggedParams?["testInt"] as? Int, 123)
285+
286+
XCTAssertEqual(crashLogger.loggedParams?["additionalParameter"] as? String, "param")
287+
}
288+
289+
func testLogCrashCustomNSErrorNotOverwritingParam() {
290+
let error = MockCustomNSError(kind: "testError1")
291+
292+
sut.additionalParameters = ["testString": "CorrectStringValue"]
293+
sut.logCrash(error)
294+
295+
XCTAssertEqual(crashLogger.errors.count, 1)
296+
XCTAssertEqual(crashLogger.loggedParams?["kind"] as? String, "testError1")
297+
XCTAssertEqual(crashLogger.loggedParams?["testString"] as? String, "CorrectStringValue")
298+
XCTAssertEqual(crashLogger.loggedParams?["testInt"] as? Int, 123)
299+
300+
XCTAssertNotEqual(crashLogger.loggedParams?["testString"] as? String, "stringValue")
301+
}
302+
275303
func testGrantAnalyticsPermission() {
276304
sut.grantAnalyticsPermission()
277305

Tests/GAnalyticsTests/Mocks/MockCrashLogger.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
final class MockCrashLogger: CrashLogger {
44
private(set) var errors: [Error] = []
55
private(set) var isCollectionEnabled: Bool?
6+
7+
var loggedParams: [AnyHashable: Any]? = [:]
68

7-
func record(error: Error) {
9+
func record(error: Error, userInfo: [String: Any]?) {
810
errors.append(error)
11+
loggedParams = userInfo
912
}
1013

1114
func setCrashlyticsCollectionEnabled(_ value: Bool) {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Foundation
2+
3+
struct MockCustomNSError: CustomNSError {
4+
let kind: String
5+
6+
var errorUserInfo: [String: Any] {
7+
[
8+
"kind": kind,
9+
"testString": "stringValue",
10+
"testInt": 123
11+
]
12+
}
13+
}

0 commit comments

Comments
 (0)