Repro (macOS arm64, local build):
QT_QPA_PLATFORM=offscreen ./build_local/bin/qtmesh info rumba120/test.fbx ; echo $? # 139, empty stderr
./build_local/bin/qtmesh info rumba120/test.fbx ; echo $? # 0
Same for anim --list, anim --generate, material --inpaint, and for QtMeshEditor --cli info …. Not a regression from any recent PR — it reproduces on master too; it surfaced because a test-runner script exported QT_QPA_PLATFORM=offscreen (the recipe the pure-data UnitTests need on macOS) and that leaked into CLI invocations in the same shell, which then looked like a CLI regression.
Crash site (lldb): EXC_BAD_ACCESS (code=1, address=0x1) in libobjc.A.dylib\objc_opt_isKindOfClass + 12on the main thread — an Objective-CisKindOfClass:on a non-object pointer. That points at Cocoa-level window code being reached even though the platform plugin isoffscreen: the likely path is the CLI's Ogre init handing winId()of an offscreenQWindow(not anNSView`) to Ogre's macOS render-window code, which treats it as one.
Impact: low. CI (Linux) runs the CLI under Xvfb/xcb and is unaffected; the Docker image likewise. Anyone scripting the macOS CLI headlessly with the offscreen QPA hits a silent crash with no diagnostic, which is the part worth fixing — at minimum CLIPipeline should detect the offscreen platform on macOS and print a clear message (or force the cocoa QPA for the hidden window) instead of dying in libobjc.
Workaround: don't set QT_QPA_PLATFORM=offscreen for qtmesh on macOS (only export it for UnitTests).
🤖 Generated with Claude Code
Repro (macOS arm64, local build):
Same for
anim --list,anim --generate,material --inpaint, and forQtMeshEditor --cli info …. Not a regression from any recent PR — it reproduces on master too; it surfaced because a test-runner script exportedQT_QPA_PLATFORM=offscreen(the recipe the pure-dataUnitTestsneed on macOS) and that leaked into CLI invocations in the same shell, which then looked like a CLI regression.Crash site (lldb):
EXC_BAD_ACCESS (code=1, address=0x1)inlibobjc.A.dylib\objc_opt_isKindOfClass + 12on the main thread — an Objective-CisKindOfClass:on a non-object pointer. That points at Cocoa-level window code being reached even though the platform plugin isoffscreen: the likely path is the CLI's Ogre init handingwinId()of an offscreenQWindow(not anNSView`) to Ogre's macOS render-window code, which treats it as one.Impact: low. CI (Linux) runs the CLI under Xvfb/xcb and is unaffected; the Docker image likewise. Anyone scripting the macOS CLI headlessly with the offscreen QPA hits a silent crash with no diagnostic, which is the part worth fixing — at minimum
CLIPipelineshould detect the offscreen platform on macOS and print a clear message (or force the cocoa QPA for the hidden window) instead of dying inlibobjc.Workaround: don't set
QT_QPA_PLATFORM=offscreenforqtmeshon macOS (only export it forUnitTests).🤖 Generated with Claude Code