@@ -91,6 +91,10 @@ public final class XcodeInspector: ObservableObject {
9191 }
9292
9393 func observeXcode( _ xcode: XcodeAppInstanceInspector ) {
94+ activeDocumentURL = xcode. documentURL
95+ activeProjectURL = xcode. projectURL
96+ focusedWindow = xcode. focusedWindow
97+
9498 xcode. $documentURL. filter { _ in xcode. isActive } . assign ( to: & $activeDocumentURL)
9599 xcode. $projectURL. filter { _ in xcode. isActive } . assign ( to: & $activeProjectURL)
96100 xcode. $focusedWindow. filter { _ in xcode. isActive } . assign ( to: & $focusedWindow)
@@ -123,6 +127,8 @@ public final class XcodeInspector: ObservableObject {
123127 }
124128 }
125129 }
130+
131+ activeXcodeObservations. insert ( focusedElementChanged)
126132 }
127133}
128134
@@ -143,6 +149,7 @@ public final class XcodeAppInstanceInspector: AppInstanceInspector {
143149 @Published var projectURL : URL = . init( fileURLWithPath: " / " )
144150 @Published var tabs : Set < String > = [ ]
145151 private var longRunningTasks = Set < Task < Void , Error > > ( )
152+ private var focusedWindowObservations = Set < AnyCancellable > ( )
146153
147154 deinit {
148155 for task in longRunningTasks { task. cancel ( ) }
@@ -195,11 +202,31 @@ public final class XcodeAppInstanceInspector: AppInstanceInspector {
195202
196203 func observeFocusedWindow( ) {
197204 if let window = appElement. focusedWindow {
198- let window = XcodeWindowInspector ( uiElement: window)
199- focusedWindow = window
200- if let workspaceWindow = window as? WorkspaceXcodeWindowInspector {
201- workspaceWindow. $documentURL. assign ( to: & $documentURL)
202- workspaceWindow. $projectURL. assign ( to: & $projectURL)
205+ if window. identifier == " Xcode.WorkspaceWindow " {
206+ let window = WorkspaceXcodeWindowInspector (
207+ app: runningApplication,
208+ uiElement: window
209+ )
210+ focusedWindow = window
211+ focusedWindowObservations. forEach { $0. cancel ( ) }
212+ focusedWindowObservations. removeAll ( )
213+
214+ documentURL = window. documentURL
215+ projectURL = window. projectURL
216+
217+ window. $documentURL
218+ . filter { $0 != . init( fileURLWithPath: " / " ) }
219+ . sink { [ weak self] url in
220+ self ? . documentURL = url
221+ } . store ( in: & focusedWindowObservations)
222+ window. $projectURL
223+ . filter { $0 != . init( fileURLWithPath: " / " ) }
224+ . sink { [ weak self] url in
225+ self ? . projectURL = url
226+ } . store ( in: & focusedWindowObservations)
227+ } else {
228+ let window = XcodeWindowInspector ( uiElement: window)
229+ focusedWindow = window
203230 }
204231 } else {
205232 focusedWindow = nil
0 commit comments