#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" source "$ROOT/scripts/_build-dirs.sh" cd "$ROOT" CONFIG_FILE="$HOME/.acord/ios-target" # resolve target from cli arg, saved config, or auto-detect. TARGET="" SELECTED_ID="" SELECTED_LABEL="" CLI_ARG="${1:-}" if [ -n "$CLI_ARG" ]; then TARGET="$CLI_ARG" elif [ -f "$CONFIG_FILE" ]; then # shellcheck disable=SC1090 . "$CONFIG_FILE" case "${KIND:-}" in device) TARGET="device"; SELECTED_ID="$ID"; SELECTED_LABEL="${LABEL:-}";; sim) TARGET="sim"; SELECTED_ID="$ID"; SELECTED_LABEL="${LABEL:-}";; *) echo "warning: $CONFIG_FILE has unknown KIND='${KIND:-}', falling back to auto-detect" >&2;; esac fi if [ -z "$TARGET" ]; then if xcrun devicectl list devices 2>/dev/null | grep -q "available (paired)"; then TARGET="device" else TARGET="sim" fi fi if [ -n "$SELECTED_LABEL" ]; then echo "Target: $TARGET — $SELECTED_LABEL ($SELECTED_ID)" else echo "Target: $TARGET (auto-detected)" fi case "$TARGET" in sim) bash "$ROOT/scripts/ios/build.sh" sim APP="$ROOT/build/ios/Acord.app" BUNDLE_ID="org.else-if.acord" DEV="$SELECTED_ID" if [ -z "$DEV" ]; then DEV="$(xcrun simctl list devices booted | { grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' || true; } | head -1)" fi if [ -z "$DEV" ]; then DEV="$(xcrun simctl list devices available | awk '/iPad/' | { grep -oE '[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}' || true; } | head -1)" if [ -z "$DEV" ]; then echo "no iPad simulator available — open Xcode → Window → Devices and Simulators to add one" >&2 exit 1 fi fi # boot the simulator if not already running. STATE="$(xcrun simctl list devices | awk -v id="$DEV" '$0 ~ id { for (i=1; i<=NF; i++) if ($i ~ /^\(/) state=$i } END { gsub(/[()]/, "", state); print state }')" if [ "$STATE" != "Booted" ]; then xcrun simctl boot "$DEV" 2>/dev/null || true open -a Simulator fi echo "Installing to simulator $DEV..." xcrun simctl install "$DEV" "$APP" if [ "${ACORD_IOS_NOLAUNCH:-0}" = "1" ]; then echo "Skipping launch (ACORD_IOS_NOLAUNCH=1)" else echo "Launching..." xcrun simctl launch "$DEV" "$BUNDLE_ID" fi ;; device) bash "$ROOT/scripts/ios/build.sh" device APP="$ROOT/build/ios/Acord.app" DEVICE_ID="${SELECTED_ID:-${ACORD_IOS_DEVICE:-}}" if [ -z "$DEVICE_ID" ]; then DEVICE_ID="$(xcrun devicectl list devices 2>/dev/null \ | awk '/available \(paired\)/ {for(i=1;i<=NF;i++) if($i ~ /^[A-F0-9-]{36}$/) {print $i; exit}}')" fi if [ -z "$DEVICE_ID" ]; then echo "no paired device found — connect via cable and trust this Mac on the device" >&2 echo " or run: cargo xtask select-ios" >&2 exit 1 fi echo "Installing to device $DEVICE_ID..." xcrun devicectl device install app --device "$DEVICE_ID" "$APP" if [ "${ACORD_IOS_NOLAUNCH:-0}" = "1" ]; then echo "Skipping launch (ACORD_IOS_NOLAUNCH=1)" else echo "Launching..." xcrun devicectl device process launch --device "$DEVICE_ID" org.else-if.acord || true fi ;; *) echo "usage: $0 [sim|device]" >&2 exit 2 ;; esac