xworkmate-app/scripts/install-flutter-mac-dmg.sh
2026-03-11 07:32:52 +08:00

61 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
DIST_DIR="$ROOT_DIR/dist"
APP_NAME="${APP_NAME:-XWorkmate}"
TARGET_APP="/Applications/$APP_NAME.app"
DMG_PATH="${1:-}"
APP_NAME_SLUG="$(printf '%s' "$APP_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')"
MOUNT_POINT="$(mktemp -d "/tmp/${APP_NAME_SLUG}-install.XXXXXX")"
OPEN_AFTER_INSTALL="${OPEN_AFTER_INSTALL:-0}"
cleanup() {
hdiutil detach "$MOUNT_POINT" -quiet 2>/dev/null || true
rmdir "$MOUNT_POINT" 2>/dev/null || true
}
trap cleanup EXIT
if [[ -z "$DMG_PATH" ]]; then
shopt -s nullglob
dmgs=("$DIST_DIR"/"$APP_NAME"-*.dmg)
shopt -u nullglob
if [[ "${#dmgs[@]}" -eq 0 ]]; then
echo "No DMG found under $DIST_DIR for $APP_NAME" >&2
exit 1
fi
IFS=$'\n' dmgs=($(ls -t "${dmgs[@]}"))
unset IFS
DMG_PATH="${dmgs[0]}"
fi
if [[ ! -f "$DMG_PATH" ]]; then
echo "DMG not found: $DMG_PATH" >&2
exit 1
fi
echo "Mounting $DMG_PATH..."
hdiutil attach "$DMG_PATH" -mountpoint "$MOUNT_POINT" -nobrowse -readonly -quiet
SOURCE_APP="$MOUNT_POINT/$APP_NAME.app"
if [[ ! -d "$SOURCE_APP" ]]; then
echo "Expected app bundle missing from DMG: $SOURCE_APP" >&2
exit 1
fi
if [[ -d "$TARGET_APP" ]]; then
echo "Replacing existing app at $TARGET_APP"
rm -rf "$TARGET_APP"
fi
echo "Installing to $TARGET_APP..."
ditto "$SOURCE_APP" "$TARGET_APP"
xattr -dr com.apple.quarantine "$TARGET_APP" 2>/dev/null || true
if [[ "$OPEN_AFTER_INSTALL" == "1" ]]; then
open "$TARGET_APP"
fi
echo "Installed: $TARGET_APP"