diff --git a/SentryTestUtils/TestCurrentDateProvider.swift b/SentryTestUtils/TestCurrentDateProvider.swift index 60dcf341f1..27aacfbdb6 100644 --- a/SentryTestUtils/TestCurrentDateProvider.swift +++ b/SentryTestUtils/TestCurrentDateProvider.swift @@ -1,7 +1,7 @@ import Foundation @testable import Sentry -public class TestCurrentDateProvider: SentryCurrentDateProvider { +public class TestCurrentDateProvider: NSObject, SentryCurrentDateProvider { public static let defaultStartingDate = Date(timeIntervalSinceReferenceDate: 0) private var internalDate = defaultStartingDate private var internalSystemTime: UInt64 = 0 @@ -10,10 +10,9 @@ public class TestCurrentDateProvider: SentryCurrentDateProvider { private var _systemUptime: TimeInterval = 0 public override init() { - } - public override func date() -> Date { + public func date() -> Date { defer { if driftTimeForEveryRead { @@ -51,15 +50,14 @@ public class TestCurrentDateProvider: SentryCurrentDateProvider { } public var timezoneOffsetValue = 0 - public override func timezoneOffset() -> Int { + public func timezoneOffset() -> Int { return timezoneOffsetValue } - public override func systemTime() -> UInt64 { + public func systemTime() -> UInt64 { return internalSystemTime } - - override public func systemUptime() -> TimeInterval { + public func systemUptime() -> TimeInterval { _systemUptime } public func setSystemUptime(_ uptime: TimeInterval) { diff --git a/Sources/Sentry/SentryANRTrackerV1.m b/Sources/Sentry/SentryANRTrackerV1.m index 8c8365a504..28a3069f0c 100644 --- a/Sources/Sentry/SentryANRTrackerV1.m +++ b/Sources/Sentry/SentryANRTrackerV1.m @@ -70,7 +70,8 @@ - (void)detectANRs NSInteger reportThreshold = 5; NSTimeInterval sleepInterval = self.timeoutInterval / reportThreshold; - SentryCurrentDateProvider *dateProvider = SentryDependencyContainer.sharedInstance.dateProvider; + id dateProvider + = SentryDependencyContainer.sharedInstance.dateProvider; // Canceling the thread can take up to sleepInterval. while (YES) { diff --git a/Sources/Sentry/SentryANRTrackerV2.m b/Sources/Sentry/SentryANRTrackerV2.m index bfa9434f0d..50c639f624 100644 --- a/Sources/Sentry/SentryANRTrackerV2.m +++ b/Sources/Sentry/SentryANRTrackerV2.m @@ -72,7 +72,8 @@ - (void)detectANRs state = kSentryANRTrackerRunning; } - SentryCurrentDateProvider *dateProvider = SentryDependencyContainer.sharedInstance.dateProvider; + id dateProvider + = SentryDependencyContainer.sharedInstance.dateProvider; BOOL reported = NO; diff --git a/Sources/Sentry/SentryDateUtil.m b/Sources/Sentry/SentryDateUtil.m index cd89048973..d7166e40b4 100644 --- a/Sources/Sentry/SentryDateUtil.m +++ b/Sources/Sentry/SentryDateUtil.m @@ -5,13 +5,13 @@ @interface SentryDateUtil () -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @end @implementation SentryDateUtil -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.currentDateProvider = currentDateProvider; diff --git a/Sources/Sentry/SentryDefaultRateLimits.m b/Sources/Sentry/SentryDefaultRateLimits.m index 52e8c6ac20..a34cfdff35 100644 --- a/Sources/Sentry/SentryDefaultRateLimits.m +++ b/Sources/Sentry/SentryDefaultRateLimits.m @@ -15,7 +15,7 @@ @interface SentryDefaultRateLimits () @property (nonatomic, strong) SentryConcurrentRateLimitsDictionary *rateLimits; @property (nonatomic, strong) SentryRetryAfterHeaderParser *retryAfterHeaderParser; @property (nonatomic, strong) SentryRateLimitParser *rateLimitParser; -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @property (nonatomic, strong) SentryDateUtil *dateUtil; @end @@ -25,7 +25,7 @@ @implementation SentryDefaultRateLimits - (instancetype)initWithRetryAfterHeaderParser: (SentryRetryAfterHeaderParser *)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser *)rateLimitParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider + currentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.rateLimits = [[SentryConcurrentRateLimitsDictionary alloc] init]; diff --git a/Sources/Sentry/SentryDelayedFramesTracker.m b/Sources/Sentry/SentryDelayedFramesTracker.m index 47036f9512..0ca9edd0fa 100644 --- a/Sources/Sentry/SentryDelayedFramesTracker.m +++ b/Sources/Sentry/SentryDelayedFramesTracker.m @@ -13,7 +13,7 @@ @interface SentryDelayedFramesTracker () @property (nonatomic, assign) CFTimeInterval keepDelayedFramesDuration; -@property (nonatomic, strong, readonly) SentryCurrentDateProvider *dateProvider; +@property (nonatomic, strong, readonly) id dateProvider; @property (nonatomic, strong) NSMutableArray *delayedFrames; @property (nonatomic) uint64_t lastDelayedFrameSystemTimestamp; @property (nonatomic) uint64_t previousFrameSystemTimestamp; @@ -23,7 +23,7 @@ @interface SentryDelayedFramesTracker () @implementation SentryDelayedFramesTracker - (instancetype)initWithKeepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration - dateProvider:(SentryCurrentDateProvider *)dateProvider + dateProvider:(id)dateProvider { if (self = [super init]) { _keepDelayedFramesDuration = keepDelayedFramesDuration; diff --git a/Sources/Sentry/SentryDependencyContainer.m b/Sources/Sentry/SentryDependencyContainer.m index 19c9580584..c86ad3b3d8 100644 --- a/Sources/Sentry/SentryDependencyContainer.m +++ b/Sources/Sentry/SentryDependencyContainer.m @@ -94,7 +94,7 @@ - (instancetype)init _threadWrapper = [[SentryThreadWrapper alloc] init]; _binaryImageCache = [[SentryBinaryImageCache alloc] init]; _debugImageProvider = [[SentryDebugImageProvider alloc] init]; - _dateProvider = [[SentryCurrentDateProvider alloc] init]; + _dateProvider = [[SentryDefaultCurrentDateProvider alloc] init]; } return self; } diff --git a/Sources/Sentry/SentryFramesTracker.m b/Sources/Sentry/SentryFramesTracker.m index 1280459462..13e288e489 100644 --- a/Sources/Sentry/SentryFramesTracker.m +++ b/Sources/Sentry/SentryFramesTracker.m @@ -33,7 +33,7 @@ @interface SentryFramesTracker () @property (nonatomic, assign, readonly) BOOL isStarted; @property (nonatomic, strong, readonly) SentryDisplayLinkWrapper *displayLinkWrapper; -@property (nonatomic, strong, readonly) SentryCurrentDateProvider *dateProvider; +@property (nonatomic, strong, readonly) id dateProvider; @property (nonatomic, strong, readonly) SentryDispatchQueueWrapper *dispatchQueueWrapper; @property (nonatomic, strong) SentryNSNotificationCenterWrapper *notificationCenter; @property (nonatomic, assign) CFTimeInterval previousFrameTimestamp; @@ -65,7 +65,7 @@ @implementation SentryFramesTracker { } - (instancetype)initWithDisplayLinkWrapper:(SentryDisplayLinkWrapper *)displayLinkWrapper - dateProvider:(SentryCurrentDateProvider *)dateProvider + dateProvider:(id)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper notificationCenter:(SentryNSNotificationCenterWrapper *)notificationCenter keepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration diff --git a/Sources/Sentry/SentryRateLimitParser.m b/Sources/Sentry/SentryRateLimitParser.m index fabff4c116..22368905a9 100644 --- a/Sources/Sentry/SentryRateLimitParser.m +++ b/Sources/Sentry/SentryRateLimitParser.m @@ -8,13 +8,13 @@ @interface SentryRateLimitParser () -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @end @implementation SentryRateLimitParser -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.currentDateProvider = currentDateProvider; diff --git a/Sources/Sentry/SentryRetryAfterHeaderParser.m b/Sources/Sentry/SentryRetryAfterHeaderParser.m index d41e9aab04..352cb52a5d 100644 --- a/Sources/Sentry/SentryRetryAfterHeaderParser.m +++ b/Sources/Sentry/SentryRetryAfterHeaderParser.m @@ -8,14 +8,14 @@ @interface SentryRetryAfterHeaderParser () @property (nonatomic, strong) SentryHttpDateParser *httpDateParser; -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @end @implementation SentryRetryAfterHeaderParser - (instancetype)initWithHttpDateParser:(SentryHttpDateParser *)httpDateParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider + currentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.httpDateParser = httpDateParser; diff --git a/Sources/Sentry/SentryTransportFactory.m b/Sources/Sentry/SentryTransportFactory.m index e68caf3101..65dddc900d 100644 --- a/Sources/Sentry/SentryTransportFactory.m +++ b/Sources/Sentry/SentryTransportFactory.m @@ -25,7 +25,7 @@ @implementation SentryTransportFactory + (NSArray> *)initTransports:(SentryOptions *)options sentryFileManager:(SentryFileManager *)sentryFileManager - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider + currentDateProvider:(id)currentDateProvider { NSURLSession *session; diff --git a/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h b/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h index 2a2cf867c4..a506cc707a 100644 --- a/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h +++ b/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h @@ -5,7 +5,6 @@ @class SentryBinaryImageCache; @class SentryCrash; @class SentryCrashWrapper; -@class SentryCurrentDateProvider; @class SentryDebugImageProvider; @class SentryDispatchFactory; @class SentryDispatchQueueWrapper; @@ -20,6 +19,7 @@ @class SentryThreadWrapper; @class SentryThreadInspector; @protocol SentryRandom; +@protocol SentryCurrentDateProvider; #if SENTRY_HAS_METRIC_KIT @class SentryMXManager; @@ -66,7 +66,7 @@ SENTRY_NO_INIT @property (nonatomic, strong) SentrySystemWrapper *systemWrapper; @property (nonatomic, strong) SentryDispatchFactory *dispatchFactory; @property (nonatomic, strong) SentryNSTimerFactory *timerFactory; -@property (nonatomic, strong) SentryCurrentDateProvider *dateProvider; +@property (nonatomic, strong) id dateProvider; @property (nonatomic, strong) SentryBinaryImageCache *binaryImageCache; @property (nonatomic, strong) SentryExtraContextProvider *extraContextProvider; @property (nonatomic, strong) SentrySysctl *sysctlWrapper; diff --git a/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h b/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h index 46c46e87da..7cf02e5dca 100644 --- a/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h +++ b/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h @@ -5,7 +5,7 @@ # import "SentryProfilingConditionals.h" @class SentryDisplayLinkWrapper; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; @class SentryDispatchQueueWrapper; @class SentryNSNotificationCenterWrapper; @class SentryScreenFrames; @@ -33,7 +33,7 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryFramesTracker : NSObject - (instancetype)initWithDisplayLinkWrapper:(SentryDisplayLinkWrapper *)displayLinkWrapper - dateProvider:(SentryCurrentDateProvider *)dateProvider + dateProvider:(id)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper notificationCenter:(SentryNSNotificationCenterWrapper *)notificationCenter keepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration; diff --git a/Sources/Sentry/include/SentryDateUtil.h b/Sources/Sentry/include/SentryDateUtil.h index 333e20eb20..75030b7bbc 100644 --- a/Sources/Sentry/include/SentryDateUtil.h +++ b/Sources/Sentry/include/SentryDateUtil.h @@ -2,12 +2,12 @@ NS_ASSUME_NONNULL_BEGIN -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; @interface SentryDateUtil : NSObject SENTRY_NO_INIT -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider; - (BOOL)isInFuture:(NSDate *_Nullable)date; diff --git a/Sources/Sentry/include/SentryDefaultRateLimits.h b/Sources/Sentry/include/SentryDefaultRateLimits.h index b7552a5f91..e37aa37b04 100644 --- a/Sources/Sentry/include/SentryDefaultRateLimits.h +++ b/Sources/Sentry/include/SentryDefaultRateLimits.h @@ -3,7 +3,7 @@ @class SentryRetryAfterHeaderParser; @class SentryRateLimitParser; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -19,7 +19,7 @@ NS_SWIFT_NAME(DefaultRateLimits) - (instancetype)initWithRetryAfterHeaderParser: (SentryRetryAfterHeaderParser *)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser *)rateLimitParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; + currentDateProvider:(id)currentDateProvider; @end diff --git a/Sources/Sentry/include/SentryDelayedFramesTracker.h b/Sources/Sentry/include/SentryDelayedFramesTracker.h index d936a259e4..efd9f7b5a7 100644 --- a/Sources/Sentry/include/SentryDelayedFramesTracker.h +++ b/Sources/Sentry/include/SentryDelayedFramesTracker.h @@ -2,7 +2,7 @@ #if SENTRY_HAS_UIKIT -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; @class SentryFramesDelayResult; NS_ASSUME_NONNULL_BEGIN @@ -19,7 +19,7 @@ SENTRY_NO_INIT * @param dateProvider The instance of a date provider. */ - (instancetype)initWithKeepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration - dateProvider:(SentryCurrentDateProvider *)dateProvider; + dateProvider:(id)dateProvider; - (void)resetDelayedFramesTimeStamps; diff --git a/Sources/Sentry/include/SentryRateLimitParser.h b/Sources/Sentry/include/SentryRateLimitParser.h index ca6befa210..214ff155c9 100644 --- a/Sources/Sentry/include/SentryRateLimitParser.h +++ b/Sources/Sentry/include/SentryRateLimitParser.h @@ -1,6 +1,6 @@ #import "SentryDefines.h" -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -16,7 +16,7 @@ NS_SWIFT_NAME(RateLimitParser) @interface SentryRateLimitParser : NSObject SENTRY_NO_INIT -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider; - (NSDictionary *)parse:(NSString *)header; diff --git a/Sources/Sentry/include/SentryRetryAfterHeaderParser.h b/Sources/Sentry/include/SentryRetryAfterHeaderParser.h index 9d21aa4f5a..ca04fc12f5 100644 --- a/Sources/Sentry/include/SentryRetryAfterHeaderParser.h +++ b/Sources/Sentry/include/SentryRetryAfterHeaderParser.h @@ -1,7 +1,7 @@ #import @class SentryHttpDateParser; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -13,7 +13,7 @@ NS_SWIFT_NAME(RetryAfterHeaderParser) @interface SentryRetryAfterHeaderParser : NSObject - (instancetype)initWithHttpDateParser:(SentryHttpDateParser *)httpDateParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; + currentDateProvider:(id)currentDateProvider; /** Parses the HTTP header into a NSDate. diff --git a/Sources/Sentry/include/SentryTransportFactory.h b/Sources/Sentry/include/SentryTransportFactory.h index 4a6d9ecc28..da079af079 100644 --- a/Sources/Sentry/include/SentryTransportFactory.h +++ b/Sources/Sentry/include/SentryTransportFactory.h @@ -3,7 +3,7 @@ #import "SentryTransport.h" @class SentryOptions, SentryFileManager; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -12,7 +12,7 @@ NS_SWIFT_NAME(TransportInitializer) + (NSArray> *)initTransports:(SentryOptions *)options sentryFileManager:(SentryFileManager *)sentryFileManager - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; + currentDateProvider:(id)currentDateProvider; @end diff --git a/Sources/Swift/Helper/SentryCurrentDateProvider.swift b/Sources/Swift/Helper/SentryCurrentDateProvider.swift index c5a7c82e6d..e4bda4d5b5 100644 --- a/Sources/Swift/Helper/SentryCurrentDateProvider.swift +++ b/Sources/Swift/Helper/SentryCurrentDateProvider.swift @@ -1,37 +1,24 @@ @_implementationOnly import _SentryPrivate import Foundation -#if TEST -@objcMembers -public class SentryCurrentDateProvider: NSObject { - public func date() -> Date { - return Date() - } - - public func timezoneOffset() -> Int { - return TimeZone.current.secondsFromGMT() - } - - public func systemTime() -> UInt64 { - getAbsoluteTime() - } - - public func systemUptime() -> TimeInterval { - ProcessInfo.processInfo.systemUptime - } +@objc +protocol SentryCurrentDateProvider: NSObjectProtocol { + func date() -> Date + func timezoneOffset() -> Int + func systemTime() -> UInt64 + func systemUptime() -> TimeInterval } -#else + @objcMembers -class SentryCurrentDateProvider: NSObject { - +class SentryDefaultCurrentDateProvider: NSObject, SentryCurrentDateProvider { func date() -> Date { return Date() } - + func timezoneOffset() -> Int { return TimeZone.current.secondsFromGMT() } - + func systemTime() -> UInt64 { getAbsoluteTime() } @@ -40,4 +27,3 @@ class SentryCurrentDateProvider: NSObject { ProcessInfo.processInfo.systemUptime } } -#endif diff --git a/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift b/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift index 19243b9371..726b9e92ad 100644 --- a/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift +++ b/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift @@ -65,13 +65,13 @@ class SentryOnDemandReplay: NSObject, SentryReplayVideoMaker { convenience init(outputPath: String) { self.init(outputPath: outputPath, workingQueue: SentryDispatchQueueWrapper(name: "io.sentry.onDemandReplay", attributes: nil), - dateProvider: SentryCurrentDateProvider()) + dateProvider: SentryDefaultCurrentDateProvider()) } convenience init(withContentFrom outputPath: String) { self.init(withContentFrom: outputPath, workingQueue: SentryDispatchQueueWrapper(name: "io.sentry.onDemandReplay", attributes: nil), - dateProvider: SentryCurrentDateProvider()) + dateProvider: SentryDefaultCurrentDateProvider()) } func addFrameAsync(image: UIImage, forScreen: String?) {