Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
333 changes: 162 additions & 171 deletions ios/PublicApi/Measure.swiftinterface

Large diffs are not rendered by default.

67 changes: 36 additions & 31 deletions ios/Sources/MeasureSDK/Swift/Config/ConfigLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,20 @@ struct BaseConfigLoader: ConfigLoader {
private let decoder: JSONDecoder
private let encoder: JSONEncoder
private let logger: Logger
private let measureDispatchQueue: MeasureDispatchQueue

init(userDefaultStorage: UserDefaultStorage,
fileManager: SystemFileManager,
networkClient: NetworkClient,
timeProvider: TimeProvider,
logger: Logger) {
logger: Logger,
measureDispatchQueue: MeasureDispatchQueue) {
self.userDefaultStorage = userDefaultStorage
self.fileManager = fileManager
self.networkClient = networkClient
self.timeProvider = timeProvider
self.logger = logger
self.measureDispatchQueue = measureDispatchQueue

let decoder = JSONDecoder()
self.decoder = decoder
Expand Down Expand Up @@ -99,47 +102,49 @@ struct BaseConfigLoader: ConfigLoader {
return
}

let response = networkClient.getConfig(eTag: userDefaultStorage.getConfigEtag())
measureDispatchQueue.submit {
let response = networkClient.getConfig(eTag: userDefaultStorage.getConfigEtag())

switch response {
switch response {

case .success(let config, let eTag, let cacheControl):
case .success(let config, let eTag, let cacheControl):

saveConfigToDisk(config)
saveConfigToDisk(config)

userDefaultStorage.setConfigFetchTimestamp(now)
userDefaultStorage.setConfigCacheControl(Number(cacheControl))
userDefaultStorage.setConfigFetchTimestamp(now)
userDefaultStorage.setConfigCacheControl(Number(cacheControl))

if let eTag {
userDefaultStorage.setConfigEtag(eTag)
}
if let eTag {
userDefaultStorage.setConfigEtag(eTag)
}

logger.internalLog(
level: .debug,
message: "ConfigLoader: New config loaded from server successfully",
error: nil,
data: nil
)
logger.internalLog(
level: .debug,
message: "ConfigLoader: New config loaded from server successfully",
error: nil,
data: nil
)

case .notModified:
case .notModified:

userDefaultStorage.setConfigFetchTimestamp(now)
userDefaultStorage.setConfigFetchTimestamp(now)

logger.internalLog(
level: .debug,
message: "ConfigLoader: 304 Not Modified",
error: nil,
data: nil
)
logger.internalLog(
level: .debug,
message: "ConfigLoader: 304 Not Modified",
error: nil,
data: nil
)

case .error:
case .error:

logger.internalLog(
level: .error,
message: "ConfigLoader: Failed to load config from server",
error: nil,
data: nil
)
logger.internalLog(
level: .error,
message: "ConfigLoader: Failed to load config from server",
error: nil,
data: nil
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,7 @@ extension URLSessionTask {
objc_setAssociatedObject(self, &isHandlingStateKey, false, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}

DispatchQueue.global(qos: .utility).async {
URLSessionTaskInterceptor.shared.urlSessionTask(self, setState: state)
}
URLSessionTaskInterceptor.shared.urlSessionTask(self, setState: state)

self.setStateSwizzled(state: state)
}
Expand Down
5 changes: 3 additions & 2 deletions ios/Sources/MeasureSDK/Swift/MeasureInitializer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -227,11 +227,13 @@ final class BaseMeasureInitializer: MeasureInitializer {
eventSerializer: EventSerializer(),
systemFileManager: systemFileManager)
self.timeProvider = BaseTimeProvider()
self.measureDispatchQueue = BaseMeasureDispatchQueue()
self.configLoader = BaseConfigLoader(userDefaultStorage: userDefaultStorage,
fileManager: systemFileManager,
networkClient: networkClient,
timeProvider: timeProvider,
logger: logger)
logger: logger,
measureDispatchQueue: measureDispatchQueue)
self.idProvider = UUIDProvider()
self.coreDataManager = BaseCoreDataManager(logger: logger)
self.sessionStore = BaseSessionStore(coreDataManager: coreDataManager,
Expand Down Expand Up @@ -266,7 +268,6 @@ final class BaseMeasureInitializer: MeasureInitializer {
self.deviceAttributeProcessor = DeviceAttributeProcessor()
self.installationIdAttributeProcessor = InstallationIdAttributeProcessor(userDefaultStorage: userDefaultStorage,
idProvider: idProvider)
self.measureDispatchQueue = BaseMeasureDispatchQueue()
self.networkStateAttributeProcessor = NetworkStateAttributeProcessor(measureDispatchQueue: measureDispatchQueue)
self.userAttributeProcessor = UserAttributeProcessor(userDefaultStorage: userDefaultStorage,
measureDispatchQueue: measureDispatchQueue)
Expand Down
6 changes: 5 additions & 1 deletion ios/Tests/MeasureSDKTests/Config/ConfigLoaderTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ final class ConfigLoaderTests: XCTestCase {
private var mockFileManager: MockSystemFileManager!
private var mockTimeProvider: MockTimeProvider!
private var configLoader: ConfigLoader!
private var measureDispatchQueue: MockMeasureDispatchQueue!

override func setUp() {
super.setUp()
Expand All @@ -22,13 +23,15 @@ final class ConfigLoaderTests: XCTestCase {
mockUserDefaults = MockUserDefaultStorage()
mockFileManager = MockSystemFileManager()
mockTimeProvider = MockTimeProvider()
measureDispatchQueue = MockMeasureDispatchQueue()

configLoader = BaseConfigLoader(
userDefaultStorage: mockUserDefaults,
fileManager: mockFileManager,
networkClient: mockNetworkClient,
timeProvider: mockTimeProvider,
logger: MockLogger()
logger: MockLogger(),
measureDispatchQueue: measureDispatchQueue
)
}

Expand All @@ -38,6 +41,7 @@ final class ConfigLoaderTests: XCTestCase {
mockUserDefaults = nil
mockFileManager = nil
mockTimeProvider = nil
measureDispatchQueue = nil
super.tearDown()
}

Expand Down
11 changes: 6 additions & 5 deletions ios/Tests/MeasureSDKTests/Mocks/MockMeasureInitializer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -149,11 +149,13 @@ final class MockMeasureInitializer: MeasureInitializer {
eventSerializer: EventSerializer(),
systemFileManager: self.systemFileManager)
self.timeProvider = timeProvider ?? BaseTimeProvider()
self.measureDispatchQueue = measureDispatchQueue ?? BaseMeasureDispatchQueue()
self.configLoader = configLoader ?? BaseConfigLoader(userDefaultStorage: self.userDefaultStorage,
fileManager: self.systemFileManager,
networkClient: self.networkClient,
timeProvider: self.timeProvider,
logger: self.logger)
fileManager: self.systemFileManager,
networkClient: self.networkClient,
timeProvider: self.timeProvider,
logger: self.logger,
measureDispatchQueue: self.measureDispatchQueue)
self.idProvider = idProvider ?? UUIDProvider()
self.coreDataManager = coreDataManager ?? BaseCoreDataManager(logger: self.logger)
self.sessionStore = sessionStore ?? MockSessionStore()
Expand All @@ -179,7 +181,6 @@ final class MockMeasureInitializer: MeasureInitializer {
versionCode: FrameworkInfo.version,
signalSampler: self.signalSampler)
self.exporter = exporter ?? MockExporter()
self.measureDispatchQueue = measureDispatchQueue ?? BaseMeasureDispatchQueue()
self.appAttributeProcessor = appAttributeProcessor ?? AppAttributeProcessor()
self.deviceAttributeProcessor = deviceAttributeProcessor ?? DeviceAttributeProcessor()
self.installationIdAttributeProcessor = installationIdAttributeProcessor ?? InstallationIdAttributeProcessor(userDefaultStorage: self.userDefaultStorage,
Expand Down
Loading