macOS runner aborts in CGS_REQUIRE_INIT on the first synthesized event with Xcode 27.2 (XCTDisplayInterface → SLSGetDisplaysWithRect)

Chiusa
#4,142 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
Mezza giornata
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
macos, swift

Direzione di ricerca

The fix belongs in dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift, where the reporter proposes a class-level setUp that touches NSApplication.shared under #if os(macOS). Start by reading the existing instance setUp there, then confirm the crash on a macOS machine with Xcode 27.2 by clicking an element in a target app. Done means a fresh runner synthesizes click, fill and scroll events without the CGS_REQUIRE_INIT assertion, and the change is checked against the other macOS runner paths.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

[!NOTE]
🤖 Opus 5.5 responding on behalf of Sam

Summary. With Xcode 27.2, the macOS runner aborts on the first event it synthesizes in a fresh runner process (a click, coordinate tap, fill or scroll):

Assertion failed: (did_initialize), function CGS_REQUIRE_INIT, file CGInitialization.c, line 44.

The CLI then reports Error (COMMAND_FAILED): fetch failed. snapshot -i and get text keep working. Connecting the runner process to the window server in RunnerTests' class setUp fixes it locally (patch below).

Environment

  • agent-device 0.21.15, --platform macos, target app Brave Browser (Chromium)
  • Xcode 27.2 (27B52); xcodebuild -checkFirstLaunchStatus exits 0
  • macOS 26.6.2 (25G83), Apple silicon

I haven't tried 0.21.35. The release notes for 0.21.16–0.21.35 don't mention this, and a code search of main found no NSApplication warm-up in the runner tests.

Repro

  1. agent-device open "Brave Browser" --platform macos
  2. agent-device snapshot -i works.
  3. agent-device click @eN on any element. runner.log:
Tap "<window title>" Window[0.00, 0.00] -> (452.0, 114.0)
    Find the "<window title>" Window
    Check for interrupting elements affecting "<window title>" Window
    Synthesize event
Assertion failed: (did_initialize), function CGS_REQUIRE_INIT, file CGInitialization.c, line 44.

Crashed thread (AgentDeviceRunnerUITests-Runner crash report, EXC_CRASH SIGABRT):

libsystem_kernel.dylib   __pthread_kill
libsystem_pthread.dylib  pthread_kill
libsystem_c.dylib        abort
libsystem_c.dylib        __assert_rtn
SkyLight                 SLSGetDisplaysWithRect
SkyLight                 SLGetDisplaysWithRect
XCTAutomationSupport     static XCTDisplayInterface.allDisplayIDs(containing:)
XCTAutomationSupport     static XCTDisplayInterface.firstDisplayID(containing:)
XCTAutomationSupport     -[XCElementSnapshot displayID]
XCUIAutomation           +[XCUIElement(XCUIElementEventSynthesis) _dispatchEventWithEventBuilder:eventSynthesizer:…]

Observations

  • A runner process started before Xcode 27.2 was installed kept pressing.
  • Every runner started after the install crashed on its first synthesized event, with one exception: a run where a system dialog was on screen and XCTest's UI-interruption handling ran before the synthesis. So the crash seems to depend on whether anything has connected the runner process to the window server before the first event.
  • Rebuilding the runner from an empty cache (prepare ios-runner --platform macos) didn't change it.
  • Another project hit the same assert on Xcode 27 and fixed it the same way: https://github.com/perezstudio/axo-browser/pull/90 ("the UI test runner has no NSApplication. A fresh runner whose first test starts with a key press crashed in CGS_REQUIRE_INIT, so each UI test class now connects it to the window server in class setUp.")

Local patch

In dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift, after the instance setUp(). AppKit is already imported on macOS.

#if os(macOS)
  override class func setUp() {
    super.setUp()
    MainActor.assumeIsolated { _ = NSApplication.shared }
  }
#endif

After the rebuild (the runner cache key changed with the source), a click, a fill and a scroll on Brave all worked: 5 synthesized events, no assert. At startup the patched runner also logs a few [Connection] Unable to get synchronousRemoteObjectProxy and Unable to re-register with Process Instance Registry lines, which didn't affect any command.

The opt-in native macOS backend (ADR 0031) avoids XCTest altogether, but XCTest is still the default macOS backend. Would you consider adding this, or an equivalent window-server connection, to the macOS runner?

Lingua principale
TypeScript
Stelle
5.2k
Fork
359
Merge medio
13h 31m
PR unite (30g)
664

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di callstack/agent-device

Tutte le issue di callstack/agent-device

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.