From 9c02cebdfcaf57aab0d2f596df686fdd9e2ae20a Mon Sep 17 00:00:00 2001 From: Louis Pontoise Date: Tue, 25 Aug 2020 04:27:29 +0900 Subject: [PATCH] fix: rare crash when alt-tab is triggered when the dock isn't running --- src/logic/Applications.swift | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/logic/Applications.swift b/src/logic/Applications.swift index 469a8c9e..11d198f9 100644 --- a/src/logic/Applications.swift +++ b/src/logic/Applications.swift @@ -75,14 +75,15 @@ class Applications { static func refreshBadges() { retryAxCallUntilTimeout { - let axDock = AXUIElementCreateApplication(Applications.list.first { $0.runningApplication.bundleIdentifier == "com.apple.dock" }!.runningApplication.processIdentifier) - let axList = try axDock.children()!.first { try $0.role() == "AXList" }! - let axAppDockItem = try axList.children()!.filter { try $0.subrole() == "AXApplicationDockItem" && ($0.appIsRunning() ?? false) } - try Applications.list.forEach { app in - if app.runningApplication.activationPolicy == .regular, - let bundleId = app.runningApplication.bundleIdentifier, - let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: bundleId) { - app.dockLabel = try axAppDockItem.first { try $0.attribute(kAXURLAttribute, URL.self) == url }?.attribute(kAXStatusLabelAttribute, String.self) + if let dockPid = (Applications.list.first { $0.runningApplication.bundleIdentifier == "com.apple.dock" }?.runningApplication.processIdentifier), + let axList = (try AXUIElementCreateApplication(dockPid).children()?.first { try $0.role() == "AXList" }), + let axAppDockItem = (try axList.children()?.filter { try $0.subrole() == "AXApplicationDockItem" && ($0.appIsRunning() ?? false) }) { + try Applications.list.forEach { app in + if app.runningApplication.activationPolicy == .regular, + let bundleId = app.runningApplication.bundleIdentifier, + let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: bundleId) { + app.dockLabel = try axAppDockItem.first { try $0.attribute(kAXURLAttribute, URL.self) == url }?.attribute(kAXStatusLabelAttribute, String.self) + } } } }