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.
Terminaladb shell am start -W -a android.intent.action.VIEW -d "myapp://product/42?ref=mail" com.example.appAdd 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.
Terminaladb shell am start -W -a android.intent.action.VIEW -d "'myapp://product/42?ref=mail&utm_source=newsletter'" com.example.appA 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 shellam 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.
| Device | Tool | What you install | What RYNO tells you |
|---|---|---|---|
| Android phone or emulator | adb | Nothing: adb ships inside RYNO. | A link no app claims fails loudly, and a success means what it says. |
| iOS simulator | simctl | The Xcode command line tools. | A link no app claims fails loudly, and a success means what it says. |
| iPhone or iPad, by cable | devicectl | The 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.
Terminalxcrun 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.
Terminalxcrun devicectl device process launch --device <device-id> --payload-url "myapp://product/42?ref=mail&utm_source=newsletter" com.example.appnpx uri-scheme, from Expo, opens a link in a running simulator.
Terminalnpx uri-scheme open "myapp://product/42?ref=mail" --iosThe same shortcut opens a link in a running Android emulator.
Terminalnpx uri-scheme open "myapp://product/42?ref=mail" --androidSeven everyday tasks, step by step
| Task | In a terminal | In RYNO |
|---|---|---|
| Open a link on Android | Type 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.app | Pick the phone or emulator and run the request. RYNO quotes every value. |
| Open a link on an iOS simulator | Type 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 cable | Find 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.app | Pick 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 parameter | Edit 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 production | Rewrite 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 team | Paste 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 links | Write 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.