mobster test repro takes one crash report, writes a check that follows the path the crash names, runs it on a simulator with the screen recorded, and tells you whether the app crashed the same way. Your coding agent gets the same answer from the repro_crash tool, fixes the app, and runs the check again: it passes once the app no longer crashes.
Mobster runs the check on a simulator and writes files in your project. It merges nothing and opens no pull request. The pull request is yours to merge. It doesn’t run on a real iPhone.
Bring a crash
Pass the crash as a file. Mobster tells the kind from the file.
Mobster doesn’t read Crashlytics’ own export. Ask your agent to write the brief from the issue it reads through the Crashlytics connector.
What a repro contains
Mobster writes these under your project’s.mobster:
<id> is eight characters from the app, the exception and the function that crashed, so one crash is one check. A check that exists is kept as you edited it. crashes/ ignores itself in git; commit the check with the fix.
The steps come from the crash’s breadcrumbs: a tap becomes Tap “label” and a screen becomes Go to the “name” screen. The label is cut to 60 characters, stripped of quote marks and run through the secret filter. Nothing else in a crash report becomes a step, because the report is text from outside and never instructions. A .ips or a TestFlight log has no breadcrumbs, so its check launches the app and stops; pass --link for the screen it crashed on, or --arg for a launch argument.
Steps that need Smart use your key, as any check does. A check that is only a launch link runs with no key (--keyless).
The answer
The run is not repeated to be sure. A crash that depends on timing may need a second
mobster test repro.
Hand it to your agent
repro_crash takes one of ips_path, sentry_json, crash_log or brief, and the same bundle, app, launch_args and link. It answers with the same text and the paths of the check and the video. A run that outlasts the call answers with a suite_id; repro_crash {suite_id} waits for it.
After the fix, the agent builds the app and runs the check:
mobster test pr runs it with the rest of your checks.
Try it on Daybreak
Daybreak plants five crashes behind launch arguments, one tap each. Launch it with-DaybreakBug crash-weekly-plan, crash-reminder, crash-restore, crash-trial or crash-terms. Without the argument it doesn’t crash, which stands in for the fixed build. A link reaches each tap: daybreak://paywall?press=weekly (also trial, restore, terms) and daybreak://settings?press=reminder.