Repository navigation
This one makes simless safe to gate merges on: a run can no longer pass with tests missing. Measured on the same production app as before, now on Xcode 27.1, plus the demo app and a second app.
The whole unit suite (2,280 tests) now takes 473 s from nothing (simless clean --all, then up and test all) against 491 s for the simulator's build and tests, and 327 to 390 s once built against 375 s of simulator test time. All 106 UI tests that don't need a simulator pass on iPhone and iPad in 450 to 561 s, against 1,150 s on 5 simulator clones. 3 back-to-back runs of both suites on one commit gave identical results, every target present.
- No more false green from a package's test run. Package tests build in the app's build folder since 0.5.0, and a package test run left its own
.xctestrunnext to the app's. Three places took whichever sorted first, so after one,simless test allsilently dropped the app's hosted test targets and still passed,simless test uifound no UI test targets, andsimless upcouldn't install. simless now picks the app scheme's file by name (or by the app's test target in it). The demo app has a local package with two products to reproduce it. - A test target that doesn't run fails the run, whatever the cause.
simless test allchecks the app scheme's test targets (that exist) and every local package's, and a target with no test in the run isnot-runand exits 1. A UI test target that's in the scheme but missing from the build counts the same way. - The two-device UI results have the same fields as one device's:
ok,selected,notRunandflaky. - Windows tests make get the device's safe areas. In a unit test host, a window a test puts on the scene has an iPhone's size and insets (62 pt on top, 34 at the bottom), not the Mac window's 20 pt, and its content is laid out within them.
- A tab view that adapts to a sidebar starts with its tab bar on an iPad, like iPadOS, instead of an open sidebar. Checked against an iPad simulator with
simless calibrate. - Same number of hosts every run. Test hosts are planned from the Mac's core count rather than the cores macOS reports available at that moment, from the timing history of full runs rather than the last run's (a run of a few tests left times for a few targets), and every run says how many hosts it uses and why.
- Slots install side by side (up to 3 at once), so a cold
simless uphas its test hosts ready in 26 s instead of 38 s after the build. simless down --allsays what it stops, worktree by worktree, and leaves the hosts of a worktree whose test run is still going.