Skip to content

Commit 966b2d6

Browse files
authored
Remove UIKit dependency (#90)
Replace use of UIDevice and use a different non-UIKit source
1 parent 0478918 commit 966b2d6

File tree

1 file changed

+51
-16
lines changed

1 file changed

+51
-16
lines changed

Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,36 @@
66
//
77

88
import Foundation
9-
import UIKit
9+
10+
fileprivate func processInfoOperationSystemVersion() -> String {
11+
let version = ProcessInfo().operatingSystemVersion
12+
return "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)"
13+
}
14+
15+
fileprivate func posixModelName() -> String {
16+
var systemName = utsname()
17+
uname(&systemName)
18+
return withUnsafePointer(to: &systemName.machine) {
19+
$0.withMemoryRebound(to: CChar.self, capacity: 1) {
20+
ptr in String.init(validatingUTF8: ptr)
21+
}
22+
} ?? "Unknown"
23+
}
24+
25+
fileprivate func inferredPlatformName() -> String {
26+
let modelName = posixModelName()
27+
if modelName.contains("ipad") {
28+
return "iPadOS"
29+
} else if modelName.contains("iphone") {
30+
return "iOS"
31+
} else {
32+
#if targetEnvironment(simulator)
33+
return "Simulator"
34+
#else
35+
return "Unknown"
36+
#endif
37+
}
38+
}
1039

1140
class Reporter: NSObject {
1241

@@ -28,9 +57,11 @@ class Reporter: NSObject {
2857
var locale: Locale {
2958
Locale.current
3059
}
31-
var device: UIDevice {
32-
UIDevice.current
33-
}
60+
61+
let model: String
62+
let platformName: String
63+
let platformVersion: String
64+
3465
var regionCode: String? {
3566
if #available(iOS 16, *) {
3667
return locale.language.region?.identifier
@@ -52,6 +83,10 @@ class Reporter: NSObject {
5283
string: "https://mobile.muxanalytics.com"
5384
)!
5485

86+
self.model = posixModelName()
87+
self.platformName = inferredPlatformName()
88+
self.platformVersion = processInfoOperationSystemVersion()
89+
5590
super.init()
5691

5792
let sessionConfig: URLSessionConfiguration = URLSessionConfiguration.default
@@ -105,12 +140,12 @@ extension Reporter {
105140
let data = UploadSucceededEvent.Data(
106141
appName: Bundle.main.appName,
107142
appVersion: Bundle.main.appVersion,
108-
deviceModel: device.model,
143+
deviceModel: model,
109144
inputDuration: inputDuration,
110145
inputSize: inputSize,
111146
inputStandardizationRequested: options.inputStandardization.isRequested,
112-
platformName: device.systemName,
113-
platformVersion: device.systemVersion,
147+
platformName: platformName,
148+
platformVersion: platformVersion,
114149
regionCode: regionCode,
115150
sdkVersion: Version.versionString,
116151
uploadStartTime: uploadStartTime,
@@ -145,13 +180,13 @@ extension Reporter {
145180
let data = UploadFailedEvent.Data(
146181
appName: Bundle.main.appName,
147182
appVersion: Bundle.main.appVersion,
148-
deviceModel: device.model,
183+
deviceModel: model,
149184
errorDescription: errorDescription,
150185
inputDuration: inputDuration,
151186
inputSize: inputSize,
152187
inputStandardizationRequested: options.inputStandardization.isRequested,
153-
platformName: device.systemName,
154-
platformVersion: device.systemVersion,
188+
platformName: platformName,
189+
platformVersion: platformVersion,
155190
regionCode: regionCode,
156191
sdkVersion: Version.versionString,
157192
uploadStartTime: uploadStartTime,
@@ -186,13 +221,13 @@ extension Reporter {
186221
let data = InputStandardizationSucceededEvent.Data(
187222
appName: Bundle.main.appName,
188223
appVersion: Bundle.main.appVersion,
189-
deviceModel: device.model,
224+
deviceModel: model,
190225
inputDuration: inputDuration,
191226
inputSize: inputSize,
192227
maximumResolution: options.inputStandardization.maximumResolution.description,
193228
nonStandardInputReasons: nonStandardInputReasons.map(\.description),
194-
platformName: device.systemName,
195-
platformVersion: device.systemVersion,
229+
platformName: platformName,
230+
platformVersion: platformVersion,
196231
regionCode: regionCode,
197232
sdkVersion: Version.versionString,
198233
standardizationStartTime: standardizationStartTime,
@@ -229,14 +264,14 @@ extension Reporter {
229264
let data = InputStandardizationFailedEvent.Data(
230265
appName: Bundle.main.appName,
231266
appVersion: Bundle.main.appVersion,
232-
deviceModel: device.model,
267+
deviceModel: model,
233268
errorDescription: errorDescription,
234269
inputDuration: inputDuration,
235270
inputSize: inputSize,
236271
maximumResolution: options.inputStandardization.maximumResolution.description,
237272
nonStandardInputReasons: nonStandardInputReasons.map(\.description),
238-
platformName: device.systemName,
239-
platformVersion: device.systemVersion,
273+
platformName: platformName,
274+
platformVersion: platformVersion,
240275
regionCode: regionCode,
241276
sdkVersion: Version.versionString,
242277
standardizationStartTime: standardizationStartTime,

0 commit comments

Comments
 (0)