@@ -47,11 +47,61 @@ public enum StorageMode {
4747
4848// MARK: - Internal Configuration
4949
50+ @objc ( SEGTrackedLifecycleEvent)
51+ public final class TrackedLifecycleEvent : NSObject , OptionSet {
52+ public let rawValue : Int
53+
54+ public init ( rawValue: Int ) {
55+ self . rawValue = rawValue
56+ }
57+
58+ public override func isEqual( _ object: Any ? ) -> Bool {
59+ ( object as? Self ) ? . rawValue == rawValue
60+ }
61+
62+ public override var hash : Int {
63+ rawValue. hashValue
64+ }
65+
66+ @objc public static let none : TrackedLifecycleEvent = [ ]
67+ @objc public static let applicationInstalled = TrackedLifecycleEvent ( rawValue: 1 << 0 )
68+ @objc public static let applicationUpdated = TrackedLifecycleEvent ( rawValue: 1 << 1 )
69+ @objc public static let applicationOpened = TrackedLifecycleEvent ( rawValue: 1 << 2 )
70+ @objc public static let applicationBackgrounded = TrackedLifecycleEvent ( rawValue: 1 << 3 )
71+ @objc public static let applicationForegrounded = TrackedLifecycleEvent ( rawValue: 1 << 4 )
72+ #if os(macOS)
73+ @objc public static let applicationUnhidden = TrackedLifecycleEvent ( rawValue: 1 << 5 )
74+ @objc public static let applicationHidden = TrackedLifecycleEvent ( rawValue: 1 << 6 )
75+ @objc public static let applicationTerminated = TrackedLifecycleEvent ( rawValue: 1 << 7 )
76+
77+ @objc public static let all : TrackedLifecycleEvent = [
78+ . applicationInstalled,
79+ . applicationUpdated,
80+ . applicationOpened,
81+ . applicationBackgrounded,
82+ . applicationForegrounded,
83+ . applicationUnhidden,
84+ . applicationHidden,
85+ . applicationTerminated,
86+ ]
87+ #elseif os(iOS) || os(tvOS) || os(visionOS) || targetEnvironment(macCatalyst)
88+ @objc public static let all : TrackedLifecycleEvent = [
89+ . applicationInstalled,
90+ . applicationUpdated,
91+ . applicationOpened,
92+ . applicationBackgrounded,
93+ . applicationForegrounded,
94+ ]
95+ #else
96+ @objc public static let all = TrackedLifecycleEvent . none
97+ #endif
98+ }
99+
50100public class Configuration {
51101 internal struct Values {
52102 var writeKey : String
53103 var application : Any ? = nil
54- var trackApplicationLifecycleEvents : Bool = true
104+ var trackedApplicationLifecycleEvents = TrackedLifecycleEvent . all
55105 var flushAt : Int = 20
56106 var flushInterval : TimeInterval = 30
57107 var defaultSettings : Settings ? = nil
@@ -110,8 +160,19 @@ public extension Configuration {
110160 /// - Parameter enabled: A bool value
111161 /// - Returns: The current Configuration.
112162 @discardableResult
163+ @available ( * , deprecated, message: " Use `setTrackedApplicationLifecycleEvents(_:)` for more granular control " )
113164 func trackApplicationLifecycleEvents( _ enabled: Bool ) -> Configuration {
114- values. trackApplicationLifecycleEvents = enabled
165+ values. trackedApplicationLifecycleEvents = enabled ? . all : . none
166+ return self
167+ }
168+
169+ /// Opt-in/out of tracking lifecycle events. The default value is `.none`.
170+ ///
171+ /// - Parameter events: An option set of the events to track.
172+ /// - Returns: The current Configuration.
173+ @discardableResult
174+ func setTrackedApplicationLifecycleEvents( _ events: TrackedLifecycleEvent ) -> Configuration {
175+ values. trackedApplicationLifecycleEvents = events
115176 return self
116177 }
117178
0 commit comments