Mac 一键更新 48tools.app 脚本

酶和ATP 2023年05月07日 672次浏览

本脚本开源,无任何加密混淆
对 Intel 和 Arm 芯片都进行了适配

如何使用?

  1. 下载下方文件
    https://www.mhatp.cn/upload/2023/05/macupdate48tool-d5596053f33147e6b582e35c361712b1.sh
  2. 打开终端 App

    输入命令运行
sh ~/Downloads/macupdate48tool-d5596053f33147e6b582e35c361712b1.sh

脚本会自动检测版本号以判断是否需要更新:
若无需更新,自动退出。
若需要更新,脚本会自动下载对应系统的最新版本发行压缩包并解压到临时目录,再移动软件包到系统目录下,再解除隔离标签,最后删除掉临时文件。
由于脚本为您进行了解除隔离标签这一步,所以脚本运行中需要用到您账户的密码(您手动更新时也需要使用到)。

代码:

#!/bin/bash

# 关闭 48tools.app 
echo "正在关闭 48tools.app"
osascript -e 'quit app "48tools"'

# 获取当前安装的应用程序版本号
CURRENT_VERSION=$(defaults read /Applications/48tools.app/Contents/Info.plist CFBundleShortVersionString)
echo "当前版本:v$CURRENT_VERSION"

# 检测当前系统版本是arm还是intel,分配不同的下载链接
if [ "$(uname -m)" = "arm64" ]; then
    echo "当前系统:arm64"
    # 获取最新版本的下载链接
    DOWNLOAD_URL=$(curl -s https://api.github.com/repos/duan602728596/48tools/releases/latest \
    | grep -o "https://github.com/duan602728596/48tools/releases/download/.*/48tools-.*-mac-arm64.zip")
else
    echo "当前系统:intel"
    # 获取最新版本的下载链接
    DOWNLOAD_URL=$(curl -s https://api.github.com/repos/duan602728596/48tools/releases/latest \
    | grep -o "https://github.com/duan602728596/48tools/releases/download/.*/48tools-.*-mac.zip")
fi

echo "正在检查更新..."  
# LATEST_VERSION
LATEST_VERSION=$(curl -s https://api.github.com/repos/duan602728596/48tools/releases/latest \
| grep -o '"tag_name": ".*"' \
| sed 's/"//g' \
| sed 's/tag_name: //g')
echo "最新版本:$LATEST_VERSION"

# 检查是否获取到最新版本号
if [ -z "$LATEST_VERSION" ]; then
    echo "获取最新版本号失败"
    echo "请检查网络连接"
    exit 1
fi

# 检查当前版本是否与最新版本相同
if [ "v$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
    echo "当前版本已经是最新版本,不需要更新"
    # 打开 48tools.app
    open /Applications/48tools.app
    exit 0
fi

# 设置安装变量
APP_NAME="48tools.app"
DOWNLOAD_PATH="./48toolstmp/48tools.zip"
INSTALL_PATH="/Applications/$APP_NAME"

# 创建临时文件夹
mkdir -p ./48toolstmp

# 下载文件并检查错误
echo "下载链接:$DOWNLOAD_URL"
curl -L "$DOWNLOAD_URL" -o "$DOWNLOAD_PATH"
if [ $? -ne 0 ]; then
    echo "下载文件失败"
    exit 1
fi

# 解压文件并检查错误
unzip -o "$DOWNLOAD_PATH" -d "./48toolstmp"
if [ $? -ne 0 ]; then
    echo "解压文件失败"
    exit 1
fi
# mv ./48toolstmp/48tools-*/48tools.app ./48toolstmp/48tools.app
cp -rf ./48toolstmp/48tools-*/48tools.app ./48toolstmp/48tools.app

# 检查应用程序文件是否存在
if [ ! -d "./48toolstmp/$APP_NAME" ]; then
    echo "找不到应用程序"
    exit 1
fi

# 将应用移到应用程序文件夹
echo "正在移动应用程序..."
# 判断是否存在文件夹,不存在则创建
if [ ! -d "$INSTALL_PATH" ]; then
    mkdir -p "$INSTALL_PATH"
fi
# 替换应用程序
rm -rf "$INSTALL_PATH"
mv "./48toolstmp/$APP_NAME" "$INSTALL_PATH"
if [ $? -ne 0 ]; then
    echo "移动应用程序失败"
    exit 1
fi

# 移除应用程序的隔离标签并检查错误
echo "正在移除隔离标签..."
echo "请在输入密码,以便移除隔离标签,输入完成后按回车键(密码不会显示)"
sudo xattr -r -d com.apple.quarantine "$INSTALL_PATH"
if [ $? -ne 0 ]; then
    echo "移除隔离标签失败"
    exit 1
fi

echo "正在清理文件..."
# 清理文件
rm -rf ./48toolstmp
if [ $? -ne 0 ]; then
    echo "清理文件失败"
    exit 1
fi

# 输出更新完成消息
VERSION=$(defaults read "$INSTALL_PATH/Contents/Info.plist" CFBundleShortVersionString)
echo "48tools 已更新到版本 $VERSION"
echo "更新完成,正在重新打开应用程序"
open /Applications/48tools.app
exit 0
# 脚本发布地址 https://www.mhatp.cn/archives/update48tools

License: WTFPL

Todo List

  •  加入镜像站功能,便于大陆用户使用
  •  对首次安装做出优化
  •  自动安装 ffmpeg
  •  自动安装 Chrome
  •  输出 ffmpeg 路径以及无头浏览器路径以便捷使用