iOS + Android Lean pair
Start an iPhone simulator and an Android emulator together in Lean, see both screens, debug either, and stop with everything put back.
The pair runs one iPhone simulator and one Android emulator at the same time, in Lean, the profile that costs the least memory. It exists for teams that ship one app on both platforms and want both screens up while they debug.
Start a pair
Choose Start iOS + Android
Use Device > Start iOS + Android, the button on the welcome card, or the New Device menu in the device list. From a shell, run tripod-devices pair-start.
Wait for both boots
The app picks the saved pair, else a device that is already running, else a stopped one. It creates Tripod_Pair_iPhone or Tripod_Pair_Android only when a platform has nothing usable. Both boots run in parallel.
Work on both
The simulator takes the stage. The emulator opens in a window beside it. Both are live and both take input.
Stop
Stop shuts both down and restores what Lean changed. If a restore is still owed after a relaunch, Stop stays enabled.
What Lean changes
| Platform | What Lean does | What it never touches |
|---|---|---|
| iOS Simulator | On a shut-down iOS 27.2 simulator, turns off optional background services (push, search and Siri among them) through the same preview, apply and receipt as the Tune tab. | A simulator that already has a receipt is left as its owner tuned it. |
| Android Emulator | Boots a stopped emulator as its managed Lean copy, with its own trimmed settings. | Your source AVD is never written, so it needs no restore. |
A device that is already running joins the pair as it is. It is labelled stock, with the reason. The pair does not retune a running device. To get Lean on one, shut it down and start the pair again.
Services Lean turns off
The pair applies Lean without the per-feature review that the Tune tab shows. If your app needs push, search, Siri or another service, use Tune's per-capability selection on the simulator instead of the pair.
Memory
The pair adds both boot estimates to your memory reserve before either boot starts. If the sum does not fit, the app refuses and names the gigabytes needed and available. Close something, or stop another virtual device.
The line under the pair and the Performance > Live tab show the measured memory footprint and CPU of each device's host processes, and their sum. A missing half is never counted as zero. The line updates while the main window is visible, so a device window alone on screen shows the last reading.
What we measured
These numbers come from our performance notes. Each is one workload on one Mac, from a named earlier build, so read them as observations and not as a promise.
| Workload | Result | Caveat |
|---|---|---|
| iOS Settings, stock against a 175-label Lean selection | Highest Lean median at least 7.337 GiB (74.4%) below stock | Four boots in shared slots, on an M4 Mac mini. |
| API 36 Android emulator, stock against Lean | Highest Lean median at least 2.810 GiB (52.54%) below stock | Stock and Lean had different RAM and core counts, and a cache cap changed after capture, so it measures the whole profile. Lean also read higher QEMU CPU in single post-capture readings. |
Debug either half
Inspector, Logs, Network and every other tool read the device on the stage. To follow the other half, press Control-Command-P, or use the two device glyphs in the Debug and Network card headers. It swaps which device is up front without reconnecting either.
Agents and the pair
Three tools drive the pair, and none takes a device id.
| Tool | CLI | Does |
|---|---|---|
device_pair_start | tripod-devices pair-start | Picks or creates both devices, boots them in Lean, shows them and opens both for this connection. |
device_pair_call | tripod-devices pair-call | Runs one tool on both at once and answers once. ios and android objects override shared params. |
device_pair_stop | tripod-devices pair-stop | Closes this connection's hold on both, shuts both down and restores the simulator's services. |
tripod-devices pair-start
tripod-devices pair-call --method device_tap --params.selector.text "Sign in"
tripod-devices pair-call --method device_launch --ios.app com.example.app --android.app com.example.app.debug
tripod-devices pair-stopOne half failing does not hide the other half's answer. The tripod-lean-pair skill teaches an agent this loop. See Agents.
Limits in the alpha
- The pair is one simulator and one emulator. Real phones open on their own.
- The simulator's Lean selection targets iOS 27.2 simulators.
- The pair is covered by device-free tests. Checks on a real simulator and emulator are still open in this alpha, so expect rough edges.