Skip to content

Commit 84fc894

Browse files
committed
Make runningApplication private
1 parent aabd765 commit 84fc894

File tree

5 files changed

+42
-15
lines changed

5 files changed

+42
-15
lines changed

Core/Sources/SuggestionWidget/FeatureReducers/WidgetFeature.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,10 @@ public struct WidgetFeature: ReducerProtocol {
238238

239239
case .observeActiveApplicationChange:
240240
return .run { send in
241-
let stream = AsyncStream<NSRunningApplication> { continuation in
241+
let stream = AsyncStream<AppInstanceInspector> { continuation in
242242
let cancellable = xcodeInspector.$activeApplication.sink { newValue in
243243
guard let newValue else { return }
244-
continuation.yield(newValue.runningApplication)
244+
continuation.yield(newValue)
245245
}
246246
continuation.onTermination = { _ in
247247
cancellable.cancel()
@@ -293,7 +293,7 @@ public struct WidgetFeature: ReducerProtocol {
293293
guard let activeXcode = xcodeInspector.activeXcode else { continue }
294294
guard await windows.fullscreenDetector.isOnActiveSpace else { continue }
295295
let app = AXUIElementCreateApplication(
296-
activeXcode.runningApplication.processIdentifier
296+
activeXcode.processIdentifier
297297
)
298298
if let _ = app.focusedWindow {
299299
await windows.orderFront()
@@ -538,7 +538,7 @@ public struct WidgetFeature: ReducerProtocol {
538538
let task = Task { @MainActor in
539539
if let activeApp, activeApp.isXcode {
540540
let application = AXUIElementCreateApplication(
541-
activeApp.runningApplication.processIdentifier
541+
activeApp.processIdentifier
542542
)
543543
/// We need this to hide the windows when Xcode is minimized.
544544
let noFocus = application.focusedWindow == nil

ExtensionService/AppDelegate+Menu.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ extension AppDelegate: NSMenuDelegate {
164164

165165
for xcode in inspector.xcodes {
166166
let item = NSMenuItem(
167-
title: "Xcode \(xcode.runningApplication.processIdentifier)",
167+
title: "Xcode \(xcode.processIdentifier)",
168168
action: nil,
169169
keyEquivalent: ""
170170
)

Tool/Sources/AppActivator/AppActivator.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ public extension NSWorkspace {
3131
Task { @MainActor in
3232
guard let app = XcodeInspector.shared.previousActiveApplication else { return }
3333
try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))
34-
app.runningApplication.activate()
34+
app.activate()
3535
}
3636
}
3737

3838
static func activatePreviousActiveXcode(delay: TimeInterval = 0.2) {
3939
Task { @MainActor in
4040
guard let app = XcodeInspector.shared.latestActiveXcode else { return }
4141
try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))
42-
app.runningApplication.activate()
42+
app.activate()
4343
}
4444
}
4545
}

Tool/Sources/XcodeInspector/AppInstanceInspector.swift

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,43 @@ import AppKit
22
import Foundation
33

44
public class AppInstanceInspector: ObservableObject {
5+
let runningApplication: NSRunningApplication
6+
public let processIdentifier: pid_t
7+
public let bundleURL: URL?
8+
public let bundleIdentifier: String?
9+
510
public var appElement: AXUIElement {
6-
AXUIElementCreateApplication(runningApplication.processIdentifier)
11+
return AXUIElementCreateApplication(runningApplication.processIdentifier)
12+
}
13+
14+
public var isTerminated: Bool {
15+
return runningApplication.isTerminated
16+
}
17+
18+
public var isActive: Bool {
19+
guard !runningApplication.isTerminated else { return false }
20+
return runningApplication.isActive
21+
}
22+
23+
public var isXcode: Bool {
24+
guard !runningApplication.isTerminated else { return false }
25+
return runningApplication.isXcode
26+
}
27+
28+
public var isExtensionService: Bool {
29+
guard !runningApplication.isTerminated else { return false }
30+
return runningApplication.isCopilotForXcodeExtensionService
31+
}
32+
33+
public func activate() -> Bool {
34+
return runningApplication.activate()
735
}
8-
public let runningApplication: NSRunningApplication
9-
public var isActive: Bool { runningApplication.isActive }
10-
public var isXcode: Bool { runningApplication.isXcode }
11-
public var isExtensionService: Bool { runningApplication.isCopilotForXcodeExtensionService }
1236

1337
init(runningApplication: NSRunningApplication) {
1438
self.runningApplication = runningApplication
39+
processIdentifier = runningApplication.processIdentifier
40+
bundleURL = runningApplication.bundleURL
41+
bundleIdentifier = runningApplication.bundleIdentifier
1542
}
1643
}
1744

Tool/Sources/XcodeInspector/XcodeInspector.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public final class XcodeInspector: ObservableObject {
122122
appChangeObservations.forEach { $0.cancel() }
123123
appChangeObservations.removeAll()
124124

125-
let appChangeTask = Task { [weak self] in
125+
let appChangeTask = Task(priority: .utility) { [weak self] in
126126
guard let self else { return }
127127
if let activeXcode {
128128
await setActiveXcode(activeXcode)
@@ -140,7 +140,7 @@ public final class XcodeInspector: ObservableObject {
140140
else { continue }
141141
if app.isXcode {
142142
if let existed = xcodes.first(where: {
143-
$0.runningApplication.processIdentifier == app.processIdentifier
143+
$0.processIdentifier == app.processIdentifier && !$0.isTerminated
144144
}) {
145145
await MainActor.run {
146146
self.setActiveXcode(existed)
@@ -175,7 +175,7 @@ public final class XcodeInspector: ObservableObject {
175175
let processIdentifier = app.processIdentifier
176176
await MainActor.run {
177177
self.xcodes.removeAll {
178-
$0.runningApplication.processIdentifier == processIdentifier
178+
$0.processIdentifier == processIdentifier || $0.isTerminated
179179
}
180180
if self.latestActiveXcode?.runningApplication
181181
.processIdentifier == processIdentifier

0 commit comments

Comments
 (0)