Highlights
🐛 Screen mirroring no longer leaves the device wedged on exit
developer core-device display serve-web / serve-vnc used to leave the device stuck after Ctrl-C: Camera and Voice Memos kept recording silence, and mirroring would not re-arm until the device rebooted. The stop reused the RemoteXPC connection that had already issued the stream start, and a RemoteXPC connection tolerates only one reply-bearing request — the second made the device's dtremotedisplayd fatally assert and crash before it ran its teardown (clearing remote-observation state, releasing the audit assertion, stopping the screen-sharing indicator), so the device stayed "observed remotely". The stop now uses the correct StopRequest payload issued as the sole request on a fresh connection, and the daemon runs its full teardown.
pymobiledevice3 developer core-device display serve-web
# Ctrl-C now releases the device cleanly; camera/mic are free again🐛 Clean, actionable error when the camera or microphone is in use
Starting a mirror while a foreground app (Camera, Voice Memos, …) holds the camera or microphone can't work — iOS rejects it with CoreDevice error 9022, exactly as Apple's Xcode Device Hub enforces. This used to surface as repeated raw tracebacks. Now serve-web / serve-vnc preflight the stream and exit with a single actionable message (linking Apple's docs) and a non-zero code instead of standing up a server that could only error. More generally, CoreDeviceService.invoke() now parses the device's structured CoreDevice.error into a readable CoreDeviceError carrying .code, instead of dumping the raw binary-plist blob.
pymobiledevice3 developer core-device display serve-web
# → "The device's camera or microphone is in use by another app … Quit that app … See https://developer.apple.com/…"✨ serve-web: right-click is Home, and tighter audio
Right-clicking the canvas now presses Home (matching serve-vnc, on top of the existing on-bezel Volume / Home / Lock / Mute / Siri buttons and Ctrl-key shortcuts). System-audio playout now primes 60 ms instead of 100 ms and trims itself back when clock drift pushes latency past 180 ms, so the sound stays in sync over a long session instead of lagging further.
📝 Docs
The CLI recipes now describe what serve-web (cross-platform, in-browser WebCodecs) and serve-vnc (macOS-only, VideoToolbox) are, and call out the camera/microphone caveat.
What's Changed
- 480b8a3 core_device: Stop media streams on a fresh RemoteXPC connection (#1956) (@doronz88)
- 1ff4985 core_device: Fail fast when the camera or microphone is in use (#1956) (@doronz88)
- 025d0d3 docs: Describe serve-web/serve-vnc and the camera/microphone caveat (#1956) (@doronz88)
- 750a84b serve-web: Right-click = Home, and lower/bound audio latency (#1957) (@doronz88)
Full Changelog: v11.13.1...v11.14.0