Skip to content

Commit 2e267fe

Browse files
committed
update
1 parent 7d24517 commit 2e267fe

10 files changed

Lines changed: 77 additions & 320 deletions

Sources/Amplitude/Amplitude.swift

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ public class Amplitude {
119119

120120
let trackingQueue = DispatchQueue(label: "com.amplitude.analytics")
121121

122-
private var diagnosticsObserverTask: Task<Void, Never>?
123-
private var diagnosticsObserverId: UUID?
122+
private var enabledAutocapture: AutocaptureOptions = .init(rawValue: 0)
123+
private var needsSetAutocaptureDiagnostics: Bool = false
124124

125125
public init(
126126
configuration: Configuration
@@ -142,6 +142,7 @@ public class Amplitude {
142142
instanceName: configuration.getNormalizeInstanceName(),
143143
serverZone: serverZone,
144144
logger: configuration.loggerProvider,
145+
remoteConfigClient: configuration.remoteConfigClient,
145146
diagnosticsClient: configuration.diagnosticsClient)
146147

147148
let contextPlugin = ContextPlugin()
@@ -184,7 +185,10 @@ public class Amplitude {
184185
}
185186
trackingQueue.resume()
186187

187-
setupDiagnosticsObserver()
188+
amplitudeContext.diagnosticsClient.setTag(name: "sdk.\(Constants.SDK_LIBRARY).version", value: Constants.SDK_VERSION)
189+
190+
enabledAutocapture = configuration.autocapture
191+
updateDiagnosticsAutocaptureTags()
188192
}
189193

190194
convenience init(apiKey: String, configuration: Configuration) {
@@ -618,7 +622,6 @@ public class Amplitude {
618622
}
619623

620624
deinit {
621-
diagnosticsObserverTask?.cancel()
622625
}
623626
}
624627

@@ -655,45 +658,26 @@ extension Amplitude: AnalyticsClient {
655658
}
656659
}
657660

658-
// MARK: - Diagnostics
659-
660661
extension Amplitude {
661662

662-
private func setupDiagnosticsObserver() {
663-
diagnosticsObserverTask = Task { [weak self] in
664-
guard let self else { return }
665-
666-
let (stream, observerId) = await self.amplitudeContext.diagnosticsClient.observeIsRunning()
667-
self.diagnosticsObserverId = observerId
668-
669-
for await isRunning in stream {
670-
guard isRunning else { continue }
671-
await self.setupDiagnostics()
672-
await self.cleanupDiagnosticsObserver()
673-
break
663+
func updateEnabledAutocapture(_ options: AutocaptureOptions, enabled: Bool) {
664+
trackingQueue.async {
665+
if enabled {
666+
self.enabledAutocapture.formUnion(options)
667+
} else {
668+
self.enabledAutocapture.subtract(options)
674669
}
675-
}
676-
}
670+
self.needsSetAutocaptureDiagnostics = true
677671

678-
private func cleanupDiagnosticsObserver() async {
679-
if let observerId = diagnosticsObserverId {
680-
await self.amplitudeContext.diagnosticsClient.stopObservingIsRunning(observerId)
681-
diagnosticsObserverId = nil
672+
self.trackingQueue.async { [weak self] in
673+
guard let self, needsSetAutocaptureDiagnostics else { return }
674+
needsSetAutocaptureDiagnostics = false
675+
updateDiagnosticsAutocaptureTags()
676+
}
682677
}
683-
diagnosticsObserverTask?.cancel()
684-
diagnosticsObserverTask = nil
685678
}
686679

687-
private func setupDiagnostics() async {
688-
await amplitudeContext.diagnosticsClient.setTag(name: "sdk.\(Constants.SDK_LIBRARY).version", value: Constants.SDK_VERSION)
689-
690-
CrashCatcher.register()
691-
692-
if let crash = CrashCatcher.checkForPreviousCrash() {
693-
CrashCatcher.clearCrashReport()
694-
await amplitudeContext.diagnosticsClient.increment(name: "analytics.crash")
695-
let eventProperties = ["report": crash]
696-
await amplitudeContext.diagnosticsClient.recordEvent(name: "analytics.crash", properties: eventProperties)
697-
}
680+
func updateDiagnosticsAutocaptureTags() {
681+
amplitudeContext.diagnosticsClient.setTag(name: "autocapture.enabled", value: enabledAutocapture.stringRepresentation())
698682
}
699683
}

Sources/Amplitude/AutocaptureOptions.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,33 @@ public struct AutocaptureOptions: OptionSet {
2525
.frustrationInteractions,
2626
]
2727
}
28+
29+
extension AutocaptureOptions {
30+
func stringRepresentation() -> String {
31+
guard rawValue != 0 else { return "none" }
32+
33+
var options: [String] = []
34+
35+
if contains(.sessions) {
36+
options.append("sessions")
37+
}
38+
if contains(.appLifecycles) {
39+
options.append("appLifecycles")
40+
}
41+
if contains(.screenViews) {
42+
options.append("screenViews")
43+
}
44+
if contains(.elementInteractions) {
45+
options.append("elementInteractions")
46+
}
47+
if contains(.networkTracking) {
48+
options.append("networkTracking")
49+
}
50+
if contains(.frustrationInteractions) {
51+
options.append("frustrationInteractions")
52+
}
53+
54+
return options.joined(separator: ",")
55+
}
56+
}
57+

Sources/Amplitude/Configuration.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class Configuration {
8282
public var interactionsOptions: InteractionsOptions
8383
public var enableDiagnostics: Bool
8484

85+
let remoteConfigClient: RemoteConfigClient
8586
let diagnosticsClient: CoreDiagnostics
8687

8788
@available(*, deprecated, message: "Please use the `autocapture` parameter instead.")
@@ -191,11 +192,16 @@ public class Configuration {
191192
self.loggerProvider = loggerProvider
192193
self.serverZone = serverZone
193194
self.enableDiagnostics = enableDiagnostics
195+
self.remoteConfigClient = RemoteConfigClient(apiKey: self.apiKey,
196+
serverZone: self.serverZone,
197+
instanceName: self.instanceName,
198+
logger: self.loggerProvider)
194199
self.diagnosticsClient = DiagnosticsClient(apiKey: self.apiKey,
195200
serverZone: self.serverZone,
196201
instanceName: self.instanceName,
197202
logger: self.loggerProvider,
198-
enabled: self.enableDiagnostics)
203+
enabled: self.enableDiagnostics,
204+
remoteConfigClient: self.remoteConfigClient)
199205
self.storageProvider = storageProvider
200206
?? PersistentStorage(storagePrefix: PersistentStorage.getEventStoragePrefix(apiKey, normalizedInstanceName), logger: self.loggerProvider, diagonostics: self.diagonostics, diagnosticsClient: self.diagnosticsClient)
201207
self.identifyStorageProvider = identifyStorageProvider

Sources/Amplitude/Plugins/NetworkTrackingPlugin.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ class NetworkTrackingPlugin: UtilityPlugin, NetworkTaskListener {
270270
// Update from remote config
271271
if let enabled = options["enabled"] as? Bool {
272272
optOut = !enabled
273+
amplitude?.updateEnabledAutocapture(.networkTracking, enabled: enabled)
273274
}
274275
if let ignoreHosts = options["ignoreHosts"] as? [String] {
275276
updatedOptions.ignoreHosts = ignoreHosts

Sources/Amplitude/Plugins/iOS/IOSLifecycleMonitor.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class IOSLifecycleMonitor: UtilityPlugin {
7676
remoteConfigSubscription = amplitude
7777
.amplitudeContext
7878
.remoteConfigClient
79-
.subscribe(key: Constants.RemoteConfig.Key.autocapture) { [weak self] config, _, _ in
79+
.subscribe(key: Constants.RemoteConfig.Key.autocapture) { [weak self, weak amplitude] config, _, _ in
8080
guard let self, let config else {
8181
return
8282
}
@@ -85,15 +85,18 @@ class IOSLifecycleMonitor: UtilityPlugin {
8585

8686
if let pageViews = config["pageViews"] as? Bool {
8787
newState.screenViews = pageViews
88+
amplitude?.updateEnabledAutocapture(.screenViews, enabled: pageViews)
8889
}
8990

9091
if let interactions = config["elementInteractions"] as? Bool {
9192
newState.elementInteractions = interactions
93+
amplitude?.updateEnabledAutocapture(.elementInteractions, enabled: interactions)
9294
}
9395

9496
if let frustrationInteractions = config["frustrationInteractions"] as? [String: Any] {
9597
if let enabled = frustrationInteractions["enabled"] as? Bool {
9698
newState.frustrationInteractions = enabled
99+
amplitude?.updateEnabledAutocapture(.frustrationInteractions, enabled: enabled)
97100
}
98101

99102
if let rageClick = frustrationInteractions["rageClick"] as? [String: Any],
@@ -109,6 +112,7 @@ class IOSLifecycleMonitor: UtilityPlugin {
109112

110113
if let appLifecycles = config["appLifecycles"] as? Bool {
111114
newState.appLifecycles = appLifecycles
115+
amplitude?.updateEnabledAutocapture(.appLifecycles, enabled: appLifecycles)
112116
}
113117

114118
trackingState = newState

Sources/Amplitude/Sessions.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,10 @@ public class Sessions {
7171
if configuration.enableAutoCaptureRemoteConfig {
7272
remoteConfigSubscription = context
7373
.remoteConfigClient
74-
.subscribe(key: Constants.RemoteConfig.Key.autocapture) { [weak self] config, _, _ in
74+
.subscribe(key: Constants.RemoteConfig.Key.autocapture) { [weak self, weak amplitude] config, _, _ in
7575
if let self, let sessions = config?["sessions"] as? Bool {
7676
trackSessionEvents = sessions
77+
amplitude?.updateEnabledAutocapture(.sessions, enabled: sessions)
7778
}
7879
}
7980
}

Sources/Amplitude/Utilities/CrashCapture.swift

Whitespace-only changes.

0 commit comments

Comments
 (0)