109 lines
3.5 KiB
Bash
Executable File
109 lines
3.5 KiB
Bash
Executable File
#!/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
|