Skip to main content
A project’s deep links are the addresses that open your app on a screen: myapp://cart, https://example.com/invite. mobster links lists the ones your project has and opens each on a simulator to see where it lands. A check’s steps can then say open cart instead of the address.

Where the list comes from

Mobster merges four sources and lists an exact address once. Names ignore case; URL paths and query strings keep their case. An ambiguous name refuses the run:
A scheme or a domain alone (myapp://) opens the app and no screen in it, so there is no title to compare. --json prints the same list, with screen: false for those. Write your own in .mobster/links.yaml:
name: address also works for a link with no title. Mobster never opens javascript:, data:, file: and itms-services: links, and check never opens a link that acts as it opens (a call, a shortcut). Mobster learns only custom schemes. It doesn’t keep web pages, and it keeps the newest 50. Learned links are plain facts about the project; when the memory store lands they move there.
After these lines the command prints the counts with the run’s duration, and where the report is. Each link becomes a check that launches your app with the address and expects its title. It passes when the screen shows the title, and fails with a screenshot of the screen it landed on when it doesn’t. The run is mobster test’s: the reports, JUnit and the failure’s frame are in .mobster/test-results/, and results.json has the landing screen’s title in screen.title. The exit code is 0 when every link landed, 1 when one didn’t and 3 when Mobster couldn’t run.
  • A link with no title opens in your app, and the run reports “needs review” with the landing screen’s title. Add that title to links.yaml to make it a pass or fail.
  • Mobster reads the app’s bundle ID from the Expo config or the Xcode project. Pass --bundle com.example.app, or --app PATH to install a built .app.
  • --device runs it on an iPhone, as it does for mobster test.
A step that says open <name>, open link <name> or open the deep link <name> for a link in the list becomes Open the link myapp://cart when the run starts. A name that isn’t in the list is left as written, so open Settings still opens the Settings app. Mobster reads links.yaml, the Xcode project, app.json and the learned links for this; it doesn’t run Node.

The API

The GET route reads static project files only. It does not evaluate app.config.js or app.config.ts; mobster links list can evaluate those through the Expo CLI. Updates use .mobster/.links.lock to keep concurrent writers from dropping links. Keep that empty lock file out of version control. Saving rewrites links.yaml as the links: list, so a comment in the file is lost. No route opens a link on a simulator; mobster links check does.