Files
software-mansion__argent/packages/tool-server/test/boot-device.test.ts
filip131311 4d34a689b5 feat(tool-server): add ARGENT_SIMULATOR_NO_WINDOW to force headless iOS boots (#483)
## What

Adds `ARGENT_SIMULATOR_NO_WINDOW` — the iOS analog of the existing
Android `ARGENT_EMULATOR_NO_WINDOW` env var — to force local iOS
simulator boots to run headless.

## Why

`ARGENT_EMULATOR_NO_WINDOW=1` already makes Android emulators boot
headless host-wide (appends `-no-window`). iOS had no env-var
equivalent: it could only boot headless via the per-call `headless:
true` parameter on the `boot-device` tool, which is awkward for
CI/containers and Argent Lens hosts that stream every device through
`simulator-server` and never want a window.

Note: `simctl boot` is already headless at the core — the only thing
that pops a window is the `open -a Simulator.app` GUI attach at the end
of `bootIos`. This env var gates exactly that step.

## Changes

- `boot-device.ts`
- New `iosHeadlessFromEnv()` helper next to Android's
`selectExtraEmulatorArgs()`, with identical truthy parsing
(`1`/`true`/`yes`, case-insensitive).
- `bootIos` GUI-attach gate changed from `if (!headless)` → `if
(!headless && !iosHeadlessFromEnv())`.
  - Updated the `headless` param docs to mention the env var.
- `boot-device.test.ts` — new test asserting `Simulator.app` is not
opened when `ARGENT_SIMULATOR_NO_WINDOW` is set (env saved/restored
around the test).

## Scope

Applies to the local iOS path (`bootIos`). The remote path
(`bootIosRemote` via `sim-remote`) has no local `Simulator.app` step, so
it's unaffected.

## Testing

- `npx tsc --noEmit` — clean
- `npx vitest run test/boot-device.test.ts` — 23/23 pass (incl. the new
test)
2026-07-08 17:22:31 +02:00

26 KiB