diff --git a/packages/core/ios/Sources/Attributes.swift b/packages/core/ios/Sources/Attributes.swift index adf9638f5..25dd8df20 100644 --- a/packages/core/ios/Sources/Attributes.swift +++ b/packages/core/ios/Sources/Attributes.swift @@ -109,10 +109,3 @@ internal struct InternalConfigurationAttributes { /// Expects `Bool` value. static let dropAction = "_dd.action.drop_action" } - -/// Error messages that can be thrown to the JS SDK -internal struct Errors { - /// Error thrown when a log was sent before the SDK was initialized. - /// Not sending the log prevent the logger to be set to a Noop logger. - static let logSentBeforeSDKInit = "DD_INTERNAL_LOG_SENT_BEFORE_SDK_INIT" -} diff --git a/packages/core/ios/Sources/DdLogsImplementation.swift b/packages/core/ios/Sources/DdLogsImplementation.swift index fe3fde092..7c428af45 100644 --- a/packages/core/ios/Sources/DdLogsImplementation.swift +++ b/packages/core/ios/Sources/DdLogsImplementation.swift @@ -13,27 +13,20 @@ import DatadogCore public class DdLogsImplementation: NSObject { private lazy var logger: LoggerProtocol = loggerProvider() private let loggerProvider: () -> LoggerProtocol - private let isSDKInitialized: () -> Bool - internal init(_ loggerProvider: @escaping () -> LoggerProtocol, _ isSDKInitialized: @escaping () -> Bool) { + internal init(_ loggerProvider: @escaping () -> LoggerProtocol) { self.loggerProvider = loggerProvider - self.isSDKInitialized = isSDKInitialized } @objc public override convenience init() { self.init( - { DatadogLogs.Logger.create(with: DatadogSDKWrapper.shared.loggerConfiguration) }, - { Datadog.isInitialized() } + { DatadogLogs.Logger.create(with: DatadogSDKWrapper.shared.loggerConfiguration) } ) } @objc public func debug(message: String, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger.debug(message, error: nil, attributes: attributes) resolve(nil) @@ -41,10 +34,6 @@ public class DdLogsImplementation: NSObject { @objc public func info(message: String, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger.info(message, error: nil, attributes: attributes) resolve(nil) @@ -52,10 +41,6 @@ public class DdLogsImplementation: NSObject { @objc public func warn(message: String, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger.warn(message, error: nil, attributes: attributes) resolve(nil) @@ -63,10 +48,6 @@ public class DdLogsImplementation: NSObject { @objc public func error(message: String, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger.error(message, error: nil, attributes: attributes) resolve(nil) @@ -74,10 +55,6 @@ public class DdLogsImplementation: NSObject { @objc public func debugWithError(message: String, errorKind: String?, errorMessage: String?, stacktrace: String?, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger._internal.log(level: .debug, message: message, errorKind: errorKind, errorMessage: errorMessage, stackTrace: stacktrace, attributes: attributes) resolve(nil) @@ -85,10 +62,6 @@ public class DdLogsImplementation: NSObject { @objc public func infoWithError(message: String, errorKind: String?, errorMessage: String?, stacktrace: String?, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger._internal.log(level: .info, message: message, errorKind: errorKind, errorMessage: errorMessage, stackTrace: stacktrace, attributes: attributes) resolve(nil) @@ -96,10 +69,6 @@ public class DdLogsImplementation: NSObject { @objc public func warnWithError(message: String, errorKind: String?, errorMessage: String?, stacktrace: String?, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger._internal.log(level: .warn, message: message, errorKind: errorKind, errorMessage: errorMessage, stackTrace: stacktrace, attributes: attributes) resolve(nil) @@ -107,10 +76,6 @@ public class DdLogsImplementation: NSObject { @objc public func errorWithError(message: String, errorKind: String?, errorMessage: String?, stacktrace: String?, context: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - if (!self.isSDKInitialized()) { - reject(nil, Errors.logSentBeforeSDKInit, nil) - return - } let attributes = castAttributesToSwift(context).mergeWithGlobalAttributes() logger._internal.log(level: .error, message: message, errorKind: errorKind, errorMessage: errorMessage, stackTrace: stacktrace, attributes: attributes) resolve(nil) diff --git a/packages/core/ios/Tests/DdLogsTests.swift b/packages/core/ios/Tests/DdLogsTests.swift index 60640e807..d3d31a95c 100644 --- a/packages/core/ios/Tests/DdLogsTests.swift +++ b/packages/core/ios/Tests/DdLogsTests.swift @@ -14,7 +14,7 @@ func mockReject(args: String?, arg: String?, err: Error?) {} internal class DdLogsTests: XCTestCase { private let mockNativeLogger = MockNativeLogger() - private lazy var logger = DdLogsImplementation({ self.mockNativeLogger }, { true }) + private lazy var logger = DdLogsImplementation({ self.mockNativeLogger }) private let testMessage_swift: String = "message" private let testMessage_objc: NSString = "message" @@ -80,7 +80,7 @@ internal class DdLogsTests: XCTestCase { let logger = DdLogsImplementation({ [unowned self] in expectation.fulfill() return self.mockNativeLogger - }, { true }) + }) // When (0..<10).forEach { _ in logger.debug(message: "foo", context: [:], resolve: mockResolve, reject: mockReject)} @@ -372,35 +372,6 @@ internal class DdLogsTests: XCTestCase { GlobalState.globalAttributes.keys ) } - - func testDoesNotInitializeLoggerBeforeSdkIsInitialized() throws { - var isInitialized = false - let newLogger = DdLogsImplementation({ self.mockNativeLogger }, { isInitialized }) - - newLogger.debug(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.info(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.warn(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.error(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.debugWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - newLogger.infoWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - newLogger.warnWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - newLogger.errorWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - - XCTAssertEqual(mockNativeLogger.receivedMethodCalls.count, 0) - - isInitialized = true - - newLogger.debug(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.info(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.warn(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.error(message: testMessage_objc as String, context: validTestAttributes_objc, resolve: mockResolve, reject: mockReject) - newLogger.debugWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - newLogger.infoWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - newLogger.warnWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - newLogger.errorWithError(message: testMessage_objc as String, errorKind: testErrorKind_objc as String, errorMessage: testErrorMessage_objc as String, stacktrace: testErrorStacktrace_objc as String, context: invalidTestAttributes, resolve: mockResolve, reject: mockReject) - - XCTAssertEqual(mockNativeLogger.receivedMethodCalls.count, 8) - } } private class MockNativeLogger: LoggerProtocol { diff --git a/packages/internal-testing-tools/ios/Sources/DatadogCoreProxy.swift b/packages/internal-testing-tools/ios/Sources/DatadogCoreProxy.swift index 9f7c3db2c..0d7e1dec1 100644 --- a/packages/internal-testing-tools/ios/Sources/DatadogCoreProxy.swift +++ b/packages/internal-testing-tools/ios/Sources/DatadogCoreProxy.swift @@ -96,7 +96,7 @@ private final class FeatureScopeInterceptor: @unchecked Sendable { let actualWriter: Writer unowned var interception: FeatureScopeInterceptor? - func write(value: T, metadata: M) { + func write(value: T, metadata: M?, completion: @escaping DatadogInternal.CompletionHandler) where T : Encodable, M : Encodable { group.enter() defer { group.leave() } diff --git a/packages/internal-testing-tools/ios/Sources/DdInternalTestingImplementation.swift b/packages/internal-testing-tools/ios/Sources/DdInternalTestingImplementation.swift index 7b1c2862d..41a213efd 100644 --- a/packages/internal-testing-tools/ios/Sources/DdInternalTestingImplementation.swift +++ b/packages/internal-testing-tools/ios/Sources/DdInternalTestingImplementation.swift @@ -14,7 +14,7 @@ import DatadogInternal public class DdInternalTestingImplementation: NSObject { @objc public func clearData(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - let coreProxy = (DatadogSDKWrapper.shared.getCoreInstance() as! DatadogCoreProxy) + let coreProxy = CoreRegistry.default as! DatadogCoreProxy coreProxy.waitAndDeleteEvents(ofFeature: "rum") coreProxy.waitAndDeleteEvents(ofFeature: "logging") coreProxy.waitAndDeleteEvents(ofFeature: "tracing") @@ -26,7 +26,7 @@ public class DdInternalTestingImplementation: NSObject { @objc public func getAllEvents(feature: String, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { do { - let coreProxy = (DatadogSDKWrapper.shared.getCoreInstance() as! DatadogCoreProxy) + let coreProxy = CoreRegistry.default as! DatadogCoreProxy let events = coreProxy.waitAndReturnEventsData(ofFeature: feature) let data = try JSONSerialization.data(withJSONObject: events, options: .prettyPrinted) resolve(String(data: data, encoding: String.Encoding.utf8) ?? "") @@ -39,9 +39,10 @@ public class DdInternalTestingImplementation: NSObject { @objc public func enable(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void { - DatadogSDKWrapper.shared.addOnCoreInitializedListener(listener: {core in + DatadogSDKWrapper.shared.addOnSdkInitializedListener(listener: {core in let proxiedCore = DatadogCoreProxy(core: core) - DatadogSDKWrapper.shared.setCoreInstance(core: proxiedCore) + CoreRegistry.unregisterDefault() + CoreRegistry.register(default: proxiedCore) }) resolve(nil) } @@ -51,9 +52,10 @@ public class DdInternalTestingImplementation: NSObject { public class DdInternalTestingNativeInitialization: NSObject { @objc public func enableFromNative() -> Void { - DatadogSDKWrapper.shared.addOnCoreInitializedListener(listener: {core in + DatadogSDKWrapper.shared.addOnSdkInitializedListener(listener: {core in let proxiedCore = DatadogCoreProxy(core: core) - DatadogSDKWrapper.shared.setCoreInstance(core: proxiedCore) + CoreRegistry.unregisterDefault() + CoreRegistry.register(default: proxiedCore) }) } }