#!/usr/bin/env bash set -eo pipefail # ==================================================== # 配置变量 # ==================================================== TEMP_PATH="WeChatMac/temp" WEBSITE_URL="https://mac.weixin.qq.com/?t=mac&lang=zh_CN" DOWNLOAD_LINK="" # ==================================================== # 函数定义 # ==================================================== # 打印分隔线 print_separator() { printf '%*s\n' 60 | tr ' ' '#' } # 彩色输出函数 echo_color() { local color="$1" shift local message="$*" case "$color" in yellow) echo -e "\033[1;33m$message\033[0m" ;; red) echo -e "\033[1;31m$message\033[0m" >&2 ;; green) echo -e "\033[1;32m$message\033[0m" ;; *) echo "$message" ;; esac } # 安装依赖项 install_depends() { print_separator echo_color "yellow" "Installing dependencies: wget, curl, git, gh, shasum, pup" print_separator brew install wget curl git gh pup } # 下载 WeChat DMG download_wechat() { DOWNLOAD_LINK=$(curl -s "$WEBSITE_URL" | pup 'a.download-button:nth-of-type(1) attr{href}') print_separator echo_color "yellow" "Downloading the newest WeChatMac..." print_separator mkdir -p "$TEMP_PATH" wget -q "$DOWNLOAD_LINK" -O "${TEMP_PATH}/WeChatMac.dmg" if [ "$?" -ne 0 ]; then echo_color "red" "Download Failed, please check your network!" clean_data 1 fi } # 从 Info.plist 提取版本信息 get_version() { print_separator echo_color "yellow" "Extracting version from DMG (macOS)..." print_separator # 挂载 dmg MOUNT_DIR=$(hdiutil attach "${TEMP_PATH}/WeChatMac.dmg" -nobrowse | sed -n 's/^.*\(\/Volumes\/.*\)$/\1/p' | tail -n1) if [ -z "$MOUNT_DIR" ]; then echo_color "red" "Failed to mount DMG!" clean_data 1 fi # 定位 Info.plist # INFO_PLIST=$(find "${MOUNT_DIR}" -type f -name "Info.plist" | head -n 1) INFO_PLIST="${MOUNT_DIR}/WeChat.app/Contents/Info.plist" if [ ! -f "$INFO_PLIST" ]; then echo_color "red" "Info.plist not found in mounted volume!" hdiutil detach "$MOUNT_DIR" clean_data 1 fi # 使用 grep 和 sed 提取版本号 VERSION=$(grep -A1 'CFBundleShortVersionString' "$INFO_PLIST" | grep '' | sed -E 's/.*([^<]+)<\/string>.*/\1/') # 卸载 dmg hdiutil detach "$MOUNT_DIR" if [ -z "$VERSION" ]; then echo_color "red" "Version information not found in Info.plist!" clean_data 1 fi echo "Version: $VERSION" } # 计算 SHA256 compute_sha256() { local file_path="$1" shasum -a 256 "$file_path" | awk '{print $1}' } # 准备提交(复制 DMG 并创建 .sha256 文件) prepare_commit() { print_separator echo_color "yellow" "Preparing to commit new version..." print_separator VERSION_DIR="WeChatMac/$VERSION" mkdir -p "$VERSION_DIR" cp "${TEMP_PATH}/WeChatMac.dmg" "$VERSION_DIR/WeChatMac-$VERSION.dmg" NOW_SUM256=$(compute_sha256 "$VERSION_DIR/WeChatMac-$VERSION.dmg") cat > "$VERSION_DIR/WeChatMac-$VERSION.dmg.sha256" <