Skip to content

Why mobile teams replace raw adb and simctl commands with RYNO

RYNO does not replace adb, simctl or devicectl: it goes through them for you. The commands work, and this page shows them exactly. RYNO adds what a terminal leaves to you: quoting every value, requests saved as files in your repository, variables per environment, local secrets, flows and reports. The macOS app is free.

The hidden cost of the terminal

The commands are fine. What costs time is what they leave to you: the quoting, the tokens and the copy you keep somewhere.

In a terminal

A link with one parameter goes through as you type it.

Terminal
adb shell am start -W -a android.intent.action.VIEW -d "myapp://product/42?ref=mail" com.example.app

Add a second parameter and the link breaks without an error. adb hands the line to the shell of the phone, which reads the & as the end of the command: the app receives myapp://product/42?ref=mail, and the rest of the line runs as a separate command. The fix is a second layer of quotes, one for the shell of your Mac and one for the shell of the phone.

Terminal
adb shell am start -W -a android.intent.action.VIEW -d "'myapp://product/42?ref=mail&utm_source=newsletter'" com.example.app

A token you put in a link stays in your shell history, or in the note you copy the command from.

In RYNO

You fill in the parameters in a table, and RYNO quotes each value before it sends the command to the shell of the phone, the & included. This is what it sends for the same link, with nothing to escape by hand.

adb shell
am start -W -a 'android.intent.action.VIEW' -d 'myapp://product/42?ref=mail&utm_source=newsletter' -p 'com.example.app'

A token goes in a value you mark as local. It lives in a file Git ignores, and stays on your Mac. How the shared and local halves work is in Organise your work.

The same native tools, underneath

RYNO brings no launcher of its own. On each device, it goes through the tool you would type, and it tells you no more than that tool can know.

The tool RYNO goes through for each device
DeviceToolWhat you installWhat RYNO tells you
Android phone or emulatoradbNothing: adb ships inside RYNO.A link no app claims fails loudly, and a success means what it says.
iOS simulatorsimctlThe Xcode command line tools.A link no app claims fails loudly, and a success means what it says.
iPhone or iPad, by cabledevicectlThe Xcode tools, Developer Mode on the device, an unlocked screen and a trusted Mac.RYNO sends the link and cannot confirm the device received it.

The commands, to copy

On a booted iOS simulator, simctl takes the link as it is: no second shell reads it.

Terminal
xcrun simctl openurl booted "myapp://product/42?ref=mail&utm_source=newsletter"

On an iPhone or iPad by cable, replace <device-id> with the identifier that xcrun devicectl list devices shows. devicectl sends the link without confirming the device received it, in a terminal and in RYNO alike.

Terminal
xcrun devicectl device process launch --device <device-id> --payload-url "myapp://product/42?ref=mail&utm_source=newsletter" com.example.app

npx uri-scheme, from Expo, opens a link in a running simulator.

Terminal
npx uri-scheme open "myapp://product/42?ref=mail" --ios

The same shortcut opens a link in a running Android emulator.

Terminal
npx uri-scheme open "myapp://product/42?ref=mail" --android

Seven everyday tasks, step by step

The same task in a terminal and in RYNO
TaskIn a terminalIn RYNO
Open a link on AndroidType the command with the package, and quote the link for the shell of the phone.adb shell am start -W -a android.intent.action.VIEW -d "'myapp://product/42?ref=mail&utm_source=newsletter'" com.example.appPick the phone or emulator and run the request. RYNO quotes every value.
Open a link on an iOS simulatorType the command for the booted simulator.xcrun simctl openurl booted "myapp://product/42?ref=mail&utm_source=newsletter"Pick the simulator and run the request. RYNO runs simctl openurl on it.
Send a link to an iPhone by cableFind the device identifier, then launch the app with the link as its payload.xcrun devicectl device process launch --device <device-id> --payload-url "myapp://product/42?ref=mail&utm_source=newsletter" com.example.appPick the iPhone, set the bundle identifier and run the request. RYNO runs the same devicectl launch, and cannot confirm the device received the link.
Change a parameterEdit the link inside the command, and keep both layers of quotes intact.Edit the value in the parameters table, or turn a parameter off for the next run.
Switch from staging to productionRewrite the host and the values in every command you keep.Write {{variables}} in the request and pick another environment. Each run fills them in.
Share links with your teamPaste the commands in a wiki page or a chat message.Each request is a JSON file in your repository, reviewed with the rest of your code.
Replay a journey of several linksWrite a script that runs the commands one after the other.Run a flow: its steps run in order, and the run ends in a report.

What RYNO adds, for free

The macOS app is free, with no account and nothing to host. Team and Business are paid plans that add a shared catalog for your company , described on the enterprise catalog page.

  • Versioned collections

    Each request is a JSON file in a folder of your repository, arranged in collections and reviewed like code.

  • Variables

    Write {{name}} in a request, and RYNO fills it in from the environment you select.

  • Local secrets

    Values you mark as local live in a file Git ignores, and never leave your Mac.

  • Flows

    Chain several requests into one journey, and walk it step by step on a device.

  • Reports

    A flow run ends in a report you can reopen, with an image per step when you ask for one.

  • MCP server

    A local server lets an AI assistant read and drive your project, once you turn it on.

How a journey becomes a report is in Run a flow.

Frequently asked questions

Does RYNO replace adb and simctl?

No. RYNO goes through adb on Android, simctl on iOS simulators and devicectl on an iPhone or iPad connected by cable. adb ships inside the app, and the iOS tools come with Xcode. What RYNO adds is around the command: the quoting, the files in your repository, the environments, the flows and the reports.

Why does adb shell am start cut my link at the &?

Because adb hands the command to the shell of the phone, which reads it a second time. An unquoted & ends the command there, and the rest of the link is lost. Quote the link twice in a terminal, or let RYNO quote each value for you.

Can RYNO confirm that a link reached a real iPhone?

No. On an iPhone or iPad connected by cable, RYNO sends the link through devicectl and cannot confirm the device received it, exactly as in a terminal. It reports the run as sent, never as a success.

Keep the tools, leave the quoting to RYNO

Your adb, simctl and devicectl stay as they are. To use RYNO on your repository, contact the team.