Repository navigation
RoamRun puts a CI job's build on the OTA page: the Mac runs an OTA server, and roamrunctl ota publishes to it. An Apple TV can be introduced to a far Mac, as an Apple Vision Pro is. Upgrading RoamRun is brew upgrade --cask roamrun.
New
roamrun mcp --http <port> --allow <who> --allow-ota [--token-file <file>]starts an OTA server: its one tool,ota, puts an.ipasent withPUT /uploadon the OTA page, asroamrun otadoes. It operates no device: every other tool is refused at once, and--allow-otaisn't given with--allow-install(a server for installs runs beside it on another port, with a token of its own). It needs the RoamRun app running on that Mac. See docs/ota.md (日本語).roamrunctl ota <ipa> --server <Mac>:<port> [--token-file <file>] [--replace] [--timeout <s>]publishes through it, from a CI job or any machine of the tailnet. It asks what the server is before sending anything (a relay,roamrunctl mcp --http, is refused as one), waits while another upload comes in, sends its own again once if another job's upload replaced it, and checks the sha256 of what arrived. Exit 0 means stored; the page shows it within about 30 seconds while the app runs. A lost answer tootaisn't sent again: the build may have been stored.- An Apple TV is introduced to a far Mac the way an Apple Vision Pro is: it waits in Settings › Remotes and Devices › Remote App and Devices, and
roamrun pair introducelets the far Mac pick it. It needs Tailscale's app for tvOS and RoamRun 0.12.0 or later on both Macs. See the README.
Changed
roamrun otareads the.ipafrom one copy, so an export to the same path while it runs can't mix two archives (#77, #239 by @saimskywalker).- roamrunctl runs the Tailscale binary with
TERMset, and says what it printed when that isn't JSON, as RoamRun does since 0.11.1. make appreads the SDK version withxcrun --sdk macosx, builds against that SDK, and stops when the version is empty (#234).- roamrunctl comes with this release as
roamrunctl-linux-x86_64.tar.gz,roamrunctl-linux-aarch64.tar.gz,roamrunctl-windows-x86_64.zip,roamrunctl-windows-aarch64.zip,roamrunctl-macos-aarch64.tar.gzandroamrunctl-macos-x86_64.tar.gz(checksums inroamrunctl-SHA256SUMS);brew install mh-mobile/tap/roamrunctlbuilds it from source;cargo install --locked --git https://github.com/mh-mobile/RoamRun --tag v0.12.0 roamrunctlwith Rust 1.89 or later.
What to know
- An OTA server keeps one upload: jobs that publish at once can fail. Publish one job at a time.
- Anyone on your tailnet can open the OTA page and install its builds.
- The Introducer app isn't in this release: it is built from
iOS/with Xcode. - The Windows builds aren't signed: SmartScreen may ask before one runs the first time.
- Apple Watch has not been tried.
Known limits:
- Tried for this release with builds of it, on an iPhone Duo: the bridge's checks (away on a hotspot, Xcode at a breakpoint, the switch to "On this Wi‑Fi" and back), and
roamrun otawith an install from the page. The OTA server from this Mac and from a macOS VM of the tailnet (a 25 MB Ad Hoc build, also throughROAMRUNCTL_PROXY; a relay and a server for installs refused before anything was sent). An Apple TV 4K (2nd generation) on tvOS 27.2 introduced to a virtual Mac, with Xcode 27.0 there at a breakpoint. Not tried: the OTA server from a CI job,roamrunctl otaon Linux or Windows, an install on a device from a build the OTA server stored, and device control on an Apple TV. roamrun-action and the Bitrise Step don't publish to the OTA page yet.