Skip to content

Releases: BANG88/simfarm

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 06 Sep 06:31
b5bb714

Patch Changes

  • #6 f990f69 Thanks @BANG88! - Shutting an iOS simulator down while a stream was attached — or attaching to one CoreSimulator considers shut down — no longer takes the whole server with it. serve-sim starts its native capture without looking at the promise, and the FrameCapture Code=2 "Device not booted (state: Shutdown)" it rejects with was an unhandled rejection that ended the process, every session and every other device's stream with it. The provider now guards that call: the stream on the affected device ends with an error event that says why, the stream id is freed, the device is re-listed as shut down, and serve-sim's dead in-process session is dropped so the next boot streams again instead of serving its last cached picture at 0 fps (which is what a re-attach after a reboot got before). An attach on a simulator that is not booted, or whose capture cannot start, answers ok:false with the reason and the way out; the shutdown op ends the device's streams before the simulator goes, whatever order the client sends things in. A process-level guard logs any other unhandled rejection or uncaught exception with its likely source and keeps serving; only a failure to bind the listening socket still exits. Android: a scrcpy process that cannot be spawned ends its stream instead of throwing at the event loop.

  • #8 18295a5 Thanks @BANG88! - serve-sim 0.1.45 -> 0.1.46 (upstream PR #140, "restore Xcode 27 Device Hub streaming and input"). On Xcode 27 the native capture now picks the simulator's own framebuffer instead of the larger Device Hub presentation surface that made VideoToolbox fail with encodingFailed, browser keyboard events reach iOS 27 through a guarded Device Hub route (opt out with SERVE_SIM_DISABLE_DEVICE_HUB_KEYBOARD=1; Xcode 26 and older keep the HID path simfarm's input uses), and simctl bootstatus is no longer called with a redundant -b that could block after boot. serve-sim's in-process session also awaits its native capture start now, answers a stream route 503 and evicts the failed session instead of dropping the promise; simfarm's own capture guard stays in front of that so a failed capture still ends the affected stream with the reason, re-lists the device and drops the dead session. No simfarm behaviour changes on Xcode 26.

npm: https://www.npmjs.com/package/simfarm/v/0.3.1

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 02:33
f3a247a

Minor Changes

  • #4 afe02f8 Thanks @BANG88! - The iOS JPEG path now has the same discipline as the Android one. serve-sim encodes the whole framebuffer — 1206x2622 on an iPhone 17 Pro, 100-700 KB a picture, at whatever rate the guest redraws — and a phone viewer drawing it at 402x874 points paid for every byte. Each attached JPEG stream now runs through ffmpeg (mjpeg -> scale -> mjpeg) with three new flags: --ios-max-size (default 1024, longest side, aspect kept, even dimensions; 0 disables scaling), --ios-jpeg-max-fps (default 20, drop-never-queue, applied before ffmpeg so a dropped picture costs nothing; 0 uncaps) and --ios-jpeg-quality (default 70). screen.scale shrinks in step with the picture so width / scale is still the device's point size; stats on an iOS stream reports frameSize beside videoSize, and the attach log line says the delivered size. Without a usable ffmpeg the pictures still arrive, at full size, and the log says so. The iOS H.264 path is unchanged.

npm: https://www.npmjs.com/package/simfarm/v/0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 15:17
95d524f

Minor Changes

  • #2 7047f70 Thanks @BANG88! - Android devices now offer JPEG as well as H.264: the H.264 stream scrcpy sends is transcoded through ffmpeg (h264 -> mjpeg) and each picture is delivered as a key frame, so a client with no video decoder — a native app that can only draw JPEG, or a browser on a plain-http IP origin where VideoDecoder is undefined — can show an Android device at all. The capability is probed at startup: with a usable ffmpeg the device declares ["h264", "jpeg"], without one it stays ["h264"], and H.264 stays the default for clients that can decode it. The transcoder runs only while a JPEG stream is attached. New flags: --android-jpeg-max-fps (default 20, 0 uncaps), --android-jpeg-quality (default 70), --android-ffmpeg PATH, --android-no-jpeg.

npm: https://www.npmjs.com/package/simfarm/v/0.2.0