From 0c4a529b3c1f60469ee45fac8e8a2c8ca954c00d Mon Sep 17 00:00:00 2001 From: AJ Lauer Barinov Date: Thu, 3 Aug 2023 13:24:05 -0700 Subject: [PATCH 1/3] Remove UIKit dependency Replace use of UIDevice and use a different non-UIKit source --- .../Reporting/Reporter.swift | 63 ++++++++++++++----- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift b/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift index 99697543..27ad69c0 100644 --- a/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift +++ b/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift @@ -6,7 +6,32 @@ // import Foundation -import UIKit + +fileprivate func processInfoOperationSystemVersion() -> String { + let version = ProcessInfo().operatingSystemVersion + return "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)" +} + +fileprivate func posixModelName() -> String { + var systemName = utsname() + uname(&systemName) + return withUnsafePointer(to: &systemName.machine) { + $0.withMemoryRebound(to: CChar.self, capacity: 1) { + ptr in String.init(validatingUTF8: ptr) + } + } ?? "" +} + +fileprivate func inferredPlatformName() -> String { + let modelName = posixModelName() + if modelName.contains("ipad") { + return "iPadOS" + } else if modelName.contains("iphone") { + return "iOS" + } else { + return "Unknown" + } +} class Reporter: NSObject { @@ -28,9 +53,11 @@ class Reporter: NSObject { var locale: Locale { Locale.current } - var device: UIDevice { - UIDevice.current - } + + let model: String + let platformName: String + let platformVersion: String + var regionCode: String? { if #available(iOS 16, *) { return locale.language.region?.identifier @@ -52,6 +79,10 @@ class Reporter: NSObject { string: "https://mobile.muxanalytics.com" )! + self.model = posixModelName() + self.platformName = inferredPlatformName() + self.platformVersion = processInfoOperationSystemVersion() + super.init() let sessionConfig: URLSessionConfiguration = URLSessionConfiguration.default @@ -105,12 +136,12 @@ extension Reporter { let data = UploadSucceededEvent.Data( appName: Bundle.main.appName, appVersion: Bundle.main.appVersion, - deviceModel: device.model, + deviceModel: model, inputDuration: inputDuration, inputSize: inputSize, inputStandardizationRequested: options.inputStandardization.isRequested, - platformName: device.systemName, - platformVersion: device.systemVersion, + platformName: platformName, + platformVersion: platformVersion, regionCode: regionCode, sdkVersion: Version.versionString, uploadStartTime: uploadStartTime, @@ -145,13 +176,13 @@ extension Reporter { let data = UploadFailedEvent.Data( appName: Bundle.main.appName, appVersion: Bundle.main.appVersion, - deviceModel: device.model, + deviceModel: model, errorDescription: errorDescription, inputDuration: inputDuration, inputSize: inputSize, inputStandardizationRequested: options.inputStandardization.isRequested, - platformName: device.systemName, - platformVersion: device.systemVersion, + platformName: platformName, + platformVersion: platformVersion, regionCode: regionCode, sdkVersion: Version.versionString, uploadStartTime: uploadStartTime, @@ -186,13 +217,13 @@ extension Reporter { let data = InputStandardizationSucceededEvent.Data( appName: Bundle.main.appName, appVersion: Bundle.main.appVersion, - deviceModel: device.model, + deviceModel: model, inputDuration: inputDuration, inputSize: inputSize, maximumResolution: options.inputStandardization.maximumResolution.description, nonStandardInputReasons: nonStandardInputReasons.map(\.description), - platformName: device.systemName, - platformVersion: device.systemVersion, + platformName: platformName, + platformVersion: platformVersion, regionCode: regionCode, sdkVersion: Version.versionString, standardizationStartTime: standardizationStartTime, @@ -229,14 +260,14 @@ extension Reporter { let data = InputStandardizationFailedEvent.Data( appName: Bundle.main.appName, appVersion: Bundle.main.appVersion, - deviceModel: device.model, + deviceModel: model, errorDescription: errorDescription, inputDuration: inputDuration, inputSize: inputSize, maximumResolution: options.inputStandardization.maximumResolution.description, nonStandardInputReasons: nonStandardInputReasons.map(\.description), - platformName: device.systemName, - platformVersion: device.systemVersion, + platformName: platformName, + platformVersion: platformVersion, regionCode: regionCode, sdkVersion: Version.versionString, standardizationStartTime: standardizationStartTime, From 48e7424254b480a118c1e58ef5d2f9714eb932a6 Mon Sep 17 00:00:00 2001 From: AJ Lauer Barinov Date: Thu, 3 Aug 2023 13:30:36 -0700 Subject: [PATCH 2/3] Handle simulator case --- .../MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift b/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift index 27ad69c0..aaf475fc 100644 --- a/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift +++ b/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift @@ -29,7 +29,11 @@ fileprivate func inferredPlatformName() -> String { } else if modelName.contains("iphone") { return "iOS" } else { + #if targetEnvironment(simulator) + return "Simulator" + #else return "Unknown" + #endif } } From a1cd942185a6b31c666330009c9e4586c6975790 Mon Sep 17 00:00:00 2001 From: AJ Lauer Barinov Date: Thu, 3 Aug 2023 14:19:46 -0700 Subject: [PATCH 3/3] Report unknown if posix call fails --- Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift b/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift index aaf475fc..1d48317d 100644 --- a/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift +++ b/Sources/MuxUploadSDK/InternalUtilities/Reporting/Reporter.swift @@ -19,7 +19,7 @@ fileprivate func posixModelName() -> String { $0.withMemoryRebound(to: CChar.self, capacity: 1) { ptr in String.init(validatingUTF8: ptr) } - } ?? "" + } ?? "Unknown" } fileprivate func inferredPlatformName() -> String {