From a14d02e20f985f86f0b0510234d40a30e0053153 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 23 Jun 2025 18:36:20 +0200 Subject: [PATCH] Fixes a crash triggered by test telemetry --- .../Core/Managers/DockIconManager.swift | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/mac/VibeTunnel/Core/Managers/DockIconManager.swift b/mac/VibeTunnel/Core/Managers/DockIconManager.swift index 1cb4cb58..242e362c 100644 --- a/mac/VibeTunnel/Core/Managers/DockIconManager.swift +++ b/mac/VibeTunnel/Core/Managers/DockIconManager.swift @@ -9,10 +9,21 @@ import OSLog /// is set to hide the dock icon. @MainActor final class DockIconManager: NSObject { - private static let _shared = DockIconManager() + private static var _shared: DockIconManager! - static var shared: DockIconManager { - _shared + /// Initialize the shared instance on the main thread. + /// Must be called once during app startup before accessing shared. + @MainActor + static func initialize() { + precondition(Thread.isMainThread, "DockIconManager must be initialized on main thread") + precondition(_shared == nil, "DockIconManager.initialize() called multiple times") + _shared = DockIconManager() + } + + /// Access the shared instance. Requires initialize() to be called first. + nonisolated static var shared: DockIconManager { + precondition(_shared != nil, "DockIconManager.initialize() must be called before accessing shared") + return MainActor.assumeIsolated { _shared } } private var windowsObservation: NSKeyValueObservation?