# sourced by run.sh — temp OpsxAPI.app for Dock icon (icons/icon.icns) # shellcheck shell=bash # .noindex:避免 Spotlight 把临时 Dock 壳当成可打开的历史 App GUI_APP_DIR="$SCRIPT_DIR/src-tauri/target/gui-app.noindex" GUI_APP="$GUI_APP_DIR/OpsxAPI.app" ICONS_DIR="$SCRIPT_DIR/src-tauri/icons" DBG_BIN_A="$SCRIPT_DIR/src-tauri/target/debug/OpsxAPI" GUI_DEV_NEEDS_VITE=0 _gui_write_plist() { cat >"$GUI_APP/Contents/Info.plist" <<'PLIST' CFBundleDisplayNameOpsxAPI CFBundleExecutableOpsxAPI CFBundleIconFileicon.icns CFBundleIdentifiercom.opsx.api.dev CFBundleNameOpsxAPI CFBundlePackageTypeAPPL CFBundleShortVersionString0.1.0-dev CFBundleVersion0 LSHighResolutionCapable PLIST } _gui_wrap_bin() { local src="$1" mkdir -p "$GUI_APP/Contents/MacOS" "$GUI_APP/Contents/Resources" cp "$src" "$GUI_APP/Contents/MacOS/OpsxAPI" chmod +x "$GUI_APP/Contents/MacOS/OpsxAPI" _gui_write_plist } ensure_gui_dev_app() { local icon="$ICONS_DIR/icon.icns" GUI_DEV_NEEDS_VITE=0 if [ ! -f "$icon" ]; then error "缺少 ${icon}" return 1 fi mkdir -p "$GUI_APP_DIR" info "编译当前桌面源码..." (cd "$SCRIPT_DIR" && cargo build --manifest-path src-tauri/Cargo.toml --bin OpsxAPI) || return 1 _gui_wrap_bin "$DBG_BIN_A" GUI_DEV_NEEDS_VITE=1 mkdir -p "$GUI_APP/Contents/Resources" cp "$icon" "$GUI_APP/Contents/Resources/icon.icns" /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName OpsxAPI" "$GUI_APP/Contents/Info.plist" 2>/dev/null || true /usr/libexec/PlistBuddy -c "Set :CFBundleName OpsxAPI" "$GUI_APP/Contents/Info.plist" 2>/dev/null || true /usr/libexec/PlistBuddy -c "Set :CFBundleExecutable OpsxAPI" "$GUI_APP/Contents/Info.plist" 2>/dev/null || true /usr/libexec/PlistBuddy -c "Set :CFBundleIconFile icon.icns" "$GUI_APP/Contents/Info.plist" 2>/dev/null || true /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.opsx.api.dev" "$GUI_APP/Contents/Info.plist" 2>/dev/null || true local stamp stamp="$(date +%Y%m%d%H%M%S)" /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${stamp}" "$GUI_APP/Contents/Info.plist" 2>/dev/null || true touch "$GUI_APP" success "临时 .app 已刷 icons/icon.icns → ${GUI_APP}" } kill_opsxapi_gui() { stop_detached "$DESKTOP_LABEL" pkill -f "$SCRIPT_DIR/src-tauri/target/debug/OpsxAPI" 2>/dev/null || true pkill -f "$SCRIPT_DIR/node_modules/.bin/tauri" 2>/dev/null || true pkill -f "$SCRIPT_DIR/src-tauri/target/gui-app/OpsxAPI.app" 2>/dev/null || true pkill -f "$GUI_APP" 2>/dev/null || true } gui_is_running() { pgrep -f "$GUI_APP/Contents/MacOS/" >/dev/null 2>&1 }