Skip to content

Commit b0e43a7

Browse files
authored
Cleanup next (#3331)
* Fix SPM * Cleanup docs * Cleanup module loading * Fix deprecation warnings * More deprecation fixes
1 parent 2745929 commit b0e43a7

File tree

25 files changed

+151
-235
lines changed

25 files changed

+151
-235
lines changed

Accessibility Sample/Accessibility Sample/AppDelegate.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate,
3232

3333
Airship.deepLinkDelegate = self
3434

35-
MessageCenter.shared.displayDelegate = self
36-
PreferenceCenter.shared.openDelegate = self
35+
Airship.messageCenter.displayDelegate = self
36+
Airship.preferenceCenter.openDelegate = self
3737

3838
NotificationCenter.default.addObserver(
3939
forName: AppStateTracker.didBecomeActiveNotification,
@@ -51,7 +51,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate,
5151

5252
func displayMessageCenter(messageID: String) {
5353
AppState.shared.selectedTab = .messageCenter
54-
MessageCenter.shared.controller.navigate(messageID: messageID)
54+
Airship.messageCenter.controller.navigate(messageID: messageID)
5555
}
5656

5757
func displayMessageCenter() {

Accessibility Sample/Accessibility Sample/AppState.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ class AppState: ObservableObject {
2626

2727
init() {
2828
if Airship.isFlying {
29-
MessageCenter.shared.inbox.unreadCountPublisher
29+
Airship.messageCenter.inbox.unreadCountPublisher
3030
.receive(on: RunLoop.main)
3131
.sink { unreadCount in
3232
self.unreadCount = unreadCount
3333
}
3434
.store(in: &self.subscriptions)
3535

36-
MessageCenter.shared.controller.statePublisher
36+
Airship.messageCenter.controller.statePublisher
3737
.receive(on: RunLoop.main)
3838
.sink { status in
3939
self.status = status

Accessibility Sample/Accessibility Sample/AppView.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct AppView: View {
2727
@ViewBuilder
2828
private var messageCenterTab: some View {
2929
MessageCenterView(
30-
controller: MessageCenter.shared.controller
30+
controller: Airship.messageCenter.controller
3131
)
3232
.tabItem {
3333
Label(

Airship Sample/Airship Sample/AppDelegate.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, DeepLinkDelegate,
3030
Airship.push.defaultPresentationOptions = [.sound, .banner, .list]
3131

3232
Airship.deepLinkDelegate = self
33-
MessageCenter.shared.displayDelegate = self
34-
PreferenceCenter.shared.openDelegate = self
33+
Airship.messageCenter.displayDelegate = self
34+
Airship.preferenceCenter.openDelegate = self
3535

3636
NotificationCenter.default.addObserver(
3737
forName: AppStateTracker.didBecomeActiveNotification,

Airship Sample/Airship Sample/AppState.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ class AppState: ObservableObject {
3030

3131
init() {
3232
if Airship.isFlying {
33-
MessageCenter.shared.inbox.unreadCountPublisher
33+
Airship.messageCenter.inbox.unreadCountPublisher
3434
.receive(on: RunLoop.main)
3535
.sink { unreadCount in
3636
self.unreadCount = unreadCount
3737
}
3838
.store(in: &self.subscriptions)
3939

40-
MessageCenter.shared.controller = messageCenterController
41-
MessageCenter.shared.controller.statePublisher
40+
Airship.messageCenter.controller = messageCenterController
41+
Airship.messageCenter.controller.statePublisher
4242
.receive(on: RunLoop.main)
4343
.sink { status in
4444
self.status = status

Airship/AirshipAutomation/Source/Actions/CancelSchedulesAction.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public final class CancelSchedulesAction: AirshipAction {
3333
}
3434

3535
var automation: InAppAutomation {
36-
return overrideAutomation ?? InAppAutomation.shared
36+
return overrideAutomation ?? Airship.inAppAutomation
3737
}
3838

3939
public func accepts(arguments: ActionArguments) async -> Bool {

Airship/AirshipAutomation/Source/Actions/ScheduleAction.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public final class ScheduleAction: AirshipAction {
3131
}
3232

3333
var automation: InAppAutomation {
34-
return overrideAutomation ?? InAppAutomation.shared
34+
return overrideAutomation ?? Airship.inAppAutomation
3535
}
3636

3737
public func accepts(arguments: ActionArguments) async -> Bool {

Airship/AirshipAutomation/Source/AutomationSDKModule.swift

+21-34
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,18 @@ public class AutomationSDKModule: NSObject, AirshipSDKModule {
1616
self.components = components
1717
}
1818

19-
public static func load(dependencies: [String : Any]) -> (any AirshipSDKModule)? {
20-
// Dependencies
21-
let dataStore = dependencies[SDKDependencyKeys.dataStore] as! PreferenceDataStore
22-
let privacyManager = dependencies[SDKDependencyKeys.privacyManager] as! AirshipPrivacyManager
23-
let remoteData = dependencies[SDKDependencyKeys.remoteData] as! (any RemoteDataProtocol)
24-
let deferredResolver = dependencies[SDKDependencyKeys.deferredResolver] as! (any AirshipDeferredResolverProtocol)
25-
let config = dependencies[SDKDependencyKeys.config] as! RuntimeConfig
26-
let experiments = dependencies[SDKDependencyKeys.experimentsProvider] as! (any ExperimentDataProvider)
27-
let sceneManager = dependencies[SDKDependencyKeys.sceneManager] as! (any AirshipSceneManagerProtocol)
28-
let messageSceneManager = InAppMessageSceneManager(sceneManger: sceneManager)
29-
let airshipAnalytics = dependencies[SDKDependencyKeys.analytics] as! (any InternalAnalyticsProtocol)
30-
let meteredUsage = dependencies[SDKDependencyKeys.meteredUsage] as! (any AirshipMeteredUsageProtocol)
31-
let cache = dependencies[SDKDependencyKeys.cache] as! (any AirshipCache)
32-
let audienceChecker = dependencies[SDKDependencyKeys.audienceChecker] as! (any DeviceAudienceChecker)
33-
19+
public static func load(_ args: AirshiopModuleLoaderArgs) -> (any AirshipSDKModule)? {
3420
/// Utils
35-
let remoteDataAccess = AutomationRemoteDataAccess(remoteData: remoteData)
21+
let messageSceneManager = InAppMessageSceneManager(sceneManger: AirshipSceneManager.shared)
22+
let remoteDataAccess = AutomationRemoteDataAccess(remoteData: args.remoteData)
3623
let assetManager = AssetCacheManager()
37-
let displayCoordinatorManager = DisplayCoordinatorManager(dataStore: dataStore)
38-
let frequencyLimits = FrequencyLimitManager(config: config)
24+
let displayCoordinatorManager = DisplayCoordinatorManager(dataStore: args.dataStore)
25+
let frequencyLimits = FrequencyLimitManager(config: args.config)
3926
let scheduleConditionsChangedNotifier = ScheduleConditionsChangedNotifier()
40-
let eventRecorder = InAppEventRecorder(airshipAnalytics: airshipAnalytics, meteredUsage: meteredUsage)
41-
let metrics = ApplicationMetrics(dataStore: dataStore, privacyManager: privacyManager)
27+
let eventRecorder = InAppEventRecorder(airshipAnalytics: args.analytics, meteredUsage: args.meteredUsage)
28+
let metrics = ApplicationMetrics(dataStore: args.dataStore, privacyManager: args.privacyManager)
4229

43-
let automationStore = AutomationStore(config: config)
30+
let automationStore = AutomationStore(config: args.config)
4431

4532
let analyticsFactory = InAppMessageAnalyticsFactory(
4633
eventRecorder: eventRecorder,
@@ -58,15 +45,15 @@ public class AutomationSDKModule: NSObject, AirshipSDKModule {
5845
let automationPreparer = AutomationPreparer(
5946
actionPreparer: actionPreparer,
6047
messagePreparer: messagePreparer,
61-
deferredResolver: deferredResolver,
48+
deferredResolver: args.deferredResolver,
6249
frequencyLimits: frequencyLimits,
63-
audienceChecker: audienceChecker,
64-
experiments: experiments,
50+
audienceChecker: args.audienceChecker,
51+
experiments: args.experimentsManager,
6552
remoteDataAccess: remoteDataAccess,
66-
config: config,
53+
config: args.config,
6754
additionalAudienceResolver: AdditionalAudienceCheckerResolver(
68-
config: config,
69-
cache: cache
55+
config: args.config,
56+
cache: args.cache
7057
)
7158
)
7259

@@ -89,7 +76,7 @@ public class AutomationSDKModule: NSObject, AirshipSDKModule {
8976
let feed = AutomationEventFeed(
9077
applicationMetrics: metrics,
9178
applicationStateTracker: AppStateTracker.shared,
92-
analyticsFeed: airshipAnalytics.eventFeed
79+
analyticsFeed: args.analytics.eventFeed
9380
)
9481
feed.attach()
9582

@@ -101,11 +88,11 @@ public class AutomationSDKModule: NSObject, AirshipSDKModule {
10188
scheduleConditionsChangedNotifier: scheduleConditionsChangedNotifier,
10289
eventFeed: feed,
10390
triggersProcessor: AutomationTriggerProcessor(store: automationStore),
104-
delayProcessor: AutomationDelayProcessor(analytics: airshipAnalytics)
91+
delayProcessor: AutomationDelayProcessor(analytics: args.analytics)
10592
)
10693

10794
let remoteDataSubscriber = AutomationRemoteDataSubscriber(
108-
dataStore: dataStore,
95+
dataStore: args.dataStore,
10996
remoteDataAccess: remoteDataAccess,
11097
engine: engine,
11198
frequencyLimitManager: frequencyLimits
@@ -118,7 +105,7 @@ public class AutomationSDKModule: NSObject, AirshipSDKModule {
118105

119106
let legacyInAppMessaging = LegacyInAppMessaging(
120107
analytics: LegacyInAppAnalytics(recorder: eventRecorder),
121-
dataStore: dataStore,
108+
dataStore: args.dataStore,
122109
automationEngine: engine
123110
)
124111

@@ -127,9 +114,9 @@ public class AutomationSDKModule: NSObject, AirshipSDKModule {
127114
inAppMessaging: inAppMessaging,
128115
legacyInAppMessaging: legacyInAppMessaging,
129116
remoteDataSubscriber: remoteDataSubscriber,
130-
dataStore: dataStore,
131-
privacyManager: privacyManager,
132-
config: config
117+
dataStore: args.dataStore,
118+
privacyManager: args.privacyManager,
119+
config: args.config
133120
)
134121

135122
return AutomationSDKModule(

Airship/AirshipCore/Source/AirshipSDKModule.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ public protocol AirshipSDKModule: NSObject {
99
var components: [any AirshipComponent] { get }
1010

1111
@MainActor
12-
static func load(dependencies: [String: Any]) -> (any AirshipSDKModule)?
12+
static func load(_ args: AirshiopModuleLoaderArgs) -> (any AirshipSDKModule)?
1313
}

Airship/AirshipCore/Source/AirshipSceneManager.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
/* Copyright Airship and Contributors */
22

3+
import Foundation
34
#if !os(watchOS)
4-
55
import UIKit
6+
#endif
67

78
/// - Note: for internal use only. :nodoc:
89
public protocol AirshipSceneManagerProtocol: Sendable {
10+
#if !os(watchOS)
911
@MainActor
1012
var lastActiveScene: UIWindowScene { get throws }
13+
#endif
1114
}
1215

1316

@@ -19,6 +22,8 @@ public protocol AirshipSceneManagerProtocol: Sendable {
1922
public final class AirshipSceneManager: AirshipSceneManagerProtocol, @unchecked Sendable {
2023
public static let shared = AirshipSceneManager()
2124

25+
#if !os(watchOS)
26+
2227
private var scenes: [UIWindowScene] = []
2328

2429
private let notificationCenter: AirshipNotificationCenter
@@ -99,7 +104,7 @@ public final class AirshipSceneManager: AirshipSceneManagerProtocol, @unchecked
99104
}
100105
return scene
101106
}
107+
#endif
102108

103109
}
104110

105-
#endif

Airship/AirshipCore/Source/ModuleLoader.swift

+39-48
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,22 @@
33
import Foundation
44

55
/// NOTE: For internal use only. :nodoc:
6-
public struct SDKDependencyKeys {
7-
public static let channel = "channel"
8-
public static let contact = "contact"
9-
public static let push = "push"
10-
public static let remoteData = "remote_data"
11-
public static let config = "config"
12-
public static let dataStore = "dataStore"
13-
public static let analytics = "analytics"
14-
public static let privacyManager = "privacy_manager"
15-
public static let permissionsManager = "permissions_manager"
16-
public static let workManager = "work_manager"
17-
public static let deferredResolver = "deferred_resolver"
18-
public static let cache = "airship_cache"
19-
public static let experimentsProvider = "experiments"
20-
public static let meteredUsage = "metered_usage"
21-
public static let sceneManager = "scene_manager"
22-
public static let audienceChecker = "audience_checker"
6+
public struct AirshiopModuleLoaderArgs {
7+
public let config: RuntimeConfig
8+
public let dataStore: PreferenceDataStore
9+
public let channel: any InternalAirshipChannelProtocol&AirshipChannelProtocol
10+
public let contact: any AirshipContactProtocol
11+
public let push: any AirshipPushProtocol
12+
public let remoteData: any RemoteDataProtocol
13+
public let analytics: any InternalAnalyticsProtocol&AirshipAnalyticsProtocol
14+
public let privacyManager: AirshipPrivacyManager
15+
public let permissionsManager: AirshipPermissionsManager
16+
public let experimentsManager: any ExperimentDataProvider
17+
public let meteredUsage: AirshipMeteredUsage
18+
public let deferredResolver: any AirshipDeferredResolverProtocol
19+
public let cache: any AirshipCache
20+
public let audienceChecker: any DeviceAudienceChecker
21+
public let workManager: any AirshipWorkManagerProtocol
2322

2423
}
2524

@@ -58,39 +57,31 @@ class ModuleLoader {
5857
audienceChecker: any DeviceAudienceChecker
5958
) {
6059

61-
var dependencies: [String: Any] = [
62-
SDKDependencyKeys.config: config,
63-
SDKDependencyKeys.dataStore: dataStore,
64-
SDKDependencyKeys.channel: channel,
65-
SDKDependencyKeys.contact: contact,
66-
SDKDependencyKeys.push: push,
67-
SDKDependencyKeys.remoteData: remoteData,
68-
SDKDependencyKeys.analytics: analytics,
69-
SDKDependencyKeys.privacyManager: privacyManager,
70-
SDKDependencyKeys.permissionsManager: permissionsManager,
71-
SDKDependencyKeys.workManager: AirshipWorkManager.shared,
72-
SDKDependencyKeys.deferredResolver: deferredResolver,
73-
SDKDependencyKeys.cache: cache,
74-
SDKDependencyKeys.experimentsProvider: experimentsManager,
75-
SDKDependencyKeys.meteredUsage: meteredUsage,
76-
SDKDependencyKeys.audienceChecker: audienceChecker
77-
]
78-
79-
#if !os(watchOS)
80-
dependencies[SDKDependencyKeys.sceneManager] = AirshipSceneManager.shared
81-
#endif
82-
83-
let swiftModules = ModuleLoader.loadModules(dependencies)
84-
let swiftComponents = swiftModules.compactMap { $0.components }.reduce([], +)
85-
let swiftActionManifests = swiftModules.compactMap { $0.actionsManifest }
86-
87-
88-
self.components = swiftComponents
89-
self.actionManifests = swiftActionManifests
60+
let args = AirshiopModuleLoaderArgs(
61+
config: config,
62+
dataStore: dataStore,
63+
channel: channel,
64+
contact: contact,
65+
push: push,
66+
remoteData: remoteData,
67+
analytics: analytics,
68+
privacyManager: privacyManager,
69+
permissionsManager: permissionsManager,
70+
experimentsManager: experimentsManager,
71+
meteredUsage: meteredUsage,
72+
deferredResolver: deferredResolver,
73+
cache: cache,
74+
audienceChecker: audienceChecker,
75+
workManager: AirshipWorkManager.shared
76+
)
77+
78+
let modules = ModuleLoader.loadModules(args)
79+
self.components = modules.compactMap { $0.components }.reduce([], +)
80+
self.actionManifests = modules.compactMap { $0.actionsManifest }
9081
}
9182

9283
@MainActor
93-
private class func loadModules(_ dependencies: [String: Any]) -> [any AirshipSDKModule]
84+
private class func loadModules(_ args: AirshiopModuleLoaderArgs) -> [any AirshipSDKModule]
9485
{
9586
let sdkModules: [any AirshipSDKModule] = SDKModuleNames.allCases.compactMap {
9687
guard
@@ -100,7 +91,7 @@ class ModuleLoader {
10091
}
10192

10293
AirshipLogger.debug("Loading module \($0)")
103-
return moduleClass.load(dependencies: dependencies)
94+
return moduleClass.load(args)
10495
}
10596

10697
return sdkModules

Airship/AirshipDebug/Source/DebugSDKModule.swift

+4-8
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,11 @@ public class DebugSDKModule: NSObject, AirshipSDKModule {
1515

1616
public let components: [any AirshipComponent]
1717

18-
public static func load(dependencies: [String : Any]) -> (any AirshipSDKModule)? {
19-
let analytics = dependencies[SDKDependencyKeys.analytics] as! (any AirshipAnalyticsProtocol)
20-
let remoteData = dependencies[SDKDependencyKeys.remoteData] as! (any RemoteDataProtocol)
21-
let config = dependencies[SDKDependencyKeys.config] as! RuntimeConfig
22-
18+
public static func load(_ args: AirshiopModuleLoaderArgs) -> (any AirshipSDKModule)? {
2319
let debugManager = AirshipDebugManager(
24-
config: config,
25-
analytics: analytics,
26-
remoteData: remoteData
20+
config: args.config,
21+
analytics: args.analytics,
22+
remoteData: args.remoteData
2723
)
2824
return DebugSDKModule(debugManager)
2925
}

0 commit comments

Comments
 (0)