fix(scripts): run-ios-simulator.sh exits silently when no Booted sim found
When no simulator is booted, grep -oE finds no UUID and exits 1. With set -euo pipefail, that non-zero exit propagates through the command substitution and kills the script at the UDID= assignment before it can fall through to the boot-one branch. Fix: add || true to both find_sim and sim_name pipelines so they always return 0 regardless of whether a match was found. Also replace sleep 2 with xcrun simctl bootstatus <UDID> -b, which blocks until the simulator is fully booted — more reliable than a fixed delay and faster when the simulator starts quickly. Update docs/building.md §9 to show the bootstatus command.
This commit is contained in:
@@ -67,21 +67,23 @@ vc_log "app: $APP"
|
||||
find_sim() {
|
||||
# Each line from simctl looks like:
|
||||
# " iPhone 16 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) (Shutdown)"
|
||||
# The || true at the end prevents set -e from killing the script when no
|
||||
# matching device exists (grep -oE exits 1 on no match).
|
||||
local filter="${1:-}" state="${2:-}"
|
||||
local pattern="iPhone"
|
||||
[[ -n "$filter" ]] && pattern="$filter"
|
||||
xcrun simctl list devices available 2>/dev/null \
|
||||
| grep -E "[[:space:]]$pattern" \
|
||||
| grep -E "$pattern" \
|
||||
| { [[ -n "$state" ]] && grep "$state" || cat; } \
|
||||
| head -1 \
|
||||
| grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' \
|
||||
| head -1
|
||||
| head -1 || true
|
||||
}
|
||||
|
||||
sim_name() {
|
||||
xcrun simctl list devices available 2>/dev/null \
|
||||
| grep "$1" | head -1 \
|
||||
| sed 's/[[:space:]]*('"$1"').*//' | sed 's/^[[:space:]]*//'
|
||||
| sed 's/[[:space:]]*('"$1"').*//' | sed 's/^[[:space:]]*//' || true
|
||||
}
|
||||
|
||||
if [[ -n "$DEVICE_UDID" ]]; then
|
||||
@@ -100,16 +102,17 @@ else
|
||||
vc_step "booting simulator: $NAME ($UDID)"
|
||||
xcrun simctl boot "$UDID"
|
||||
open -a Simulator
|
||||
# Give Simulator.app a moment to display the device.
|
||||
sleep 2
|
||||
# Wait for the simulator to finish booting before installing.
|
||||
vc_log "waiting for simulator to boot…"
|
||||
xcrun simctl bootstatus "$UDID" -b
|
||||
fi
|
||||
fi
|
||||
|
||||
NAME="$(sim_name "$UDID")"
|
||||
vc_log "simulator: $NAME ($UDID)"
|
||||
|
||||
# If the simulator exists but Simulator.app isn't open, open it.
|
||||
open -a Simulator &>/dev/null || true
|
||||
# Bring Simulator.app to the foreground (no-op if already open).
|
||||
open -a Simulator
|
||||
|
||||
# ── Install ───────────────────────────────────────────────────────────────────
|
||||
vc_step "installing VoiceCatiOS"
|
||||
|
||||
Reference in New Issue
Block a user