Skip to content

Commit a6e555a

Browse files
fix: update LoadValidator error message
1 parent 56dbf49 commit a6e555a

3 files changed

Lines changed: 17 additions & 13 deletions

File tree

Sources/Swift/Tools/LoadValidator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ import MachO
6767
continue
6868
}
6969
if name.contains(self.targetClassName) {
70-
var message = ["❌ Sentry SDK was loaded multiple times in the same binary"]
70+
var message = ["❌ Sentry SDK was loaded multiple times in the same address space"]
7171
message.append("⚠️ This can cause undefined behavior, crashes, or duplicate reporting.")
7272
message.append("Ensure the SDK is linked only once, found `\(self.targetClassName)` class in image path: \(imageName)")
7373
SentrySDKLog.error(message.joined(separator: "\n"))

Tests/DuplicatedSDKTest/Unit Tests/Unit_Tests.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ final class TestLog: XCTestCase {
1212
stopCapturingOutput()
1313
super.tearDown()
1414
}
15-
15+
16+
private let loadedMultipleTimesMessage = "Sentry SDK was loaded multiple times in the same address space"
17+
1618
func testDuplicatedLoadMessageOnSDKInit() throws {
1719
let expectation = XCTestExpectation(description: "Wait for duplicated SDK load message")
1820

@@ -38,7 +40,7 @@ final class TestLog: XCTestCase {
3840
let checkQueue = DispatchQueue(label: "message.check")
3941
checkQueue.async {
4042
while self.isCapturing {
41-
if self.capturedOutput.contains("Sentry SDK was loaded multiple times in the same binary") {
43+
if self.capturedOutput.contains(loadedMultipleTimesMessage) {
4244
expectation.fulfill()
4345
break
4446
}
@@ -49,7 +51,7 @@ final class TestLog: XCTestCase {
4951
// This expectation is fulfilled immediately on a mac, but takes way longer on CI
5052
wait(for: [expectation], timeout: 600.0)
5153

52-
XCTAssertTrue(capturedOutput.contains("Sentry SDK was loaded multiple times in the same binary"))
54+
XCTAssertTrue(capturedOutput.contains(loadedMultipleTimesMessage))
5355
}
5456

5557
private func startCapturingOutput() {

Tests/SentryTests/Swift/Core/Tools/LoadValidatorTests.swift

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ class LoadValidatorTests: XCTestCase {
1212
private var dispatchQueueWrapper: TestSentryDispatchQueueWrapper!
1313
private var defaultImageAddress: UInt64 = 0x1000
1414
private var defaultImageSize: UInt64 = 0x20
15-
15+
16+
private let loadedMultipleTimesMessage = "❌ Sentry SDK was loaded multiple times in the same binary ❌"
17+
1618
// MARK: - Setup and Teardown
1719

1820
override func setUp() {
@@ -58,7 +60,7 @@ class LoadValidatorTests: XCTestCase {
5860
// Assert
5961
XCTAssertFalse(validationResult, "Validation should return false for system libraries")
6062
XCTAssertFalse(getClassListCalled, "ObjectiveC Wrapper should not be called for a system library")
61-
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times") })
63+
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
6264
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 0)
6365
}
6466

@@ -86,7 +88,7 @@ class LoadValidatorTests: XCTestCase {
8688
// Assert
8789
XCTAssertFalse(validationResult, "Validation should return false for simulator libraries")
8890
XCTAssertFalse(getClassListCalled, "ObjectiveC Wrapper should not be called for a simulator library")
89-
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times") })
91+
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
9092
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 0)
9193
}
9294

@@ -114,7 +116,7 @@ class LoadValidatorTests: XCTestCase {
114116
// Assert
115117
XCTAssertFalse(validationResult, "Validation should return false for cryptex simulator libraries")
116118
XCTAssertFalse(getClassListCalled, "ObjectiveC Wrapper should not be called for a cryptex simulator library")
117-
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times") })
119+
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
118120
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 0)
119121
}
120122

@@ -142,7 +144,7 @@ class LoadValidatorTests: XCTestCase {
142144
// Assert
143145
XCTAssertFalse(validationResult, "Validation should return false for system libraries")
144146
XCTAssertFalse(getClassListCalled, "ObjectiveC Wrapper should not be called for a simulator library")
145-
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times") })
147+
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
146148
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 0)
147149
}
148150

@@ -170,7 +172,7 @@ class LoadValidatorTests: XCTestCase {
170172
// Assert
171173
XCTAssertFalse(validationResult, "Validation should return false")
172174
XCTAssertTrue(getClassListCalled, "ObjectiveC Wrapper should be called for an app binary")
173-
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times") })
175+
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
174176
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 1)
175177
}
176178

@@ -201,7 +203,7 @@ class LoadValidatorTests: XCTestCase {
201203
// Assert
202204
XCTAssertTrue(validationResult, "Validation should skip for app binary")
203205
XCTAssertTrue(getClassListCalled, "ObjectiveC Wrapper should be called for an app binary")
204-
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times in the same binary ❌") })
206+
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
205207
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains("⚠️ This can cause undefined behavior, crashes, or duplicate reporting.") })
206208
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains("Ensure the SDK is linked only once, found `SentryDependencyContainerSwiftHelper` class in image path: \(imageName)") })
207209
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 1)
@@ -234,7 +236,7 @@ class LoadValidatorTests: XCTestCase {
234236
// Assert
235237
XCTAssertTrue(validationResult, "Validation should return true for app")
236238
XCTAssertTrue(getClassListCalled, "ObjectiveC Wrapper should be called for an app binary")
237-
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times in the same binary ❌") })
239+
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
238240
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains("⚠️ This can cause undefined behavior, crashes, or duplicate reporting.") })
239241
XCTAssertTrue(testOutput.loggedMessages.contains { $0.contains("Ensure the SDK is linked only once, found `SentryDependencyContainerSwiftHelper` class in image path: \(imageName)") })
240242
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 1)
@@ -271,7 +273,7 @@ class LoadValidatorTests: XCTestCase {
271273
// Assert
272274
XCTAssertFalse(validationResult, "Validation should skip for sentry framework")
273275
XCTAssertTrue(getClassListCalled, "ObjectiveC Wrapper should not be called for an app binary")
274-
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains("❌ Sentry SDK was loaded multiple times") })
276+
XCTAssertFalse(testOutput.loggedMessages.contains { $0.contains(loadedMultipleTimesMessage) })
275277
XCTAssertEqual(dispatchQueueWrapper.dispatchAsyncInvocations.count, 1)
276278
}
277279
}

0 commit comments

Comments
 (0)