DEV Community

Apoorv Darshan
Apoorv Darshan

Posted on

macOS Tahoe blacks out AirPlay-mirrored windows under capture — here's my workaround

I was building TetherShot, a tiny menu-bar app for pixel-perfect iPhone screenshots, and hit a wall that cost me two days.

The clean idea: AirPlay-mirror the iPhone to the Mac, then capture that window with ScreenCaptureKit. Native, cable-free, no weird frameworks.

The problem: on macOS Tahoe (26), the mirrored window blacks out the instant any capture context becomes active. You don't get a dim frame or a glitch — you get solid black, exactly when you try to record.

I assumed my pipeline was broken. It wasn't. The OS is actively blanking AirPlay surfaces under capture.

The workaround: skip the mirror entirely and read the device framebuffer directly. TetherShot now does this over Apple's developer-services RemoteXPC tunnel (via pymobiledevice3) — so it grabs the real 1179x2556 framebuffer, not a compressed reflection. It even works when the phone is locked.

USB mode is even simpler — flip one CoreMediaIO flag and the iPhone shows up as a native capture device:

npm install -g tethershot
tethershot install
Enter fullscreen mode Exit fullscreen mode

Takeaway: when the OS fights your clever screen-scraping path, the "lower-level" route is often the only honest one. A framebuffer grab beats a mirror every time.

MIT, local-first, zero telemetry: https://github.com/apoorvdarshan/TetherShot

Top comments (0)