From 0f03dccc07be8acfee18c4c474bddaadc69f206f Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Sun, 22 Feb 2026 15:52:36 +0100 Subject: [PATCH] feat: changed minimum macOS version to macOS 11.15 (Big Sur) --- Kit/Widgets/Stack.swift | 4 +-- Kit/constants.swift | 8 +---- Kit/extensions.swift | 14 ++------ Kit/helpers.swift | 9 +++-- Kit/module/module.swift | 4 +-- Kit/module/settings.swift | 14 ++------ Kit/types.swift | 4 +-- LaunchAtLogin/main.swift | 6 ++-- Modules/Bluetooth/readers.swift | 2 -- Modules/CPU/main.swift | 10 +++--- Modules/CPU/widget.swift | 1 - Modules/Clock/popup.swift | 16 ++------- Modules/Clock/settings.swift | 16 ++------- Modules/Disk/main.swift | 10 +++--- Modules/Disk/widget.swift | 1 - Modules/GPU/main.swift | 10 +++--- Modules/GPU/widget.swift | 1 - Modules/Net/main.swift | 8 ++--- Modules/Net/readers.swift | 44 ++++++++++-------------- Modules/Net/widget.swift | 1 - Modules/RAM/main.swift | 10 +++--- Modules/RAM/widget.swift | 1 - Modules/Sensors/popup.swift | 8 ++--- README.md | 2 +- Stats.xcodeproj/project.pbxproj | 60 ++++++++++++++++----------------- Stats/Views/Settings.swift | 53 ++++------------------------- Widgets/UnitedWidget.swift | 1 - 27 files changed, 99 insertions(+), 219 deletions(-) diff --git a/Kit/Widgets/Stack.swift b/Kit/Widgets/Stack.swift index 7c908e7b..8af4da22 100644 --- a/Kit/Widgets/Stack.swift +++ b/Kit/Widgets/Stack.swift @@ -347,9 +347,7 @@ private class OrderTableView: NSView, NSTableViewDelegate, NSTableViewDataSource self.tableView.registerForDraggedTypes([dragDropType]) self.tableView.gridColor = .gridColor self.tableView.gridStyleMask = [.solidVerticalGridLineMask, .solidHorizontalGridLineMask] - if #available(macOS 11.0, *) { - self.tableView.style = .plain - } + self.tableView.style = .plain self.tableView.addTableColumn(NSTableColumn(identifier: NSUserInterfaceItemIdentifier(rawValue: "name"))) diff --git a/Kit/constants.swift b/Kit/constants.swift index 9ce1f6d6..86644eac 100644 --- a/Kit/constants.swift +++ b/Kit/constants.swift @@ -37,13 +37,7 @@ public struct Widget_c_s { } } public var margin: CGPoint { - get { - var point: CGPoint = CGPoint(x: 2, y: 2) - if #available(macOS 11.0, *) { - point.x = 0 - } - return point - } + get { CGPoint(x: 0, y: 2) } } public let spacing: CGFloat = 2 } diff --git a/Kit/extensions.swift b/Kit/extensions.swift index 4e97a138..e9fdab40 100644 --- a/Kit/extensions.swift +++ b/Kit/extensions.swift @@ -597,18 +597,8 @@ extension CGFloat { public class KeyboardShartcutView: NSStackView { private let callback: (_ value: [UInt16]) -> Void - private var startIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "record.circle", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("record"))! - } - private var stopIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "stop.circle.fill", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("stop"))! - } + private var startIcon: NSImage { iconFromSymbol(name: "record.circle", scale: .large) } + private var stopIcon: NSImage { iconFromSymbol(name: "stop.circle.fill", scale: .large) } private var valueField: NSTextField? = nil private var startButton: NSButton? = nil diff --git a/Kit/helpers.swift b/Kit/helpers.swift index ca147654..af3a6de1 100644 --- a/Kit/helpers.swift +++ b/Kit/helpers.swift @@ -1211,13 +1211,12 @@ public func controlState(_ sender: NSControl) -> Bool { return state == .on } -@available(macOS 11.0, *) -public func iconFromSymbol(name: String, scale: NSImage.SymbolScale) -> NSImage? { +public func iconFromSymbol(name: String, scale: NSImage.SymbolScale) -> NSImage { let config = NSImage.SymbolConfiguration(textStyle: .body, scale: scale) - if let symbol = NSImage(systemSymbolName: name, accessibilityDescription: nil) { - return symbol.withSymbolConfiguration(config) + if let symbol = NSImage(systemSymbolName: name, accessibilityDescription: nil), let icon = symbol.withSymbolConfiguration(config) { + return icon } - return nil + return NSImage() } public func showAlert(_ message: String, _ information: String? = nil, _ style: NSAlert.Style = .informational) { diff --git a/Kit/module/module.swift b/Kit/module/module.swift index a630ad90..684c4da4 100644 --- a/Kit/module/module.swift +++ b/Kit/module/module.swift @@ -28,10 +28,10 @@ public struct module_c { if let state = dict["State"] as? Bool { self.defaultState = state } - if let symbol = dict["Symbol"] as? String, #available(macOS 11.0, *) { + if let symbol = dict["Symbol"] as? String { self.icon = NSImage(systemSymbolName: symbol, accessibilityDescription: nil) } - if self.icon == nil, #available(macOS 11.0, *), let symbol = dict["AlternativeSymbol"] as? String { + if self.icon == nil, let symbol = dict["AlternativeSymbol"] as? String { self.icon = NSImage(systemSymbolName: symbol, accessibilityDescription: nil) } diff --git a/Kit/module/settings.swift b/Kit/module/settings.swift index 0ef52b78..88a4c59c 100644 --- a/Kit/module/settings.swift +++ b/Kit/module/settings.swift @@ -678,18 +678,8 @@ private class ButtonSelectorView: NSStackView { return view }() - private var settingsIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "gear", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("settings"))! - } - private var previewIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "command", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("chart"))! - } + private var settingsIcon: NSImage { iconFromSymbol(name: "gear", scale: .large) } + private var previewIcon: NSImage { iconFromSymbol(name: "command", scale: .large) } private var button: NSButton? = nil private var isSettingsEnabled: Bool = false diff --git a/Kit/types.swift b/Kit/types.swift index bc4e3d45..2028ea75 100644 --- a/Kit/types.swift +++ b/Kit/types.swift @@ -32,11 +32,11 @@ public struct ColorValue: Equatable { self.color = color } - // swiftlint:disable operator_whitespace + // swiftlint:disable function_name_whitespace public static func ==(lhs: ColorValue, rhs: ColorValue) -> Bool { return lhs.value == rhs.value } - // swiftlint:enable operator_whitespace + // swiftlint:enable function_name_whitespace } public enum AppUpdateInterval: String { diff --git a/LaunchAtLogin/main.swift b/LaunchAtLogin/main.swift index d4fc1bd1..9e63f261 100644 --- a/LaunchAtLogin/main.swift +++ b/LaunchAtLogin/main.swift @@ -17,9 +17,9 @@ func main() { let pathComponents = (Bundle.main.bundlePath as NSString).pathComponents let mainPath = NSString.path(withComponents: Array(pathComponents[0...(pathComponents.count - 5)])) - NSWorkspace.shared.launchApplication(mainPath) - - exit(0) + NSWorkspace.shared.openApplication(at: NSURL.fileURL(withPath: mainPath), configuration: NSWorkspace.OpenConfiguration(), completionHandler: { _, _ in + exit(0) + }) } main() diff --git a/Modules/Bluetooth/readers.swift b/Modules/Bluetooth/readers.swift index e2afc5d1..e324d769 100644 --- a/Modules/Bluetooth/readers.swift +++ b/Modules/Bluetooth/readers.swift @@ -225,8 +225,6 @@ internal class DevicesReader: Reader<[BLEDevice]>, CBCentralManagerDelegate, CBP // MARK: - system_profiler private func profilerDevices() -> ([bleDevice], [String]) { - if #unavailable(macOS 11) { return ([], []) } - guard let res = process(path: "/usr/sbin/system_profiler", arguments: ["SPBluetoothDataType", "-json"]) else { return ([], []) } diff --git a/Modules/CPU/main.swift b/Modules/CPU/main.swift index 5ffa333c..8e7a288a 100644 --- a/Modules/CPU/main.swift +++ b/Modules/CPU/main.swift @@ -238,13 +238,11 @@ public class CPU: Module { } if self.systemWidgetsUpdatesState { - if #available(macOS 11.0, *) { - if isWidgetActive(self.userDefaults, [CPU_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(value) { - self.userDefaults?.set(blobData, forKey: "CPU@LoadReader") - } - WidgetCenter.shared.reloadTimelines(ofKind: CPU_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") + if isWidgetActive(self.userDefaults, [CPU_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(value) { + self.userDefaults?.set(blobData, forKey: "CPU@LoadReader") } + WidgetCenter.shared.reloadTimelines(ofKind: CPU_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } } diff --git a/Modules/CPU/widget.swift b/Modules/CPU/widget.swift index 2d8026af..338f37f5 100644 --- a/Modules/CPU/widget.swift +++ b/Modules/CPU/widget.swift @@ -24,7 +24,6 @@ public struct CPU_entry: TimelineEntry { public var value: CPU_Load? = nil } -@available(macOS 11.0, *) public struct Provider: TimelineProvider { public typealias Entry = CPU_entry diff --git a/Modules/Clock/popup.swift b/Modules/Clock/popup.swift index 35313324..76d45c2e 100644 --- a/Modules/Clock/popup.swift +++ b/Modules/Clock/popup.swift @@ -277,11 +277,7 @@ private class CalendarView: NSStackView { prev.bezelStyle = .regularSquare prev.translatesAutoresizingMaskIntoConstraints = false prev.imageScaling = .scaleNone - if #available(macOS 11.0, *) { - prev.image = iconFromSymbol(name: "arrow.left", scale: .medium)! - } else { - prev.title = "<" - } + prev.image = iconFromSymbol(name: "arrow.left", scale: .medium) prev.contentTintColor = .labelColor prev.isBordered = false prev.action = #selector(self.prevMonth) @@ -293,11 +289,7 @@ private class CalendarView: NSStackView { next.bezelStyle = .regularSquare next.translatesAutoresizingMaskIntoConstraints = false next.imageScaling = .scaleNone - if #available(macOS 11.0, *) { - next.image = iconFromSymbol(name: "arrow.right", scale: .medium)! - } else { - next.title = ">" - } + next.image = iconFromSymbol(name: "arrow.right", scale: .medium) next.contentTintColor = .labelColor next.isBordered = false next.action = #selector(self.nextMonth) @@ -719,9 +711,7 @@ private class OrderTableView: NSView, NSTableViewDelegate, NSTableViewDataSource self.tableView.registerForDraggedTypes([dragDropType]) self.tableView.gridColor = .gridColor self.tableView.gridStyleMask = [.solidVerticalGridLineMask, .solidHorizontalGridLineMask] - if #available(macOS 11.0, *) { - self.tableView.style = .plain - } + self.tableView.style = .plain let nameColumn = NSTableColumn(identifier: nameColumnID) nameColumn.headerCell.title = localizedString("Name") diff --git a/Modules/Clock/settings.swift b/Modules/Clock/settings.swift index a09bae25..47410c44 100644 --- a/Modules/Clock/settings.swift +++ b/Modules/Clock/settings.swift @@ -83,9 +83,7 @@ internal class Settings: NSStackView, Settings_v, NSTableViewDelegate, NSTableVi self.tableView.allowsColumnResizing = false self.tableView.gridStyleMask = [.solidVerticalGridLineMask, .solidHorizontalGridLineMask] self.tableView.usesAlternatingRowBackgroundColors = true - if #available(macOS 11.0, *) { - self.tableView.style = .plain - } + self.tableView.style = .plain self.tableView.rowHeight = 32 let nameColumn = NSTableColumn(identifier: nameColumnID) @@ -140,11 +138,7 @@ internal class Settings: NSStackView, Settings_v, NSTableViewDelegate, NSTableVi btn.widthAnchor.constraint(equalToConstant: 27).isActive = true btn.heightAnchor.constraint(equalToConstant: 27).isActive = true btn.bezelStyle = .rounded - if #available(macOS 11.0, *) { - btn.image = iconFromSymbol(name: "plus", scale: .medium) - } else { - btn.title = localizedString("Add") - } + btn.image = iconFromSymbol(name: "plus", scale: .medium) btn.action = #selector(self.addNewClock) btn.target = self btn.toolTip = localizedString("Add new clock") @@ -156,11 +150,7 @@ internal class Settings: NSStackView, Settings_v, NSTableViewDelegate, NSTableVi btn.widthAnchor.constraint(equalToConstant: 27).isActive = true btn.heightAnchor.constraint(equalToConstant: 27).isActive = true btn.bezelStyle = .rounded - if #available(macOS 11.0, *) { - btn.image = iconFromSymbol(name: "minus", scale: .medium) - } else { - btn.title = localizedString("Delete") - } + btn.image = iconFromSymbol(name: "minus", scale: .medium) btn.action = #selector(self.deleteClock) btn.target = self btn.toolTip = localizedString("Delete selected clock") diff --git a/Modules/Disk/main.swift b/Modules/Disk/main.swift index 0f1ba66a..9fb4d28d 100644 --- a/Modules/Disk/main.swift +++ b/Modules/Disk/main.swift @@ -339,13 +339,11 @@ public class Disk: Module { } if self.systemWidgetsUpdatesState { - if #available(macOS 11.0, *) { - if isWidgetActive(self.userDefaults, [Disk_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(d) { - self.userDefaults?.set(blobData, forKey: "Disk@CapacityReader") - } - WidgetCenter.shared.reloadTimelines(ofKind: Disk_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") + if isWidgetActive(self.userDefaults, [Disk_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(d) { + self.userDefaults?.set(blobData, forKey: "Disk@CapacityReader") } + WidgetCenter.shared.reloadTimelines(ofKind: Disk_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } diff --git a/Modules/Disk/widget.swift b/Modules/Disk/widget.swift index 123302a4..c149a7de 100644 --- a/Modules/Disk/widget.swift +++ b/Modules/Disk/widget.swift @@ -24,7 +24,6 @@ public struct Disk_entry: TimelineEntry { public var value: drive? = nil } -@available(macOS 11.0, *) public struct Provider: TimelineProvider { public typealias Entry = Disk_entry diff --git a/Modules/GPU/main.swift b/Modules/GPU/main.swift index 2cbcf14a..75059ecb 100644 --- a/Modules/GPU/main.swift +++ b/Modules/GPU/main.swift @@ -194,13 +194,11 @@ public class GPU: Module { } if self.systemWidgetsUpdatesState { - if #available(macOS 11.0, *) { - if isWidgetActive(self.userDefaults, [GPU_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(selectedGPU) { - self.userDefaults?.set(blobData, forKey: "GPU@InfoReader") - } - WidgetCenter.shared.reloadTimelines(ofKind: GPU_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") + if isWidgetActive(self.userDefaults, [GPU_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(selectedGPU) { + self.userDefaults?.set(blobData, forKey: "GPU@InfoReader") } + WidgetCenter.shared.reloadTimelines(ofKind: GPU_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } } diff --git a/Modules/GPU/widget.swift b/Modules/GPU/widget.swift index e52a437f..b33760b7 100644 --- a/Modules/GPU/widget.swift +++ b/Modules/GPU/widget.swift @@ -24,7 +24,6 @@ public struct GPU_entry: TimelineEntry { public var value: GPU_Info? = nil } -@available(macOS 11.0, *) public struct Provider: TimelineProvider { public typealias Entry = GPU_entry diff --git a/Modules/Net/main.swift b/Modules/Net/main.swift index e71094e7..60be30f5 100644 --- a/Modules/Net/main.swift +++ b/Modules/Net/main.swift @@ -335,12 +335,10 @@ public class Network: Module { } if self.systemWidgetsUpdatesState { - if #available(macOS 11.0, *) { - if isWidgetActive(self.userDefaults, [Network_entry.kind]), let blobData = try? JSONEncoder().encode(raw) { - self.userDefaults?.set(blobData, forKey: "Network@UsageReader") - } - WidgetCenter.shared.reloadTimelines(ofKind: Network_entry.kind) + if isWidgetActive(self.userDefaults, [Network_entry.kind]), let blobData = try? JSONEncoder().encode(raw) { + self.userDefaults?.set(blobData, forKey: "Network@UsageReader") } + WidgetCenter.shared.reloadTimelines(ofKind: Network_entry.kind) } } diff --git a/Modules/Net/readers.swift b/Modules/Net/readers.swift index c9af6487..d3b07cf1 100644 --- a/Modules/Net/readers.swift +++ b/Modules/Net/readers.swift @@ -398,35 +398,25 @@ internal class UsageReader: Reader, CWEventDelegate { } if self.usage.wifiDetails.ssid == nil || self.usage.wifiDetails.ssid == "" { - if #available(macOS 15, *) { - guard let res = process(path: "/usr/sbin/system_profiler", arguments: ["SPAirPortDataType", "-json"]) else { - return - } - do { - if let json = try JSONSerialization.jsonObject(with: Data(res.utf8), options: []) as? [String: Any] { - if let arr = json["SPAirPortDataType"] as? [[String: Any]], - let airport = arr.first(where: { $0["spairport_airport_interfaces"] != nil }), - let interfaces = airport["spairport_airport_interfaces"] as? [[String: Any]], - let interface = interfaces.first(where: { $0["_name"] as? String == self.interfaceID }), - let obj = interface["spairport_current_network_information"] as? [String: Any] { - - self.usage.wifiDetails.ssid = obj["_name"] as? String - self.usage.wifiDetails.countryCode = obj["spairport_network_country_code"] as? String - self.usage.wifiDetails.standard = obj["spairport_network_phymode"] as? String - } - } - } catch let err as NSError { - error("error to parse system_profiler SPAirPortDataType: \(err.localizedDescription)") - return - } - } else { - let networksetupResponse = syncShell("networksetup -getairportnetwork \(self.interfaceID)") - if networksetupResponse.split(separator: "\n").count == 1 { - let arr = networksetupResponse.split(separator: ":") - if let ssid = arr.last { - self.usage.wifiDetails.ssid = ssid.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + guard let res = process(path: "/usr/sbin/system_profiler", arguments: ["SPAirPortDataType", "-json"]) else { + return + } + do { + if let json = try JSONSerialization.jsonObject(with: Data(res.utf8), options: []) as? [String: Any] { + if let arr = json["SPAirPortDataType"] as? [[String: Any]], + let airport = arr.first(where: { $0["spairport_airport_interfaces"] != nil }), + let interfaces = airport["spairport_airport_interfaces"] as? [[String: Any]], + let interface = interfaces.first(where: { $0["_name"] as? String == self.interfaceID }), + let obj = interface["spairport_current_network_information"] as? [String: Any] { + + self.usage.wifiDetails.ssid = obj["_name"] as? String + self.usage.wifiDetails.countryCode = obj["spairport_network_country_code"] as? String + self.usage.wifiDetails.standard = obj["spairport_network_phymode"] as? String } } + } catch let err as NSError { + error("error to parse system_profiler SPAirPortDataType: \(err.localizedDescription)") + return } } } diff --git a/Modules/Net/widget.swift b/Modules/Net/widget.swift index a58ce74e..d7e02e61 100644 --- a/Modules/Net/widget.swift +++ b/Modules/Net/widget.swift @@ -29,7 +29,6 @@ public struct Network_entry: TimelineEntry { public var value: Network_Usage? = nil } -@available(macOS 11.0, *) public struct Provider: TimelineProvider { public typealias Entry = Network_entry diff --git a/Modules/RAM/main.swift b/Modules/RAM/main.swift index ae0160f4..ef8382b3 100644 --- a/Modules/RAM/main.swift +++ b/Modules/RAM/main.swift @@ -237,13 +237,11 @@ public class RAM: Module { } if self.systemWidgetsUpdatesState { - if #available(macOS 11.0, *) { - if isWidgetActive(self.userDefaults, [RAM_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(value) { - self.userDefaults?.set(blobData, forKey: "RAM@UsageReader") - } - WidgetCenter.shared.reloadTimelines(ofKind: RAM_entry.kind) - WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") + if isWidgetActive(self.userDefaults, [RAM_entry.kind, "UnitedWidget"]), let blobData = try? JSONEncoder().encode(value) { + self.userDefaults?.set(blobData, forKey: "RAM@UsageReader") } + WidgetCenter.shared.reloadTimelines(ofKind: RAM_entry.kind) + WidgetCenter.shared.reloadTimelines(ofKind: "UnitedWidget") } } } diff --git a/Modules/RAM/widget.swift b/Modules/RAM/widget.swift index 445e9cdd..0708acce 100644 --- a/Modules/RAM/widget.swift +++ b/Modules/RAM/widget.swift @@ -40,7 +40,6 @@ public struct RAM_entry: TimelineEntry { public var value: RAM_Usage? = nil } -@available(macOS 11.0, *) public struct Provider: TimelineProvider { public typealias Entry = RAM_entry diff --git a/Modules/Sensors/popup.swift b/Modules/Sensors/popup.swift index dace08b6..63a24730 100644 --- a/Modules/Sensors/popup.swift +++ b/Modules/Sensors/popup.swift @@ -1005,12 +1005,8 @@ private class ModeButtons: NSStackView { var turboIcon: NSImage = NSImage(named: NSImage.Name("ac_unit"))! var offIcon: NSImage = NSImage(named: NSImage.Name("ac_unit"))! if #available(macOS 12.0, *) { - if let icon = iconFromSymbol(name: "snowflake", scale: .large) { - turboIcon = icon - } - if let icon = iconFromSymbol(name: "fanblades.slash", scale: .medium) { - offIcon = icon - } + turboIcon = iconFromSymbol(name: "snowflake", scale: .large) + offIcon = iconFromSymbol(name: "fanblades.slash", scale: .medium) } self.offBtn = NSButton(image: offIcon, target: nil, action: #selector(offMode)) diff --git a/README.md b/README.md index 1bd35cff..e969d04a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ brew install stats Legacy version for older systems could be found [here](https://mac-stats.com/downloads). ## Requirements -Stats is supported on the released macOS version starting from macOS 10.15 (Catalina). +Stats is supported on the released macOS version starting from macOS 11.15 (Big Sur). ## Features Stats is an application that allows you to monitor your macOS system. diff --git a/Stats.xcodeproj/project.pbxproj b/Stats.xcodeproj/project.pbxproj index 47251ad6..8f1bdf52 100644 --- a/Stats.xcodeproj/project.pbxproj +++ b/Stats.xcodeproj/project.pbxproj @@ -2450,7 +2450,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Clock; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -2488,7 +2488,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Clock; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -2590,7 +2590,7 @@ "DEVELOPMENT_TEAM[sdk=macosx*]" = RP2S87B72W; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/SMC/Helper/Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0.1; "OTHER_LDFLAGS[arch=*]" = ( "-sectcreate", @@ -2622,7 +2622,7 @@ "DEVELOPMENT_TEAM[sdk=macosx*]" = RP2S87B72W; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/SMC/Helper/Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0.1; "OTHER_LDFLAGS[arch=*]" = ( "-sectcreate", @@ -2664,7 +2664,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Bluetooth; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2698,7 +2698,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Bluetooth; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2866,7 +2866,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 2.11.67; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats; @@ -2903,7 +2903,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 2.11.67; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats; @@ -2937,7 +2937,7 @@ "@loader_path/Frameworks", ); LIBRARY_SEARCH_PATHS = "$(SRCROOT)/Kit/lldb"; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0; OTHER_LDFLAGS = "-w"; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Kit; @@ -2974,7 +2974,7 @@ "@loader_path/Frameworks", ); LIBRARY_SEARCH_PATHS = "$(SRCROOT)/Kit/lldb"; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0; OTHER_LDFLAGS = "-w"; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Kit; @@ -3007,7 +3007,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.LaunchAtLogin; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3036,7 +3036,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.LaunchAtLogin; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3067,7 +3067,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Net; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3101,7 +3101,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Net; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3134,7 +3134,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.RAM; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3168,7 +3168,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.RAM; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3201,7 +3201,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.GPU; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -3236,7 +3236,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.GPU; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -3274,7 +3274,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; OTHER_LDFLAGS = "-ObjC"; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.CPU; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -3315,7 +3315,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; OTHER_LDFLAGS = "-ObjC"; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.CPU; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -3344,7 +3344,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = io.serhiy.Stats.Tests; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3368,7 +3368,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = io.serhiy.Stats.Tests; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3399,7 +3399,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Battery; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3433,7 +3433,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Battery; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3457,7 +3457,7 @@ "DEVELOPMENT_TEAM[sdk=macosx*]" = RP2S87B72W; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/SMC/Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0.0; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.SMC; @@ -3481,7 +3481,7 @@ "DEVELOPMENT_TEAM[sdk=macosx*]" = RP2S87B72W; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "$(SRCROOT)/SMC/Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; MARKETING_VERSION = 1.0.0; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.SMC; @@ -3514,7 +3514,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Sensors; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3549,7 +3549,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Sensors; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3584,7 +3584,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Disk; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3620,7 +3620,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.5; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats.Disk; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Stats/Views/Settings.swift b/Stats/Views/Settings.swift index d48972c7..58cf46f1 100644 --- a/Stats/Views/Settings.swift +++ b/Stats/Views/Settings.swift @@ -280,49 +280,13 @@ private class SidebarView: NSStackView { set { Store.shared.set(key: "pause", value: newValue) } } - private var dashboardIcon: NSImage { - if #available(macOS 11.0, *), let icon = NSImage(systemSymbolName: "circle.grid.3x3.fill", accessibilityDescription: nil) { - return icon - } - return NSImage(named: NSImage.Name("apps"))! - } - private var settingsIcon: NSImage { - if #available(macOS 11.0, *), let icon = iconFromSymbol(name: "gear", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("settings"))! - } - - private var bugIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "ladybug", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("bug"))! - } - private var supportIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "heart.fill", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("donate"))! - } - private var pauseIcon: NSImage { - if #available(macOS 11.0, *), let icon = iconFromSymbol(name: "pause.fill", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("pause"))! - } - private var resumeIcon: NSImage { - if #available(macOS 11.0, *), let icon = iconFromSymbol(name: "play.fill", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("resume"))! - } - private var closeIcon: NSImage { - if #available(macOS 12.0, *), let icon = iconFromSymbol(name: "power", scale: .large) { - return icon - } - return NSImage(named: NSImage.Name("power"))! - } + private var dashboardIcon: NSImage { NSImage(systemSymbolName: "circle.grid.3x3.fill", accessibilityDescription: nil)! } + private var settingsIcon: NSImage { iconFromSymbol(name: "gear", scale: .large) } + private var bugIcon: NSImage { iconFromSymbol(name: "ladybug", scale: .large) } + private var supportIcon: NSImage { iconFromSymbol(name: "heart.fill", scale: .large) } + private var pauseIcon: NSImage { iconFromSymbol(name: "pause.fill", scale: .large) } + private var resumeIcon: NSImage { iconFromSymbol(name: "play.fill", scale: .large) } + private var closeIcon: NSImage { iconFromSymbol(name: "power", scale: .large) } override init(frame: NSRect) { self.scrollView = ScrollableStackView(frame: NSRect(x: 0, y: 0, width: frame.width, height: frame.height)) @@ -362,9 +326,6 @@ private class SidebarView: NSStackView { let emptySpace = NSView() emptySpace.heightAnchor.constraint(equalToConstant: 28).isActive = true - if #unavailable(macOS 11) { - self.addArrangedSubview(emptySpace) - } self.addArrangedSubview(self.scrollView) self.addArrangedSubview(additionalButtons) diff --git a/Widgets/UnitedWidget.swift b/Widgets/UnitedWidget.swift index ec239ff0..0f6f49a7 100644 --- a/Widgets/UnitedWidget.swift +++ b/Widgets/UnitedWidget.swift @@ -38,7 +38,6 @@ public struct United_entry: TimelineEntry { public var disk: Value? = nil } -@available(macOS 11.0, *) public struct Provider: TimelineProvider { public typealias Entry = United_entry