Skip to content

Commit 1e4402d

Browse files
committed
feat: Allow for more granular tracked lifecycle events to track
1 parent 7d47f4b commit 1e4402d

File tree

13 files changed

+147
-105
lines changed

13 files changed

+147
-105
lines changed

Examples/apps/BasicExample/BasicExample/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
1717
// Override point for customization after application launch.
1818

1919
let configuration = Configuration(writeKey: "WRITE KEY")
20-
.trackApplicationLifecycleEvents(true)
20+
.setTrackedApplicationLifecycleEvents(.all)
2121
.flushInterval(10)
2222
.flushAt(2)
2323

Examples/apps/DestinationsExample/DestinationsExample/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
2323
// Override point for customization after application launch.
2424

2525
let configuration = Configuration(writeKey: "EioRQCqLHUECnoSseEguI8GnxOlZTOyX")
26-
.trackApplicationLifecycleEvents(true)
26+
.setTrackedApplicationLifecycleEvents(.all)
2727
.flushInterval(1)
2828

2929
analytics = Analytics(configuration: configuration)

Examples/apps/MacExample/MacExample/AppDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
1818
// Insert code here to initialize your application
1919

2020
let configuration = Configuration(writeKey: "<WRITE KEY>")
21-
.trackApplicationLifecycleEvents(true)
21+
.setTrackedApplicationLifecycleEvents(.all)
2222
.flushInterval(10)
2323
.flushAt(1)
2424
.errorHandler { error in

Examples/apps/ObjCExample/ObjCExample/AppDelegate.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ @implementation AppDelegate
2121
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2222
// Override point for customization after application launch.
2323
SEGConfiguration *config = [[SEGConfiguration alloc] initWithWriteKey:@"<WRITE KEY>"];
24-
config.trackApplicationLifecycleEvents = YES;
24+
config.trackApplicationLifecycleEvents = SEGTrackedLifecycleEvent.all;
2525
config.flushAt = 1;
2626

2727
_analytics = [[SEGAnalytics alloc] initWithConfiguration: config];

Examples/apps/SegmentExtensionsExample/ArticleWidget/ArticleWidget.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,5 @@ extension Analytics {
101101
static var main = Analytics(configuration:
102102
Configuration(writeKey: "ABCD")
103103
.flushAt(3)
104-
.trackApplicationLifecycleEvents(true))
104+
.setTrackedApplicationLifecycleEvents(.all))
105105
}

Examples/apps/SegmentSwiftUIExample/SegmentSwiftUIExample/SegmentSwiftUIExampleApp.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ extension Analytics {
2121
static var main = Analytics(configuration:
2222
Configuration(writeKey: "ABCD")
2323
.flushAt(3)
24-
.trackApplicationLifecycleEvents(true))
24+
.setTrackedApplicationLifecycleEvents(.all))
2525
}

Examples/apps/watchOSExample/watchOSExample WatchKit Extension/ExtensionDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ExtensionDelegate: NSObject, WKExtensionDelegate {
1414
func applicationDidFinishLaunching() {
1515
// Perform any final initialization of your application.
1616
let configuration = Configuration(writeKey: "WRITE KEY")
17-
.trackApplicationLifecycleEvents(true)
17+
.setTrackedApplicationLifecycleEvents(.all)
1818
.flushInterval(10)
1919

2020
analytics = Analytics(configuration: configuration)

Examples/tasks/MultiInstance.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ import Segment
3838
extension Analytics {
3939
static var main = Analytics(configuration: Configuration(writeKey: "1234")
4040
.flushAt(3)
41-
.trackApplicationLifecycleEvents(true))
42-
41+
.setTrackedApplicationLifecycleEvents(.all))
42+
4343
static var support = Analytics(configuration: Configuration(writeKey: "5678")
4444
.flushAt(10)
45-
.trackApplicationLifecycleEvents(false))
45+
.setTrackedApplicationLifecycleEvents(.none))
4646
}

Sources/Segment/Configuration.swift

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,53 @@ 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+
@objc public static let none = TrackedLifecycleEvent()
59+
@objc public static let applicationInstalled = TrackedLifecycleEvent(rawValue: 0b00000001)
60+
@objc public static let applicationUpdated = TrackedLifecycleEvent(rawValue: 0b00000010)
61+
@objc public static let applicationOpened = TrackedLifecycleEvent(rawValue: 0b00000100)
62+
@objc public static let applicationBackgrounded = TrackedLifecycleEvent(rawValue: 0b00001000)
63+
@objc public static let applicationForegrounded = TrackedLifecycleEvent(rawValue: 0b00010000)
64+
#if os(macOS)
65+
@objc public static let applicationUnhidden = TrackedLifecycleEvent(rawValue: 0b00100000)
66+
@objc public static let applicationHidden = TrackedLifecycleEvent(rawValue: 0b01000000)
67+
@objc public static let applicationTerminated = TrackedLifecycleEvent(rawValue: 0b10000000)
68+
69+
@objc public static let all = TrackedLifecycleEvent([
70+
applicationInstalled,
71+
applicationUpdated,
72+
applicationOpened,
73+
applicationBackgrounded,
74+
applicationForegrounded,
75+
applicationUnhidden,
76+
applicationHidden,
77+
applicationTerminated,
78+
])
79+
#elseif os(iOS) || os(tvOS) || os(visionOS) || targetEnvironment(macCatalyst)
80+
@objc public static let all = TrackedLifecycleEvent([
81+
applicationInstalled,
82+
applicationUpdated,
83+
applicationOpened,
84+
applicationBackgrounded,
85+
applicationForegrounded,
86+
])
87+
#else
88+
@objc public static let all = TrackedLifecycleEvent.none
89+
#endif
90+
}
91+
5092
public class Configuration {
5193
internal struct Values {
5294
var writeKey: String
5395
var application: Any? = nil
54-
var trackApplicationLifecycleEvents: Bool = true
96+
var trackedApplicationLifecycleEvents = TrackedLifecycleEvent.all
5597
var flushAt: Int = 20
5698
var flushInterval: TimeInterval = 30
5799
var defaultSettings: Settings? = nil
@@ -110,8 +152,19 @@ public extension Configuration {
110152
/// - Parameter enabled: A bool value
111153
/// - Returns: The current Configuration.
112154
@discardableResult
155+
@available(*, deprecated, message: "Use `setTrackedApplicationLifecycleEvents(_:)` for more granular control")
113156
func trackApplicationLifecycleEvents(_ enabled: Bool) -> Configuration {
114-
values.trackApplicationLifecycleEvents = enabled
157+
values.trackedApplicationLifecycleEvents = enabled ? .all : .none
158+
return self
159+
}
160+
161+
/// Opt-in/out of tracking lifecycle events. The default value is `.none`.
162+
///
163+
/// - Parameter events: An option set of the events to track.
164+
/// - Returns: The current Configuration.
165+
@discardableResult
166+
func setTrackedApplicationLifecycleEvents(_ events: TrackedLifecycleEvent) -> Configuration {
167+
values.trackedApplicationLifecycleEvents = events
115168
return self
116169
}
117170

Sources/Segment/ObjC/ObjCConfiguration.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ public class ObjCConfiguration: NSObject {
2929

3030
/// Opt-in/out of tracking lifecycle events. The default value is `false`.
3131
@objc
32-
public var trackApplicationLifecycleEvents: Bool {
32+
public var trackApplicationLifecycleEvents: TrackedLifecycleEvent {
3333
get {
34-
return configuration.values.trackApplicationLifecycleEvents
34+
return configuration.values.trackedApplicationLifecycleEvents
3535
}
3636
set(value) {
37-
configuration.trackApplicationLifecycleEvents(value)
37+
configuration.setTrackedApplicationLifecycleEvents(value)
3838
}
3939
}
4040

0 commit comments

Comments
 (0)