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

Cerrado
#4,142 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
Medio día
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
macos, swift

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

[!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?

Lenguaje dominante
TypeScript
Estrellas
5.2k
Forks
359
Merge medio
13 h 23 min
PR fusionados (30 d)
655

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de callstack/agent-device

Todos los issues de callstack/agent-device

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.