From 9f75ee433dfabc0c5b736ff5133349fad3651995 Mon Sep 17 00:00:00 2001 From: PJ Date: Thu, 13 Aug 2026 21:05:38 +0530 Subject: [PATCH] docs(ci): correct the ios hang wording and note the device lock --- .github/scripts/folio-run.sh | 4 +++- docs/development/ci.md | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/scripts/folio-run.sh b/.github/scripts/folio-run.sh index 0c4cea8..41ebb83 100755 --- a/.github/scripts/folio-run.sh +++ b/.github/scripts/folio-run.sh @@ -31,7 +31,9 @@ case "$platform" in # freshly installed app IS clear state). The in-run reinstall path is worth # avoiding here: `simctl uninstall` + `install` immediately followed by the # XCTest runner's own launch hits "app.folio is unknown to FrontBoard" - # perhaps half the time, and the run then hangs rather than failing. + # perhaps half the time. The launch RPC is bounded now, so that surfaces + # as an error rather than an indefinite hang, but a failed leg is still a + # failed leg and a fresh install is already clear state. folio_args+=(--platform ios --clear-data=false --ios-device "${IOS_DEVICE:-iPhone 16 Pro}") diff --git a/docs/development/ci.md b/docs/development/ci.md index c0dc867..169c84f 100644 --- a/docs/development/ci.md +++ b/docs/development/ci.md @@ -61,8 +61,15 @@ The ios leg passes `--clear-data=false`, because the job installs a fresh build immediately before the run and a freshly installed app is already clear state. The in-run reinstall is worth avoiding: `simctl uninstall` + `install` followed straight away by the XCTest runner's own launch fails with `app.folio is unknown -to FrontBoard` maybe half the time, and the run then hangs rather than failing. -The job timeouts are the backstop if it happens anyway. +to FrontBoard` maybe half the time. That used to hang the run outright; the +launch RPC is bounded now, so it fails in about 90 seconds with a real error +instead, but a failing leg is still a failing leg. The job timeouts are the +backstop if it happens anyway. + +Only one sanderling run may drive a given simulator at a time. The driver takes +an advisory lock on the target's UDID and a second run is refused with the lock +path in the message, because two runs interleaving app lifecycle leave the first +run's automation session bound to a bundle the simulator no longer knows. ## replay-ui