Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RUMM-2197 Improve device and os info in RUM #888

Merged
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

### Changes
* [IMPROVEMENT] Add mobile vitals frequency configuration. See [#876][]
* [IMPROVEMENT] Include the exact model information in RUM `device.model`. See [#888][]

# 1.11.0-rc1 / 18-05-2022

Expand Down
30 changes: 30 additions & 0 deletions Datadog/Datadog.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,10 @@
6167C7952666622800D4CF07 /* LoggingE2EHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6167C7942666622800D4CF07 /* LoggingE2EHelpers.swift */; };
616B6684259CAE3300968EE8 /* DDGlobalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616B6683259CAE3300968EE8 /* DDGlobalTests.swift */; };
616B668E259CC28E00968EE8 /* DDRUMMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616B668D259CC28E00968EE8 /* DDRUMMonitorTests.swift */; };
616C0A9E28573DFF00C13264 /* RUMOperatingSystemInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616C0A9D28573DFF00C13264 /* RUMOperatingSystemInfo.swift */; };
616C0A9F28573DFF00C13264 /* RUMOperatingSystemInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616C0A9D28573DFF00C13264 /* RUMOperatingSystemInfo.swift */; };
616C0AA128573F6300C13264 /* RUMOperatingSystemInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616C0AA028573F6300C13264 /* RUMOperatingSystemInfoTests.swift */; };
616C0AA228573F6300C13264 /* RUMOperatingSystemInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616C0AA028573F6300C13264 /* RUMOperatingSystemInfoTests.swift */; };
616CCE13250A1868009FED46 /* RUMCommandSubscriber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616CCE12250A1868009FED46 /* RUMCommandSubscriber.swift */; };
616CCE16250A467E009FED46 /* RUMInstrumentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616CCE15250A467E009FED46 /* RUMInstrumentation.swift */; };
6170DC1C25C18729003AED5C /* DDCrashReportingPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6170DC1B25C18729003AED5C /* DDCrashReportingPlugin.swift */; };
Expand Down Expand Up @@ -482,6 +486,12 @@
61FC5F3525CC1898006BB4DE /* CrashContextProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FC5F3425CC1898006BB4DE /* CrashContextProviderTests.swift */; };
61FC5F4525CC23C9006BB4DE /* RUMWithCrashContextIntegration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FC5F4425CC23C9006BB4DE /* RUMWithCrashContextIntegration.swift */; };
61FC5F4E25CC2920006BB4DE /* RUMWithCrashContextIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FC5F4D25CC2920006BB4DE /* RUMWithCrashContextIntegrationTests.swift */; };
61FD9FC92851E67100214BD9 /* Sysctl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FD9FC82851E67100214BD9 /* Sysctl.swift */; };
61FD9FCA2851E67100214BD9 /* Sysctl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FD9FC82851E67100214BD9 /* Sysctl.swift */; };
61FD9FCC28533EDF00214BD9 /* RUMDeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FD9FCB28533EDF00214BD9 /* RUMDeviceInfo.swift */; };
61FD9FCD28533EDF00214BD9 /* RUMDeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FD9FCB28533EDF00214BD9 /* RUMDeviceInfo.swift */; };
61FD9FD12853562A00214BD9 /* RUMDeviceInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FD9FCE28534EBD00214BD9 /* RUMDeviceInfoTests.swift */; };
61FD9FD22853562B00214BD9 /* RUMDeviceInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FD9FCE28534EBD00214BD9 /* RUMDeviceInfoTests.swift */; };
61FDBA1326971953001D9D43 /* CrashReportMinifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FDBA1226971953001D9D43 /* CrashReportMinifier.swift */; };
61FDBA15269722B4001D9D43 /* CrashReportMinifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FDBA14269722B4001D9D43 /* CrashReportMinifierTests.swift */; };
61FDBA1726974CA9001D9D43 /* DDCrashReportBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FDBA1626974CA9001D9D43 /* DDCrashReportBuilderTests.swift */; };
Expand Down Expand Up @@ -1442,6 +1452,8 @@
6167C7942666622800D4CF07 /* LoggingE2EHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggingE2EHelpers.swift; sourceTree = "<group>"; };
616B6683259CAE3300968EE8 /* DDGlobalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DDGlobalTests.swift; sourceTree = "<group>"; };
616B668D259CC28E00968EE8 /* DDRUMMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DDRUMMonitorTests.swift; sourceTree = "<group>"; };
616C0A9D28573DFF00C13264 /* RUMOperatingSystemInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMOperatingSystemInfo.swift; sourceTree = "<group>"; };
616C0AA028573F6300C13264 /* RUMOperatingSystemInfoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMOperatingSystemInfoTests.swift; sourceTree = "<group>"; };
616CCE12250A1868009FED46 /* RUMCommandSubscriber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMCommandSubscriber.swift; sourceTree = "<group>"; };
616CCE15250A467E009FED46 /* RUMInstrumentation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMInstrumentation.swift; sourceTree = "<group>"; };
6170DC1B25C18729003AED5C /* DDCrashReportingPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DDCrashReportingPlugin.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1670,6 +1682,9 @@
61FC5F3425CC1898006BB4DE /* CrashContextProviderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashContextProviderTests.swift; sourceTree = "<group>"; };
61FC5F4425CC23C9006BB4DE /* RUMWithCrashContextIntegration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMWithCrashContextIntegration.swift; sourceTree = "<group>"; };
61FC5F4D25CC2920006BB4DE /* RUMWithCrashContextIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMWithCrashContextIntegrationTests.swift; sourceTree = "<group>"; };
61FD9FC82851E67100214BD9 /* Sysctl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sysctl.swift; sourceTree = "<group>"; };
61FD9FCB28533EDF00214BD9 /* RUMDeviceInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMDeviceInfo.swift; sourceTree = "<group>"; };
61FD9FCE28534EBD00214BD9 /* RUMDeviceInfoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMDeviceInfoTests.swift; sourceTree = "<group>"; };
61FDBA1226971953001D9D43 /* CrashReportMinifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReportMinifier.swift; sourceTree = "<group>"; };
61FDBA14269722B4001D9D43 /* CrashReportMinifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReportMinifierTests.swift; sourceTree = "<group>"; };
61FDBA1626974CA9001D9D43 /* DDCrashReportBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DDCrashReportBuilderTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2107,6 +2122,7 @@
61E36A10254B2280001AD6F2 /* LaunchTimeProvider.swift */,
61133BA22423979B00786299 /* CarrierInfoProvider.swift */,
61133BA32423979B00786299 /* MobileDevice.swift */,
61FD9FC82851E67100214BD9 /* Sysctl.swift */,
61133BA42423979B00786299 /* NetworkConnectionInfoProvider.swift */,
61133BA52423979B00786299 /* BatteryStatusProvider.swift */,
9ED6A6B325F2901800CB2E29 /* AppStateListener.swift */,
Expand Down Expand Up @@ -3692,6 +3708,8 @@
61FF281D24B8968D000B3D9B /* RUMEventBuilder.swift */,
61122ED325B1B84D00F9C7F5 /* RUMEventSanitizer.swift */,
614B0A4E24EBDC6B00A2A780 /* RUMConnectivityInfoProvider.swift */,
61FD9FCB28533EDF00214BD9 /* RUMDeviceInfo.swift */,
616C0A9D28573DFF00C13264 /* RUMOperatingSystemInfo.swift */,
);
path = RUMEvent;
sourceTree = "<group>";
Expand Down Expand Up @@ -3877,6 +3895,8 @@
61FF282024B8981D000B3D9B /* RUMEventBuilderTests.swift */,
61122EED25B1D75B00F9C7F5 /* RUMEventSanitizerTests.swift */,
614B0A5024EBDC8000A2A780 /* RUMConnectivityInfoProviderTests.swift */,
61FD9FCE28534EBD00214BD9 /* RUMDeviceInfoTests.swift */,
616C0AA028573F6300C13264 /* RUMOperatingSystemInfoTests.swift */,
);
path = RUMEvent;
sourceTree = "<group>";
Expand Down Expand Up @@ -4981,6 +5001,7 @@
61C5A8A724509FAA00DA608C /* SpanEventBuilder.swift in Sources */,
6179FFD3254ADB1700556A0B /* ObjcAppLaunchHandler.m in Sources */,
F637AED22697404200516F32 /* UIKitRUMUserActionsPredicate.swift in Sources */,
616C0A9E28573DFF00C13264 /* RUMOperatingSystemInfo.swift in Sources */,
61AD4E3824531500006E34EA /* DataFormat.swift in Sources */,
9E58E8E124615C75008E5063 /* JSONEncoder.swift in Sources */,
61133BCA2423979B00786299 /* CodableValue.swift in Sources */,
Expand Down Expand Up @@ -5046,6 +5067,7 @@
61D3E0D6277B23F1008BE766 /* KronosClock.swift in Sources */,
D248ED452807193B00B315B4 /* RUMTelemetry.swift in Sources */,
613E793B2577B6EE00DFCC17 /* DataReader.swift in Sources */,
61FD9FC92851E67100214BD9 /* Sysctl.swift in Sources */,
614B0A5324EBFE5500A2A780 /* DDRUMMonitor.swift in Sources */,
61133BE32423979B00786299 /* UserInfoProvider.swift in Sources */,
9EB4B868275103E40041CD03 /* WebEventBridge.swift in Sources */,
Expand Down Expand Up @@ -5083,6 +5105,7 @@
61D3E0D4277B23F1008BE766 /* KronosTimeStorage.swift in Sources */,
61133BD12423979B00786299 /* FilesOrchestrator.swift in Sources */,
61133BCD2423979B00786299 /* NetworkConnectionInfoProvider.swift in Sources */,
61FD9FCC28533EDF00214BD9 /* RUMDeviceInfo.swift in Sources */,
61FF282424B8A1C3000B3D9B /* RUMEventFileOutput.swift in Sources */,
61B22E5A24F3E6B700DC26D2 /* RUMDebugging.swift in Sources */,
D24C27EA270C8BEE005DE596 /* DataCompression.swift in Sources */,
Expand Down Expand Up @@ -5141,6 +5164,7 @@
D29889C9273413ED00A4D1A9 /* RUMViewsHandlerTests.swift in Sources */,
61C5A8A024509C1100DA608C /* Casting+Tracing.swift in Sources */,
61133C662423990D00786299 /* LogSanitizerTests.swift in Sources */,
616C0AA128573F6300C13264 /* RUMOperatingSystemInfoTests.swift in Sources */,
6114FE23257671F00084E372 /* ConsentAwareDataWriterTests.swift in Sources */,
61410167251A661D00E3C2D9 /* UIApplicationSwizzlerTests.swift in Sources */,
61FF282824B8A31E000B3D9B /* RUMEventMatcher.swift in Sources */,
Expand Down Expand Up @@ -5308,6 +5332,7 @@
6121627C247D220500AC5D67 /* LoggingForTracingAdapterTests.swift in Sources */,
61133C532423990D00786299 /* MobileDeviceTests.swift in Sources */,
61FF282124B8981D000B3D9B /* RUMEventBuilderTests.swift in Sources */,
61FD9FD22853562B00214BD9 /* RUMDeviceInfoTests.swift in Sources */,
61B5E42926DFB60A000B0A5F /* DDConfiguration+apiTests.m in Sources */,
6184751826EFD03400C7C9C5 /* DatadogTestsObserverLoader.m in Sources */,
61345613244756E300E7DA6B /* PerformancePresetTests.swift in Sources */,
Expand Down Expand Up @@ -5606,6 +5631,7 @@
D2CB6E4027C50EAE00A62B57 /* UIViewControllerSwizzler.swift in Sources */,
D2CB6E4127C50EAE00A62B57 /* RUMCurrentContext.swift in Sources */,
D2CB6E4227C50EAE00A62B57 /* RUMConnectivityInfoProvider.swift in Sources */,
61FD9FCA2851E67100214BD9 /* Sysctl.swift in Sources */,
D248ED462807193B00B315B4 /* RUMTelemetry.swift in Sources */,
D2CB6E4327C50EAE00A62B57 /* ObjcExceptionHandler.m in Sources */,
D2CB6E4427C50EAE00A62B57 /* UIApplicationSwizzler.swift in Sources */,
Expand Down Expand Up @@ -5710,12 +5736,14 @@
D2CB6EA727C50EAE00A62B57 /* Versioning.swift in Sources */,
D2CB6EA827C50EAE00A62B57 /* HTTPClient.swift in Sources */,
D2CB6EA927C50EAE00A62B57 /* LogEventMapper.swift in Sources */,
61FD9FCD28533EDF00214BD9 /* RUMDeviceInfo.swift in Sources */,
D2CB6EAA27C50EAE00A62B57 /* URLSessionSwizzler.swift in Sources */,
D2CB6EAB27C50EAE00A62B57 /* VitalMemoryReader.swift in Sources */,
D2CB6EAC27C50EAE00A62B57 /* DatadogConfiguration.swift in Sources */,
D2CB6EAD27C50EAE00A62B57 /* DataProcessor.swift in Sources */,
D2CB6EAE27C50EAE00A62B57 /* DataOrchestrator.swift in Sources */,
D2CB6EAF27C50EAE00A62B57 /* BundleType.swift in Sources */,
616C0A9F28573DFF00C13264 /* RUMOperatingSystemInfo.swift in Sources */,
D2CB6EB027C50EAE00A62B57 /* UIKitRUMViewsPredicate.swift in Sources */,
D2CB6EB127C50EAE00A62B57 /* BatteryStatusProvider.swift in Sources */,
D2CB6EB227C50EAE00A62B57 /* Sampler.swift in Sources */,
Expand Down Expand Up @@ -5756,6 +5784,7 @@
D2CB6ED927C520D400A62B57 /* RUMViewsHandlerTests.swift in Sources */,
D2CB6EDA27C520D400A62B57 /* Casting+Tracing.swift in Sources */,
D2CB6EDB27C520D400A62B57 /* LogSanitizerTests.swift in Sources */,
616C0AA228573F6300C13264 /* RUMOperatingSystemInfoTests.swift in Sources */,
D2CB6EDC27C520D400A62B57 /* ConsentAwareDataWriterTests.swift in Sources */,
D2CB6EDD27C520D400A62B57 /* UIApplicationSwizzlerTests.swift in Sources */,
D2CB6EDE27C520D400A62B57 /* RUMEventMatcher.swift in Sources */,
Expand Down Expand Up @@ -5923,6 +5952,7 @@
D2CB6F8027C520D400A62B57 /* LoggingForTracingAdapterTests.swift in Sources */,
D2CB6F8127C520D400A62B57 /* MobileDeviceTests.swift in Sources */,
D2CB6F8227C520D400A62B57 /* RUMEventBuilderTests.swift in Sources */,
61FD9FD12853562A00214BD9 /* RUMDeviceInfoTests.swift in Sources */,
D2CB6F8327C520D400A62B57 /* DDConfiguration+apiTests.m in Sources */,
D2CB6F8427C520D400A62B57 /* DatadogTestsObserverLoader.m in Sources */,
D2CB6F8527C520D400A62B57 /* PerformancePresetTests.swift in Sources */,
Expand Down
1 change: 1 addition & 0 deletions LICENSE-3rdparty.csv
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ Component,Origin,License,Copyright
import,io.opentracing,MIT,Copyright 2018 LightStep
import,com.Lyft.Kronos,Apache-2.0,Copyright (C) 2016 Lyft Inc. and MobileNativeFoundation
import,PLCrashReporter,MIT,Copyright Microsoft Corporation
import,https://github.com/mattgallagher/CwlUtils,ISC,Copyright (c) Matt Gallagher
import (tools),https://github.com/jpsim/SourceKitten,MIT,Copyright (c) 2014 JP Simard
import (tools),https://github.com/apple/swift-argument-parser,Apache-2.0,(c) 2020 Apple Inc. and the Swift project authors
import (tools),https://github.com/krzysztofzablocki/Difference.git,MIT,Copyright (c) 2017 Krzysztof Zablocki
80 changes: 66 additions & 14 deletions Sources/Datadog/Core/System/MobileDevice.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,19 @@ import UIKit
internal class MobileDevice {
// MARK: - Info

/// Device manufacturer name.
let brand = "Apple"

/// Device marketing name, e.g. "iPhone", "iPad", "iPod touch".
let name: String

/// Device model name, e.g. "iPhone10,1", "iPhone13,2".
let model: String

/// The name of operating system, e.g. "iOS", "iPadOS", "tvOS".
let osName: String

/// The version of the operating system, e.g. "15.4.1".
let osVersion: String

// MARK: - Battery status monitoring
Expand All @@ -37,13 +48,15 @@ internal class MobileDevice {
let currentBatteryStatus: () -> BatteryStatus

init(
name: String,
model: String,
osName: String,
osVersion: String,
enableBatteryStatusMonitoring: @escaping () -> Void,
resetBatteryStatusMonitoring: @escaping () -> Void,
currentBatteryStatus: @escaping () -> BatteryStatus
) {
self.name = name
self.model = model
self.osName = osName
self.osVersion = osVersion
Expand All @@ -53,15 +66,22 @@ internal class MobileDevice {
}

#if os(iOS)
convenience init(uiDevice: UIDevice, processInfo: ProcessInfo, notificationCenter: NotificationCenter) {

convenience init(
model: String,
uiDevice: UIDevice,
processInfo: ProcessInfo,
notificationCenter: NotificationCenter
) {
let wasBatteryMonitoringEnabled = uiDevice.isBatteryMonitoringEnabled

// We capture this `lowPowerModeMonitor` in `currentBatteryStatus` closure so its lifecycle
// is owned and controlled by `MobileDevice` object.
let lowPowerModeMonitor = LowPowerModeMonitor(initialProcessInfo: processInfo, notificationCenter: notificationCenter)

self.init(
model: uiDevice.model,
name: uiDevice.model,
model: model,
osName: uiDevice.systemName,
osVersion: uiDevice.systemVersion,
enableBatteryStatusMonitoring: { uiDevice.isBatteryMonitoringEnabled = true },
Expand All @@ -77,19 +97,25 @@ internal class MobileDevice {
}

convenience init() {
let processInfo = ProcessInfo.processInfo
let device = UIDevice.current

#if !targetEnvironment(simulator)
// Real device
// Real iOS device
self.init(
uiDevice: UIDevice.current,
processInfo: ProcessInfo.processInfo,
model: (try? Sysctl.getModel()) ?? device.model,
uiDevice: device,
processInfo: processInfo,
notificationCenter: .default
)
#else
let model = processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] ?? device.model
// iOS Simulator - battery monitoring doesn't work on Simulator, so return "always OK" value
self.init(
model: UIDevice.current.model,
osName: UIDevice.current.systemName,
osVersion: UIDevice.current.systemVersion,
name: device.model,
model: "\(model) Simulator",
osName: device.systemName,
osVersion: device.systemVersion,
enableBatteryStatusMonitoring: {},
resetBatteryStatusMonitoring: {},
currentBatteryStatus: { BatteryStatus(state: .full, level: 1, isLowPowerModeEnabled: false) }
Expand All @@ -107,22 +133,48 @@ internal class MobileDevice {
}
}

#else
#elseif os(tvOS)

convenience init(
uiDevice: UIDevice = .current,
processInfo: ProcessInfo = .processInfo,
notificationCenter: NotificationCenter = .default
model: String,
uiDevice: UIDevice,
processInfo: ProcessInfo,
notificationCenter: NotificationCenter
) {
// iOS Simulator - battery monitoring doesn't work on tvOS nor Simulator, so return "always OK" value
self.init(
model: uiDevice.model,
name: uiDevice.model,
model: model,
osName: uiDevice.systemName,
osVersion: uiDevice.systemVersion,
// Battery monitoring doesn't work on tvOS, so return "always OK" value:
enableBatteryStatusMonitoring: {},
resetBatteryStatusMonitoring: {},
currentBatteryStatus: { BatteryStatus(state: .full, level: 1, isLowPowerModeEnabled: false) }
)
}

convenience init() {
let processInfo = ProcessInfo.processInfo
let device = UIDevice.current
let model: String

#if !targetEnvironment(simulator)
// Real tvOS device
model = (try? Sysctl.getModel()) ?? device.model
#else
// tvOS Simulator
let simulatorModel = processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] ?? device.model
model = "\(simulatorModel) Simulator"
#endif

self.init(
model: model,
uiDevice: device,
processInfo: processInfo,
notificationCenter: .default
)
}
Comment on lines +156 to +176
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These new initialisers in MobileDevice are added for init consistency on both iOS and tvOS (both define matching init()). This and the entire MobileDevice class should be however a subject to change in V2. Since we added tvOS support, it should no longer be "mobile device" and we should really split its responsibilities. For example, the cohesion of this class is very low - battery reasoning and management is only implemented for iOS and we use mock values for tvOS just to "make it work".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good!


#endif
}

Expand Down
Loading