UI Test Screenshots

The UI test suite captures a screenshot at each step of every flow (timer, tag management, record editing, settings, filtering, reports, performance). These are the same images shown in the app store / marketing gallery.

Most flows are journey-style tests: one app launch runs several scenarios sequentially (each wrapped in XCTContext.runActivity), snapshotting along the way, instead of paying a fresh launch per check. Snapshot names are stable across this structure — the gallery consumes them by name.

Where to view them

The rendered screenshots live in the public gallery at /screenshots — iPhone and Mac, grouped by test flow with captions. That page reads every PNG under src/assets/screenshots/{iphone,mac}/ via import.meta.glob, so it always reflects the latest captured set.

Where they come from

  • Captured during UI test runs into Minuta/UITests/__Snapshots__/{TestClass}/.
  • run-uitests.sh copies them, flattened, into minuta.tools/src/assets/screenshots/{iphone,mac}/ using the naming convention TestClass--name.png. Only the current run’s screenshots are copied — __Snapshots__/ is shared between platforms and can hold leftovers from a previous run on the other platform, which once leaked Mac screenshots into the iPhone gallery (and vice versa).
  • The website imports them from there; there is no per-doc copy to maintain.
  • On Mac Catalyst, test launches pin the window to 783x971pt (SceneDelegate applies sizeRestrictions of 1017x1261 UIKit points, which Catalyst scales by 0.77). Without the pin, tests inherit the real app’s last saved window frame, making screenshot sizes nondeterministic and breaking the 640pt sheet-width assertion.

Regenerating

cd Minuta
./scripts/run-uitests.sh          # iPhone
./scripts/run-uitests.sh --mac    # Mac Catalyst

See 601-testing-guide for the full test workflow, and the project CLAUDE.md for the screenshot regeneration and deploy steps.