#!/usr/bin/env bash set -euo pipefail APP_NAME="WorkFly" APP_VERSION="0.10.15" REPORT_URL="https://fly.yonyou.zone/api/install/report" _bold() { printf '\033[1m%s\033[0m\n' "$1"; } _ok() { printf '\033[32m✅ %s\033[0m\n' "$1"; } _err() { printf '\033[31m❌ %s\033[0m\n' "$1" >&2; } # ── 平台 / 架构选择 ──────────────────────────────────────────────── os="$(uname -s)" arch="$(uname -m)" if [ "$os" != "Darwin" ]; then _err "仅支持 macOS,当前系统:$os" exit 1 fi DMG_URL="" DMG_NAME="" case "$arch" in arm64) DMG_URL="https://workfly-oss.yangyongan.com/releases/v0.10.15/mac-arm64/workfly-0.10.15-arm64.dmg"; DMG_NAME="workfly-0.10.15-arm64.dmg" ;; x86_64) DMG_URL="https://workfly-oss.yangyongan.com/releases/v0.10.15/mac-x64/workfly-0.10.15-x64.dmg"; DMG_NAME="workfly-0.10.15-x64.dmg" ;; *) _err "不支持的架构:$arch"; exit 1 ;; esac # ── 匿名日志记录(仅系统/版本/架构 + 本机算的匿名去重 ID;失败不影响安装)── _anon="$(printf '%s|%s' "$(scutil --get ComputerName 2>/dev/null || hostname 2>/dev/null)" "$(git config --global user.name 2>/dev/null || git config user.name 2>/dev/null)" | shasum -a 256 2>/dev/null | cut -c1-16)" _osver="$(sw_vers -productVersion 2>/dev/null)" curl -fsS -m 5 -X POST "$REPORT_URL" -H 'Content-Type: application/json' -d "{\"event\":\"install\",\"os\":\"macOS\",\"osVersion\":\"$_osver\",\"arch\":\"$arch\",\"anonId\":\"$_anon\",\"appVersion\":\"$APP_VERSION\"}" >/dev/null 2>&1 || true # ── 下载 ────────────────────────────────────────────────────────── _bold "→ 下载 $APP_NAME $APP_VERSION ($arch)" TMP="$(mktemp -d -t workfly-install)" trap 'rm -rf "$TMP"' EXIT DMG="$TMP/$DMG_NAME" curl -fL --progress-bar -o "$DMG" "$DMG_URL" # ── 挂载 ────────────────────────────────────────────────────────── _bold "→ 挂载 dmg" MOUNT="$(hdiutil attach -nobrowse -readonly "$DMG" | awk -F '\t' '/\/Volumes\// {print $NF; exit}')" if [ -z "$MOUNT" ]; then _err "dmg 挂载失败" exit 1 fi trap 'hdiutil detach "$MOUNT" -quiet >/dev/null 2>&1 || true; rm -rf "$TMP"' EXIT APP_SRC="$(find "$MOUNT" -maxdepth 2 -name "*.app" -print -quit)" if [ -z "$APP_SRC" ]; then _err "未在 dmg 中找到 .app" exit 1 fi APP_BASENAME="$(basename "$APP_SRC")" TARGET="/Applications/$APP_BASENAME" # ── 安装 ────────────────────────────────────────────────────────── _bold "→ 安装到 $TARGET" if [ -d "$TARGET" ]; then pkill -x "${APP_BASENAME%.app}" 2>/dev/null || true rm -rf "$TARGET" fi cp -R "$APP_SRC" "$TARGET" xattr -dr com.apple.quarantine "$TARGET" 2>/dev/null || true _ok "已安装 $APP_BASENAME" open "$TARGET"