mac微信4.0以上版本双开
zoe.X Lv3

一键脚本

创建wechat-dual.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
# macOS WeChat Dual Instance Script
# Usage:
# sudo ./wechat-dual.sh auto --force

set -euo pipefail

# 颜色
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'

# 默认路径
WECHAT_APP="/Applications/WeChat.app"
DEST_DIR="/Applications"
NEW_APP_NAME="WeChat2.app"
FORCE=0

# 工具检测
require_cmd() {
command -v "$1" >/dev/null 2>&1 || { echo -e "${RED}缺少命令: $1${NC}"; exit 1; }
}
for cmd in ditto codesign xattr /usr/libexec/PlistBuddy; do require_cmd "$cmd"; done

# 检查微信是否已安装
check_wechat() {
if [ ! -d "$WECHAT_APP" ]; then
echo -e "${RED}未找到微信: $WECHAT_APP${NC}"
exit 1
fi
echo -e "${GREEN}✓ 检测到微信已安装${NC}"
}

# 删除旧的 WeChat2
remove_wechat2() {
local dest="$DEST_DIR/$NEW_APP_NAME"
if [ -d "$dest" ]; then
echo -e "${YELLOW}⚠ 检测到已存在 $NEW_APP_NAME${NC}"
if [ $FORCE -eq 1 ]; then
echo -e "${YELLOW}--force 模式,直接删除旧副本${NC}"
sudo rm -rf "$dest"
else
read -p "是否删除并重新创建? (y/n): " yn
[[ $yn =~ ^[Yy]$ ]] && sudo rm -rf "$dest"
fi
fi
}

# 复制应用
copy_wechat() {
echo -e "${BLUE}① 正在复制微信应用...${NC}"
sudo ditto "$WECHAT_APP" "$DEST_DIR/$NEW_APP_NAME"
echo -e "${GREEN}✓ 复制完成${NC}"
}

# 修改 Bundle ID
modify_bundle_id() {
local info_plist="$DEST_DIR/$NEW_APP_NAME/Contents/Info.plist"
local new_id="com.tencent.xinWeChat.dual.$RANDOM"
echo -e "${BLUE}② 修改 Bundle ID 为 $new_id${NC}"
sudo /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $new_id" "$info_plist"
sudo /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName WeChat Dual" "$info_plist" || true
echo -e "${GREEN}✓ Bundle ID 修改完成${NC}"
}

# 重新签名
resign_app() {
local dest="$DEST_DIR/$NEW_APP_NAME"
echo -e "${BLUE}③ 清理旧签名并重新签名${NC}"
sudo rm -rf "$dest/Contents/_CodeSignature" || true
sudo xattr -dr com.apple.quarantine "$dest" || true
sudo codesign --force --deep --sign - --timestamp=none "$dest"
echo -e "${GREEN}✓ 签名完成${NC}"
}

# 启动两个微信
start_dual() {
echo -e "${BLUE}④ 启动微信双开${NC}"
open -n "$WECHAT_APP"
sleep 1
open -n "$DEST_DIR/$NEW_APP_NAME"
echo -e "${GREEN}✓ 已启动两个微信实例${NC}"
}

# 关闭所有微信
kill_wechat() {
echo -e "${YELLOW}正在关闭所有微信进程...${NC}"
pkill -f "WeChat" || true
echo -e "${GREEN}✓ 所有微信已关闭${NC}"
}

# 主逻辑
main() {
case "${1:-}" in
setup)
check_wechat
remove_wechat2
copy_wechat
modify_bundle_id
resign_app
;;
start)
start_dual
;;
auto)
check_wechat
remove_wechat2
copy_wechat
modify_bundle_id
resign_app
start_dual
;;
-k|kill)
kill_wechat
;;
-h|--help|"")
echo "用法: $0 {setup|start|auto|kill} [--force]"
;;
*)
echo -e "${RED}未知参数: $1${NC}"
exit 1
;;
esac
}

# 解析 --force
for arg in "$@"; do [[ $arg == "--force" ]] && FORCE=1; done
main "$@"

执行脚本

1
2
3
chmod +x wechat-dual.sh
sudo ./wechat-dual.sh auto --force

手动操作

准备工作

  1. 一台装有 macOS 系统的 Mac 电脑。
  2. 已从 App Store 或官网安装了最新版的微信。
  3. 了解如何打开“终端” (Terminal) 应用(在“应用程序” > “实用工具”里可以找到)。

操作步骤

整个过程只需三步,请依次在终端中执行以下命令。

第一步:复制应用

首先,我们需要复制一个微信应用的副本,并给它一个新的名字,例如 微信2.app

打开“终端”,输入以下命令后按回车:

1
sudo cp -R /Applications/WeChat.app /Applications/微信2.app

命令解析:

  • sudo: 以管理员权限执行命令,因此会提示你输入电脑的开机密码(输入时密码不可见,输完按回车即可)。
  • cp -R: 复制整个文件夹(因为 .app 文件本质上是一个文件夹)。
  • /Applications/WeChat.app: 原始微信应用的路径。
  • /Applications/微信2.app: 新应用的路径和名称。

执行完毕后,你会在“应用程序”文件夹里看到一个名为“微信2”的应用图标。

第二步:修改应用唯一标识符

macOS 系统通过一个名为 CFBundleIdentifier 的唯一标识符来区分不同的应用。为了让系统认为“微信”和“微信2”是两个独立的应用,我们必须修改副本的标识符。

继续在终端中输入以下命令:

1
sudo /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier net.maclub.wechat2" /Applications/微信2.app/Contents/Info.plist

命令解析:

  • /usr/libexec/PlistBuddy: macOS 内置的用于编辑 .plist 文件的工具。
  • -c "Set :CFBundleIdentifier net.maclub.wechat2": 这是核心指令。Set 是设置操作,:CFBundleIdentifier 是要修改的键,net.maclub.wechat2 是我们为新应用设置的新的、唯一的标识符(你可以自定义,但建议保持格式,确保不与现有应用冲突)。
  • /Applications/微信2.app/Contents/Info.plist: 指向副本应用的配置文件路径。

⚠️ 常见错误提示:Unrecognized Command
如果你执行此命令后看到 Unrecognized Command 错误,99% 的原因是你使用了错误的引号!

  • 错误“Set :CFBundleIdentifier ...” (中文或富文本的全角弯引号)
  • 正确"Set :CFBundleIdentifier ..." (英文半角的直引号)

从网页复制命令时,请务必检查引号的格式是否正确。建议直接复制本文提供的代码块。

第三步:重新签名应用

由于我们修改了应用的内容(Info.plist 文件),原有的代码签名已经失效。macOS 的安全机制(Gatekeeper)会阻止运行签名被破坏的应用。因此,我们需要对其进行一次强制的本地重新签名。

在终端中输入最后一条命令:

1
sudo codesign --force --deep --sign - /Applications/微信2.app

命令解析:

  • codesign: macOS 的代码签名工具。
  • --force: 强制替换现有的签名。
  • --deep: 递归地为应用包内的所有组件(如框架、插件)进行签名。
  • --sign -: 使用一个临时的、本地生成的(ad-hoc)签名进行签署。
  • /Applications/微信2.app: 需要签名的目标应用。

大功告成!

现在,所有步骤都已完成!

回到“访达” > “应用程序”文件夹,你会看到 微信2.app 图标已经可以正常显示。双击它,熟悉的登录二维码界面就会出现。现在你可以登录第二个微信账号了,两个微信可以完美地同时运行,互不干扰。

你还可以将 微信2.app 拖到程序坞(Dock)上,方便日后快速启动。

后续维护

  • 如何更新?
    通过这种方式创建的 微信2.app 不会跟随 App Store 自动更新。当你的主微信更新后,如果希望 微信2 也更新,只需删除旧的 微信2.app,然后重新按照本文的步骤操作一遍即可。

  • 如何卸载?
    直接将 微信2.app 拖到废纸篓即可。其聊天记录等数据存储在 ~/Library/Containers/ 目录下,以你设置的标识符命名(例如 net.maclub.wechat2),如果需要彻底清理,可以一并删除该文件夹。

希望这篇教程能帮助你提升在 Mac 上的工作与沟通效率!

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量