Files
SideStore/SideStoreApp/Sources/SideStoreAppKit/Analytics/AnalyticsManager.swift

91 lines
2.5 KiB
Swift
Raw Normal View History

//
// AnalyticsManager.swift
// AltStore
//
// Created by Riley Testut on 3/31/20.
// Copyright © 2020 Riley Testut. All rights reserved.
//
import Foundation
2023-03-01 00:48:36 -05:00
import SideStoreCore
import AppCenter
import AppCenterAnalytics
import AppCenterCrashes
2022-12-03 17:21:44 -05:00
private let appCenterAppSecret = "73532d3e-e573-4693-99a4-9f85840bbb44"
2023-03-01 19:09:33 -05:00
public extension AnalyticsManager {
2023-03-01 00:48:36 -05:00
enum EventProperty: String {
case name
case bundleIdentifier
case developerName
case version
case size
case tintColor
case sourceIdentifier
case sourceURL
}
2023-03-01 00:48:36 -05:00
enum Event {
case installedApp(InstalledApp)
case updatedApp(InstalledApp)
case refreshedApp(InstalledApp)
2023-03-01 00:48:36 -05:00
2023-03-01 19:09:33 -05:00
public var name: String {
2023-03-01 00:48:36 -05:00
switch self {
case .installedApp: return "installed_app"
case .updatedApp: return "updated_app"
case .refreshedApp: return "refreshed_app"
}
}
2023-03-01 00:48:36 -05:00
2023-03-01 19:09:33 -05:00
public var properties: [EventProperty: String] {
let properties: [EventProperty: String?]
2023-03-01 00:48:36 -05:00
switch self {
case let .installedApp(app), let .updatedApp(app), let .refreshedApp(app):
let appBundleURL = InstalledApp.fileURL(for: app)
let appBundleSize = FileManager.default.directorySize(at: appBundleURL)
2023-03-01 00:48:36 -05:00
properties = [
.name: app.name,
.bundleIdentifier: app.bundleIdentifier,
.developerName: app.storeApp?.developerName,
.version: app.version,
.size: appBundleSize?.description,
.tintColor: app.storeApp?.tintColor?.hexString,
.sourceIdentifier: app.storeApp?.sourceIdentifier,
.sourceURL: app.storeApp?.source?.sourceURL.absoluteString
]
}
2023-03-01 00:48:36 -05:00
return properties.compactMapValues { $0 }
}
}
}
2023-03-01 19:09:33 -05:00
public final class AnalyticsManager {
public static let shared = AnalyticsManager()
2023-03-01 00:48:36 -05:00
private init() {}
}
2023-03-01 19:09:33 -05:00
public extension AnalyticsManager {
2023-03-01 00:48:36 -05:00
func start() {
AppCenter.start(withAppSecret: appCenterAppSecret, services: [
Analytics.self,
Crashes.self
])
}
2023-03-01 00:48:36 -05:00
func trackEvent(_ event: Event) {
let properties = event.properties.reduce(into: [:]) { properties, item in
properties[item.key.rawValue] = item.value
}
2023-03-01 00:48:36 -05:00
Analytics.trackEvent(event.name, withProperties: properties)
}
}