From dc60f1ef07b337981a2de02a55153ac9f5d51c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=85=8E=E9=A5=BC=E6=9E=9C=E5=AD=90=E5=8D=B7=E9=B2=A8?= =?UTF-8?q?=E9=B1=BC=E8=BE=A3=E6=A4=92?= Date: Thu, 13 Feb 2025 16:38:47 +0800 Subject: [PATCH] refactor: Enhance Cursor app modification script with robust backup and replacement mechanism - Improved application replacement process with sudo-based file operations - Added comprehensive backup creation before app modification - Enhanced error handling during app replacement and restoration - Simplified temporary file cleanup and permission management - Removed code signing verification step - Streamlined sudo usage for critical file operations --- scripts/run/cursor_mac_id_modifier.sh | 43 +++++++++++---------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/scripts/run/cursor_mac_id_modifier.sh b/scripts/run/cursor_mac_id_modifier.sh index 4fd23ff..a5ed937 100644 --- a/scripts/run/cursor_mac_id_modifier.sh +++ b/scripts/run/cursor_mac_id_modifier.sh @@ -301,12 +301,13 @@ modify_cursor_app_files() { if [ ! -d "$CURSOR_APP_PATH" ]; then log_error "未找到 Cursor.app,请确认安装路径: $CURSOR_APP_PATH" return 1 - fi + } # 创建临时工作目录 local timestamp=$(date +%Y%m%d_%H%M%S) local temp_dir="/tmp/cursor_reset_${timestamp}" local temp_app="${temp_dir}/Cursor.app" + local backup_app="/tmp/Cursor.app.backup_${timestamp}" # 清理可能存在的旧临时目录 if [ -d "$temp_dir" ]; then @@ -320,11 +321,19 @@ modify_cursor_app_files() { return 1 } + # 备份原应用 + log_info "备份原应用..." + cp -R "$CURSOR_APP_PATH" "$backup_app" || { + log_error "无法创建应用备份" + rm -rf "$temp_dir" + return 1 + } + # 复制应用到临时目录 log_info "创建临时工作副本..." cp -R "$CURSOR_APP_PATH" "$temp_dir" || { log_error "无法复制应用到临时目录" - rm -rf "$temp_dir" + rm -rf "$temp_dir" "$backup_app" return 1 } @@ -451,38 +460,22 @@ modify_cursor_app_files() { return 1 fi - # 替换原应用前增加签名验证 - if ! codesign --verify -vvvv "$temp_app" &>/dev/null; then - log_error "最终签名验证失败,中止替换操作" - log_info "临时文件保留在:${temp_dir}" - return 1 - fi - - # 关闭原应用 - log_info "正在关闭 Cursor..." - osascript -e 'tell application "Cursor" to quit' || true - sleep 2 - - # 替换原应用 log_info "安装修改版应用..." - if ! mv "$temp_app" "/Applications/"; then + if ! sudo rm -rf "$CURSOR_APP_PATH" || ! sudo cp -R "$temp_app" "/Applications/"; then log_error "应用替换失败,正在恢复..." - mv "$backup_app" "$CURSOR_APP_PATH" - rm -rf "$temp_dir" + sudo rm -rf "$CURSOR_APP_PATH" + sudo cp -R "$backup_app" "$CURSOR_APP_PATH" + rm -rf "$temp_dir" "$backup_app" return 1 fi # 清理临时文件 - rm -rf "$temp_dir" + rm -rf "$temp_dir" "$backup_app" # 设置权限 - chown -R "$CURRENT_USER:staff" "$CURSOR_APP_PATH" - chmod -R 755 "$CURSOR_APP_PATH" - - # 重建 LaunchServices 数据库 - # log_info "正在重建 LaunchServices 数据库..." - # /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f "$CURSOR_APP_PATH" + sudo chown -R "$CURRENT_USER:staff" "$CURSOR_APP_PATH" + sudo chmod -R 755 "$CURSOR_APP_PATH" log_info "Cursor 主程序文件修改完成!原版备份在: ${backup_app/$HOME/\~}" return 0