Skip to content

Commit ee415e7

Browse files
committed
split out container, fix warnings
1 parent 2211547 commit ee415e7

15 files changed

+183
-175
lines changed

swift-sdk.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
55DD207F26A0D83800773CC7 /* IterableAuthManagerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55DD207E26A0D83800773CC7 /* IterableAuthManagerProtocol.swift */; };
162162
55E02D39253F8D86009DB8BC /* WebViewProtocolTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E02D38253F8D86009DB8BC /* WebViewProtocolTests.swift */; };
163163
55E6F462238E066400808BCE /* DeepLinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E6F45E238E066400808BCE /* DeepLinkTests.swift */; };
164+
55E9BE3429F9F5E6000C9FF2 /* DependencyContainerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E9BE3329F9F5E6000C9FF2 /* DependencyContainerProtocol.swift */; };
164165
5B49BB3E27CFB71500E6F00C /* PopupInboxSessionUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B49BB3D27CFB71500E6F00C /* PopupInboxSessionUITests.swift */; };
165166
5B5AA711284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
166167
5B5AA712284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
@@ -561,6 +562,7 @@
561562
55DD207E26A0D83800773CC7 /* IterableAuthManagerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IterableAuthManagerProtocol.swift; sourceTree = "<group>"; };
562563
55E02D38253F8D86009DB8BC /* WebViewProtocolTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewProtocolTests.swift; sourceTree = "<group>"; };
563564
55E6F45E238E066400808BCE /* DeepLinkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkTests.swift; sourceTree = "<group>"; };
565+
55E9BE3329F9F5E6000C9FF2 /* DependencyContainerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DependencyContainerProtocol.swift; sourceTree = "<group>"; };
564566
5B49BB3D27CFB71500E6F00C /* PopupInboxSessionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopupInboxSessionUITests.swift; sourceTree = "<group>"; };
565567
5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockNetworkSession.swift; sourceTree = "<group>"; };
566568
5B6C3C1027CE871F00B9A753 /* NavInboxSessionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavInboxSessionUITests.swift; sourceTree = "<group>"; };
@@ -1227,6 +1229,7 @@
12271229
isa = PBXGroup;
12281230
children = (
12291231
AC7A5260227BB9D10064D67E /* DependencyContainer.swift */,
1232+
55E9BE3329F9F5E6000C9FF2 /* DependencyContainerProtocol.swift */,
12301233
);
12311234
name = Initialization;
12321235
sourceTree = "<group>";
@@ -1978,6 +1981,7 @@
19781981
ACC362B624D16D91002C67BA /* IterableRequest.swift in Sources */,
19791982
ACB1DFDB26369D2F00A31597 /* HealthMonitor.swift in Sources */,
19801983
5B88BC482805D09D004016E5 /* NetworkSession.swift in Sources */,
1984+
55E9BE3429F9F5E6000C9FF2 /* DependencyContainerProtocol.swift in Sources */,
19811985
AC06E4D327948C32007A6F20 /* InboxState.swift in Sources */,
19821986
ACC362BD24D21172002C67BA /* IterableAPICallTaskProcessor.swift in Sources */,
19831987
AC84510922910A0C0052BB8F /* RequestCreator.swift in Sources */,

swift-sdk/Internal/DependencyContainer.swift

Lines changed: 0 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -3,130 +3,6 @@
33
//
44

55
import Foundation
6-
import UIKit
7-
8-
protocol DependencyContainerProtocol: RedirectNetworkSessionProvider {
9-
var dateProvider: DateProviderProtocol { get }
10-
var networkSession: NetworkSessionProtocol { get }
11-
var notificationStateProvider: NotificationStateProviderProtocol { get }
12-
var localStorage: LocalStorageProtocol { get }
13-
var inAppDisplayer: InAppDisplayerProtocol { get }
14-
var inAppPersister: InAppPersistenceProtocol { get }
15-
var urlOpener: UrlOpenerProtocol { get }
16-
var applicationStateProvider: ApplicationStateProviderProtocol { get }
17-
var notificationCenter: NotificationCenterProtocol { get }
18-
var apnsTypeChecker: APNSTypeCheckerProtocol { get }
19-
20-
func createInAppFetcher(apiClient: ApiClientProtocol) -> InAppFetcherProtocol
21-
func createPersistenceContextProvider() -> IterablePersistenceContextProvider?
22-
func createRequestHandler(apiKey: String,
23-
config: IterableConfig,
24-
endpoint: String,
25-
authProvider: AuthProvider?,
26-
authManager: IterableAuthManagerProtocol,
27-
deviceMetadata: DeviceMetadata,
28-
offlineMode: Bool) -> RequestHandlerProtocol
29-
func createHealthMonitorDataProvider(persistenceContextProvider: IterablePersistenceContextProvider) -> HealthMonitorDataProviderProtocol
30-
}
31-
32-
extension DependencyContainerProtocol {
33-
func createInAppManager(config: IterableConfig,
34-
apiClient: ApiClientProtocol,
35-
requestHandler: RequestHandlerProtocol,
36-
deviceMetadata: DeviceMetadata) -> IterableInternalInAppManagerProtocol {
37-
InAppManager(requestHandler: requestHandler,
38-
deviceMetadata: deviceMetadata,
39-
fetcher: createInAppFetcher(apiClient: apiClient),
40-
displayer: inAppDisplayer,
41-
persister: inAppPersister,
42-
inAppDelegate: config.inAppDelegate,
43-
urlDelegate: config.urlDelegate,
44-
customActionDelegate: config.customActionDelegate,
45-
urlOpener: urlOpener,
46-
allowedProtocols: config.allowedProtocols,
47-
applicationStateProvider: applicationStateProvider,
48-
notificationCenter: notificationCenter,
49-
dateProvider: dateProvider,
50-
moveToForegroundSyncInterval: config.inAppDisplayInterval)
51-
}
52-
53-
func createAuthManager(config: IterableConfig) -> IterableAuthManagerProtocol {
54-
AuthManager(delegate: config.authDelegate,
55-
expirationRefreshPeriod: config.expiringAuthTokenRefreshPeriod,
56-
localStorage: localStorage,
57-
dateProvider: dateProvider)
58-
}
59-
60-
func createRequestHandler(apiKey: String,
61-
config: IterableConfig,
62-
endpoint: String,
63-
authProvider: AuthProvider?,
64-
authManager: IterableAuthManagerProtocol,
65-
deviceMetadata: DeviceMetadata,
66-
offlineMode: Bool) -> RequestHandlerProtocol {
67-
let onlineProcessor = OnlineRequestProcessor(apiKey: apiKey,
68-
authProvider: authProvider,
69-
authManager: authManager,
70-
endpoint: endpoint,
71-
networkSession: networkSession,
72-
deviceMetadata: deviceMetadata,
73-
dateProvider: dateProvider)
74-
if let persistenceContextProvider = createPersistenceContextProvider() {
75-
let healthMonitorDataProvider = createHealthMonitorDataProvider(persistenceContextProvider: persistenceContextProvider)
76-
let healthMonitor = HealthMonitor(dataProvider: healthMonitorDataProvider,
77-
dateProvider: dateProvider,
78-
networkSession: networkSession)
79-
let offlineProcessor = OfflineRequestProcessor(apiKey: apiKey,
80-
authProvider: authProvider,
81-
authManager: authManager,
82-
endpoint: endpoint,
83-
deviceMetadata: deviceMetadata,
84-
taskScheduler: createTaskScheduler(persistenceContextProvider: persistenceContextProvider,
85-
healthMonitor: healthMonitor),
86-
taskRunner: createTaskRunner(persistenceContextProvider: persistenceContextProvider,
87-
healthMonitor: healthMonitor),
88-
notificationCenter: notificationCenter)
89-
return RequestHandler(onlineProcessor: onlineProcessor,
90-
offlineProcessor: offlineProcessor,
91-
healthMonitor: healthMonitor,
92-
offlineMode: offlineMode)
93-
} else {
94-
return RequestHandler(onlineProcessor: onlineProcessor,
95-
offlineProcessor: nil,
96-
healthMonitor: nil,
97-
offlineMode: offlineMode)
98-
}
99-
}
100-
101-
func createHealthMonitorDataProvider(persistenceContextProvider: IterablePersistenceContextProvider) -> HealthMonitorDataProviderProtocol {
102-
HealthMonitorDataProvider(maxTasks: 1000, persistenceContextProvider: persistenceContextProvider)
103-
}
104-
105-
func createPersistenceContextProvider() -> IterablePersistenceContextProvider? {
106-
CoreDataPersistenceContextProvider(dateProvider: dateProvider)
107-
}
108-
109-
func createRedirectNetworkSession(delegate: RedirectNetworkSessionDelegate) -> NetworkSessionProtocol {
110-
RedirectNetworkSession(delegate: delegate)
111-
}
112-
113-
private func createTaskScheduler(persistenceContextProvider: IterablePersistenceContextProvider,
114-
healthMonitor: HealthMonitor) -> IterableTaskScheduler {
115-
IterableTaskScheduler(persistenceContextProvider: persistenceContextProvider,
116-
notificationCenter: notificationCenter,
117-
healthMonitor: healthMonitor,
118-
dateProvider: dateProvider)
119-
}
120-
121-
private func createTaskRunner(persistenceContextProvider: IterablePersistenceContextProvider,
122-
healthMonitor: HealthMonitor) -> IterableTaskRunner {
123-
IterableTaskRunner(networkSession: networkSession,
124-
persistenceContextProvider: persistenceContextProvider,
125-
healthMonitor: healthMonitor,
126-
notificationCenter: notificationCenter,
127-
connectivityManager: NetworkConnectivityManager())
128-
}
129-
}
1306

1317
struct DependencyContainer: DependencyContainerProtocol {
1328
func createInAppFetcher(apiClient: ApiClientProtocol) -> InAppFetcherProtocol {
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
//
2+
// Copyright © 2023 Iterable. All rights reserved.
3+
//
4+
5+
import Foundation
6+
7+
protocol DependencyContainerProtocol: RedirectNetworkSessionProvider {
8+
var dateProvider: DateProviderProtocol { get }
9+
var networkSession: NetworkSessionProtocol { get }
10+
var notificationStateProvider: NotificationStateProviderProtocol { get }
11+
var localStorage: LocalStorageProtocol { get }
12+
var inAppDisplayer: InAppDisplayerProtocol { get }
13+
var inAppPersister: InAppPersistenceProtocol { get }
14+
var urlOpener: UrlOpenerProtocol { get }
15+
var applicationStateProvider: ApplicationStateProviderProtocol { get }
16+
var notificationCenter: NotificationCenterProtocol { get }
17+
var apnsTypeChecker: APNSTypeCheckerProtocol { get }
18+
19+
func createInAppFetcher(apiClient: ApiClientProtocol) -> InAppFetcherProtocol
20+
func createPersistenceContextProvider() -> IterablePersistenceContextProvider?
21+
func createRequestHandler(apiKey: String,
22+
config: IterableConfig,
23+
endpoint: String,
24+
authProvider: AuthProvider?,
25+
authManager: IterableAuthManagerProtocol,
26+
deviceMetadata: DeviceMetadata,
27+
offlineMode: Bool) -> RequestHandlerProtocol
28+
func createHealthMonitorDataProvider(persistenceContextProvider: IterablePersistenceContextProvider) -> HealthMonitorDataProviderProtocol
29+
}
30+
31+
extension DependencyContainerProtocol {
32+
func createInAppManager(config: IterableConfig,
33+
apiClient: ApiClientProtocol,
34+
requestHandler: RequestHandlerProtocol,
35+
deviceMetadata: DeviceMetadata) -> IterableInternalInAppManagerProtocol {
36+
InAppManager(requestHandler: requestHandler,
37+
deviceMetadata: deviceMetadata,
38+
fetcher: createInAppFetcher(apiClient: apiClient),
39+
displayer: inAppDisplayer,
40+
persister: inAppPersister,
41+
inAppDelegate: config.inAppDelegate,
42+
urlDelegate: config.urlDelegate,
43+
customActionDelegate: config.customActionDelegate,
44+
urlOpener: urlOpener,
45+
allowedProtocols: config.allowedProtocols,
46+
applicationStateProvider: applicationStateProvider,
47+
notificationCenter: notificationCenter,
48+
dateProvider: dateProvider,
49+
moveToForegroundSyncInterval: config.inAppDisplayInterval)
50+
}
51+
52+
func createAuthManager(config: IterableConfig) -> IterableAuthManagerProtocol {
53+
AuthManager(delegate: config.authDelegate,
54+
expirationRefreshPeriod: config.expiringAuthTokenRefreshPeriod,
55+
localStorage: localStorage,
56+
dateProvider: dateProvider)
57+
}
58+
59+
func createRequestHandler(apiKey: String,
60+
config: IterableConfig,
61+
endpoint: String,
62+
authProvider: AuthProvider?,
63+
authManager: IterableAuthManagerProtocol,
64+
deviceMetadata: DeviceMetadata,
65+
offlineMode: Bool) -> RequestHandlerProtocol {
66+
let onlineProcessor = OnlineRequestProcessor(apiKey: apiKey,
67+
authProvider: authProvider,
68+
authManager: authManager,
69+
endpoint: endpoint,
70+
networkSession: networkSession,
71+
deviceMetadata: deviceMetadata,
72+
dateProvider: dateProvider)
73+
if let persistenceContextProvider = createPersistenceContextProvider() {
74+
let healthMonitorDataProvider = createHealthMonitorDataProvider(persistenceContextProvider: persistenceContextProvider)
75+
let healthMonitor = HealthMonitor(dataProvider: healthMonitorDataProvider,
76+
dateProvider: dateProvider,
77+
networkSession: networkSession)
78+
let offlineProcessor = OfflineRequestProcessor(apiKey: apiKey,
79+
authProvider: authProvider,
80+
authManager: authManager,
81+
endpoint: endpoint,
82+
deviceMetadata: deviceMetadata,
83+
taskScheduler: createTaskScheduler(persistenceContextProvider: persistenceContextProvider,
84+
healthMonitor: healthMonitor),
85+
taskRunner: createTaskRunner(persistenceContextProvider: persistenceContextProvider,
86+
healthMonitor: healthMonitor),
87+
notificationCenter: notificationCenter)
88+
return RequestHandler(onlineProcessor: onlineProcessor,
89+
offlineProcessor: offlineProcessor,
90+
healthMonitor: healthMonitor,
91+
offlineMode: offlineMode)
92+
} else {
93+
return RequestHandler(onlineProcessor: onlineProcessor,
94+
offlineProcessor: nil,
95+
healthMonitor: nil,
96+
offlineMode: offlineMode)
97+
}
98+
}
99+
100+
func createHealthMonitorDataProvider(persistenceContextProvider: IterablePersistenceContextProvider) -> HealthMonitorDataProviderProtocol {
101+
HealthMonitorDataProvider(maxTasks: 1000, persistenceContextProvider: persistenceContextProvider)
102+
}
103+
104+
func createPersistenceContextProvider() -> IterablePersistenceContextProvider? {
105+
CoreDataPersistenceContextProvider(dateProvider: dateProvider)
106+
}
107+
108+
func createRedirectNetworkSession(delegate: RedirectNetworkSessionDelegate) -> NetworkSessionProtocol {
109+
RedirectNetworkSession(delegate: delegate)
110+
}
111+
112+
private func createTaskScheduler(persistenceContextProvider: IterablePersistenceContextProvider,
113+
healthMonitor: HealthMonitor) -> IterableTaskScheduler {
114+
IterableTaskScheduler(persistenceContextProvider: persistenceContextProvider,
115+
notificationCenter: notificationCenter,
116+
healthMonitor: healthMonitor,
117+
dateProvider: dateProvider)
118+
}
119+
120+
private func createTaskRunner(persistenceContextProvider: IterablePersistenceContextProvider,
121+
healthMonitor: HealthMonitor) -> IterableTaskRunner {
122+
IterableTaskRunner(networkSession: networkSession,
123+
persistenceContextProvider: persistenceContextProvider,
124+
healthMonitor: healthMonitor,
125+
notificationCenter: notificationCenter,
126+
connectivityManager: NetworkConnectivityManager())
127+
}
128+
}

0 commit comments

Comments
 (0)