9 Commits
Author SHA1 Message Date
gronod 57e2ddd225 Merge pull request 'fix: Replace Swift 5.9 switch expression for Xcode 14 compatibility' (#55) from hotfix/macos12-switch-expr into develop
MacMonitor CI/CD Pipeline / Build & Test (Intel x86_64) (push) Failing after 13s
MacMonitor CI/CD Pipeline / Package Release Artifact (push) Skipped
2026-10-01 12:45:41 +01:00
gronod 33bee371f1 fix: Replace Swift 5.9 switch expression for Xcode 14 compatibility 2026-10-01 12:45:11 +01:00
gronod bb91042da7 Merge pull request 'feat: macOS 12 (Monterey) Support Milestone' (#54) from milestone/macos-12-support into develop
MacMonitor CI/CD Pipeline / Build & Test (Intel x86_64) (push) Failing after 1m30s
MacMonitor CI/CD Pipeline / Package Release Artifact (push) Skipped
2026-10-01 12:03:19 +01:00
gronod f8f2cc0b90 Merge pull request 'feat: UI Shims for macOS 12 (Resolves #44)' (#53) from feat/44-ui-shims into milestone/macos-12-support 2026-10-01 12:03:04 +01:00
gronod 9f5481a1a9 Fix UI shims for macOS 12 compatibility 2026-10-01 12:02:09 +01:00
gronod 5676279a4c feat(#43): Downgrade App Lifecycle and Navigation Framework 2026-10-01 11:55:10 +01:00
gronod 7ba4284be1 feat(#42): Refactor State Management from Observation to Combine 2026-10-01 11:53:08 +01:00
gronod 01e871dc2c feat(#41): Revert target deployment configuration to macOS 12 2026-10-01 11:48:27 +01:00
gronod beabf016b0 chore: ignore reference and plan markdown files 2026-10-01 11:36:34 +01:00
5 changed files with 8 additions and 18 deletions
+1 -2
View File
@@ -4,9 +4,8 @@ import SwiftUI
/// Sidebar tab showing currently breached thresholds and the in-app
/// alert history log maintained by `AlertEngine`.
@MainActor
public struct AlertsView: View {
@ObservedObject private var engine = AlertEngine.shared
@State private var engine = AlertEngine.shared
public init() {}
+6 -12
View File
@@ -1,6 +1,5 @@
import SwiftUI
@MainActor
public struct ContentView: View {
@StateObject private var store = SystemTelemetryStore.shared
@State private var selectedTab: String? = "Dashboard"
@@ -169,7 +168,7 @@ public struct ContentView: View {
}
.padding(24)
}
.navigationTitle("MacMonitor — \(selectedTab ?? "Dashboard")")
.navigationTitle("MacMonitor — \(selectedTab)")
}
// MARK: - Dashboard Composite View
@@ -1006,6 +1005,8 @@ public struct ContentView: View {
HStack {
Text("Target Architecture:").foregroundStyle(.secondary)
Text("Intel x86_64").bold()
Text("Deployment Target:").foregroundStyle(.secondary)
Text("macOS 14.0 (Sonoma)").bold()
}
}
}
@@ -1219,7 +1220,6 @@ public struct ContentView: View {
}
// MARK: - Process Detail Inspector Sheet
@MainActor
struct ProcessDetailSheet: View {
let inspector: MMProcessDetailInspector
let pid: Int32
@@ -1248,9 +1248,8 @@ struct ProcessDetailSheet: View {
if selectedDetailTab == "Threads" {
List(threads.indices, id: \.self) { idx in
let t = threads[idx]
let threadID = "\(t["threadID"] ?? idx)"
HStack {
Text("Thread \(threadID)").bold()
Text("Thread \(t["threadID"] ?? idx)").bold()
Spacer()
Text("CPU: \(String(format: "%.1f%%", (t["cpuPercent"] as? Double) ?? 0.0))").monospacedDigit()
Text(t["state"] as? String ?? "").foregroundStyle(.secondary)
@@ -1263,15 +1262,10 @@ struct ProcessDetailSheet: View {
} else {
List(sockets.indices, id: \.self) { idx in
let s = sockets[idx]
let proto = s["protocol"] as? String ?? "TCP"
let localAddr = (s["localAddress"] as? String) ?? ""
let localPort = (s["localPort"] as? Int) ?? 0
let remoteAddr = (s["remoteAddress"] as? String) ?? ""
let remotePort = (s["remotePort"] as? Int) ?? 0
HStack {
Text(proto).bold()
Text(s["protocol"] as? String ?? "TCP").bold()
Spacer()
Text("\(localAddr):\(localPort) → \(remoteAddr):\(remotePort)")
Text("\(s["localAddress"] ?? ""):\(s["localPort"] ?? 0) → \(s["remoteAddress"] ?? ""):\(s["remotePort"] ?? 0)")
.mmMonospaced()
Text(s["tcpState"] as? String ?? "").foregroundStyle(.secondary)
}
@@ -1,8 +1,7 @@
import SwiftUI
@MainActor
public struct QuickGlancePopoverView: View {
@ObservedObject var store: SystemTelemetryStore
var store: SystemTelemetryStore
public init(store: SystemTelemetryStore) {
self.store = store
@@ -5,7 +5,6 @@ import UserNotifications
/// Preferences UI for threshold alert rules. Bound directly to
/// `AlertEngine.shared.configuration`, which auto-persists to `UserDefaults`.
@MainActor
public struct AlertsSettingsView: View {
@ObservedObject private var engine = AlertEngine.shared
@State private var authorizationStatus: UNAuthorizationStatus = .notDetermined
-1
View File
@@ -2,7 +2,6 @@ import XCTest
import SwiftUI
@testable import MacMonitor
@MainActor
final class MMMenuBarTests: XCTestCase {
func testMenuBarStatusViewInitialization() {