Skip to content

Commit 45a462b

Browse files
committed
Update analytics
1 parent 438fcf8 commit 45a462b

File tree

8 files changed

+25
-9
lines changed

8 files changed

+25
-9
lines changed

Packages/Package.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ let package = Package(
162162
.target(
163163
name: "AnalyticsClient",
164164
dependencies: [
165+
"PersistenceKeys",
165166
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
166167
.product(name: "Mixpanel", package: "mixpanel-swift"),
167168
.product(name: "Sentry", package: "sentry-cocoa")

Packages/Sources/AnalyticsClient/AnalyticsClient.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77

88
import Foundation
99
import ComposableArchitecture
10+
import PersistenceKeys
1011
import Mixpanel
1112
import Sentry
1213
import OSLog
1314

1415
@DependencyClient
1516
public struct AnalyticsClient: Sendable {
1617
public var configure: @Sendable () -> Void
18+
public var identify: @Sendable (_ distinctId: String) -> Void
19+
public var logout: @Sendable () -> Void
1720
public var log: @Sendable (any Event) -> Void
1821
public var capture: @Sendable (any Error) -> Void
1922
}
@@ -36,8 +39,16 @@ extension AnalyticsClient: DependencyKey {
3639
configureMixpanel(id: analyticsId)
3740
configureSentry(id: analyticsId)
3841
},
42+
identify: { id in
43+
logger.info("Identifying user with id: \(id)")
44+
Mixpanel.mainInstance().identify(distinctId: id)
45+
},
46+
logout: {
47+
logger.info("Analytics has been reset after logout")
48+
Mixpanel.mainInstance().reset()
49+
},
3950
log: { event in
40-
logger.info("\(event.name) | \(event.properties ?? [:])")
51+
logger.info("\(event.name) \(event.properties.map { "(\($0))" } ?? "")")
4152
Mixpanel.mainInstance().track(event: event.name, properties: event.properties)
4253
},
4354
capture: { error in
@@ -49,6 +60,8 @@ extension AnalyticsClient: DependencyKey {
4960

5061
public static let previewValue = Self(
5162
configure: {},
63+
identify: { _ in },
64+
logout: {},
5265
log: { event in
5366
if let properties = event.properties {
5467
print("[Analytics] \(event.name) (\(properties))")
@@ -70,7 +83,6 @@ extension AnalyticsClient {
7083
trackAutomaticEvents: true, // FIXME: LEGACY, REMOVE. https://docs.mixpanel.com/docs/tracking-methods/sdks/swift#legacy-automatically-tracked-events
7184
optOutTrackingByDefault: isDebug
7285
)
73-
Mixpanel.mainInstance().userId = id
7486
}
7587

7688
private static func configureSentry(id: String) {
@@ -79,6 +91,7 @@ extension AnalyticsClient {
7991
options.debug = isDebug
8092
options.enabled = !isDebug
8193
options.tracesSampleRate = 1.0
94+
options.profilesSampleRate = 1.0
8295
options.diagnosticLevel = .warning
8396
options.attachScreenshot = true
8497
options.attachViewHierarchy = true

Packages/Sources/AnalyticsClient/Events/Event.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public protocol Event {
1212
var properties: [String: String]? { get }
1313
}
1414

15-
// RELEASE: Test if this works accurately
15+
// TODO: Test if this works accurately
1616
public func eventName(for object: Any) -> String {
1717
if let string = Mirror(reflecting: object).children.first?.label {
1818
return string.inProperCase
@@ -21,7 +21,7 @@ public func eventName(for object: Any) -> String {
2121
}
2222
}
2323

24-
public extension String { // RELEASE: Move public or make private
24+
extension String {
2525
var inProperCase: String {
2626
// Regular expressions to match different case styles
2727
let camelCasePattern = "([a-z0-9])([A-Z])"

Packages/Sources/AnalyticsClient/Events/MenuEvent.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ public enum MenuEvent: Event {
1515
case changelogTelegramTapped
1616
case chatTelegramTapped
1717
case githubTapped
18-
case _userSessionUpdated(Int?)
18+
case userSessionUpdated(Int?)
1919

2020
public var name: String {
2121
return "Menu " + eventName(for: self).inProperCase
2222
}
2323

2424
public var properties: [String: String]? {
2525
switch self {
26-
case let ._userSessionUpdated(userId):
26+
case let .userSessionUpdated(userId):
2727
if let userId {
2828
return ["userId": String(userId)]
2929
} else {

Packages/Sources/AnalyticsClient/Events/SettingsEvent.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ public enum SettingsEvent: Event {
1414
case copyDebugIdTapped
1515
case clearCacheTapped
1616
case checkVersionsTapped
17-
case _somethingWentWrong(any Error)
17+
case somethingWentWrong(any Error)
1818

1919
public var name: String {
2020
return "Settings " + eventName(for: self).inProperCase
2121
}
2222

2323
public var properties: [String: String]? {
2424
switch self {
25-
case let ._somethingWentWrong(error):
25+
case let .somethingWentWrong(error):
2626
return ["error": error.localizedDescription]
2727
default:
2828
return nil

Packages/Sources/ArticlesListFeature/ArticlesListFeature.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public struct ArticlesListFeature: Sendable {
102102
case .onFirstAppear:
103103
return .run { [offset = state.offset, amount = state.loadAmount] send in
104104
do {
105-
await apiClient.setLogResponses(type: .full)
105+
await apiClient.setLogResponses(type: .none)
106106
try await apiClient.connect()
107107
let result = await Result { try await apiClient.getArticlesList(offset: offset, amount: amount) }
108108
await send(._articlesResponse(result))

Packages/Sources/AuthFeature/Analytics/AuthFeature+Analytics.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ extension AuthFeature {
3434

3535
case let .delegate(.loginSuccess(userId: userId)):
3636
analyticsClient.log(AuthEvent.loginSuccess(userId))
37+
analyticsClient.identify(String(userId))
3738
}
3839
return .none
3940
}

Packages/Sources/ProfileFeature/Analytics/ProfileFeature+Analytics.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ extension ProfileFeature {
2525

2626
case .logoutButtonTapped:
2727
analyticsClient.log(ProfileEvent.logoutTapped)
28+
analyticsClient.logout()
2829

2930
case let ._userResponse(.success(user)):
3031
analyticsClient.log(ProfileEvent.userLoaded(user.id))

0 commit comments

Comments
 (0)