#!/usr/bin/env bash
# Reset Peekaboo mac app: kill running instances, rebuild, relaunch, verify.
#
# Inspired by CodexBar's Scripts/compile_and_run.sh.
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
WORKSPACE="${WORKSPACE:-$ROOT_DIR/Apps/Peekaboo.xcworkspace}"
SCHEME="${SCHEME:-Peekaboo}"
CONFIGURATION="${CONFIGURATION:-Debug}"
DERIVED_DATA_PATH="${DERIVED_DATA_PATH:-$ROOT_DIR/.build/DerivedData}"
APP_NAME="${APP_NAME:-Peekaboo}"
APP_BUNDLE="${APP_BUNDLE:-$DERIVED_DATA_PATH/Build/Products/${CONFIGURATION}/${APP_NAME}.app}"
APP_PROCESS_PATTERN="${APP_NAME}.app/Contents/MacOS/${APP_NAME}"
DERIVED_PROCESS_PATTERN="${DERIVED_DATA_PATH}/Build/Products/${CONFIGURATION}/${APP_NAME}.app/Contents/MacOS/${APP_NAME}"
log() { printf '%s\n' "$*"; }
fail() { printf 'ERROR: %s\n' "$*" >&2; exit 1; }
run_step() {
local label="$1"; shift
log "==> ${label}"
if ! "$@"; then
fail "${label} failed"
fi
}
kill_all_peekaboo() {
for _ in {1..15}; do
pkill -f "${DERIVED_PROCESS_PATTERN}" 2>/dev/null || true
pkill -f "${APP_PROCESS_PATTERN}" 2>/dev/null || true
pkill -x "${APP_NAME}" 2>/dev/null || true
if ! pgrep -f "${DERIVED_PROCESS_PATTERN}" >/dev/null 2>&1 \
&& ! pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1 \
&& ! pgrep -x "${APP_NAME}" >/dev/null 2>&1; then
return 0
fi
sleep 0.25
done
}
verify_bundle() {
if [ ! -d "${APP_BUNDLE}" ]; then
fail "App bundle not found at ${APP_BUNDLE}"
fi
}
launch_app() {
open "${APP_BUNDLE}"
sleep 1
if pgrep -f "${APP_PROCESS_PATTERN}" >/dev/null 2>&1 || pgrep -x "${APP_NAME}" >/dev/null 2>&1; then
log "OK: ${APP_NAME} is running."
else
fail "App exited immediately. Check crash logs in Console.app (User Reports)."
fi
}
# 1) Kill all running Peekaboo instances (bundled or DerivedData).
log "==> Killing existing Peekaboo instances"
kill_all_peekaboo
# 2) Build the Debug app (no signing) into DerivedData.
run_step "Build ${APP_NAME}.app (${CONFIGURATION})" "${ROOT_DIR}/scripts/build-mac-debug.sh"
# 3) Relaunch.
run_step "Locate app bundle" verify_bundle
run_step "Launch app" launch_app