前言
之前在知乎上看到一篇 mac 版微信双开的教程,步骤大概是:复制一份 WeChat.app,改一下 Bundle ID,重新签名,然后用 nohup 启动。试了一下确实能用,手动操作了一遍,成功双开了。
但是这个过程说实话挺繁琐的——每次都要打开终端敲好几条 sudo 命令,稍微手滑一下就可能复制错路径或者签错名。而且如果微信更新了,分身的签名就失效了,又得重新来一遍。
更要命的是,如果想三开、四开,还得把教程里的所有 2 改成 3、4,分别再操作一遍。知乎原帖评论区就有人问"三开怎么改",作者还得专门出一个更新贴把要改的地方标出来 🤣
所以我就想,能不能写个命令行工具把这些步骤自动化?一行命令搞定创建、修复、删除,顺便再做个交互式界面方便不熟悉命令行的朋友使用。
说干就干。
效果展示
先看下最终效果。
CLI 模式,一行命令创建 3 个分身:
$ wechat-clone create 3
正在创建 3 个微信分身...
✓ 分身 1 创建成功: /Applications/WeChat Clone 1.app
✓ 分身 2 创建成功: /Applications/WeChat Clone 2.app
✓ 分身 3 创建成功: /Applications/WeChat Clone 3.app
完成!
查看已有分身:
$ wechat-clone list
找到 3 个微信分身:
WeChat Clone 1.app com.tencent.xinWeChat.clone1
WeChat Clone 2.app com.tencent.xinWeChat.clone2
WeChat Clone 3.app com.tencent.xinWeChat.clone3
环境检查:
$ wechat-clone doctor
正在检查环境...
✓ 系统平台: macOS
✓ 微信应用: 已找到: /Applications/WeChat.app
✓ codesign: 可用
✓ PlistBuddy: 可用
✓ 写入权限: /Applications 可访问
✓ 磁盘空间: 请确保有足够空间(每个分身约 400MB+)
✓ 已有分身: 暂无分身
环境检查通过! 可以正常使用。
不想敲命令?直接运行 wechat-clone 进入交互式 TUI 界面,方向键选择,回车确认:
微信分身管理工具
使用 ↑↓ 键选择,Enter 确认,q 退出
▸ 创建分身
查看分身列表
启动分身
修复分身
删除分身
环境检查
↑/↓ 移动 • Enter 选择 • q 退出
安装
brew install star-plan/tap/wechat-clone
没装 Homebrew 也可以去 GitHub Releases 下载二进制,丢到 /usr/local/bin/ 就行。
它做了什么
说白了就是把知乎教程里的手动步骤自动化了。每创建一个分身,工具会依次执行:
sudo cp -R复制 WeChat.appsudo PlistBuddy修改Info.plist中的CFBundleIdentifiercodesign --force --deep --sign -ad-hoc 重新签名xattr -rd com.apple.quarantine清除隔离属性
跟手动操作完全一样,只不过不用你自己敲命令了。
修复(repair)就是重复步骤 2-4,微信更新后跑一下就行。删除(remove)就是 sudo rm -rf,带二次确认防手滑。
命令速查
| 命令 | 说明 |
|---|---|
wechat-clone |
进入交互式 TUI 界面 |
wechat-clone doctor |
检查环境是否满足要求 |
wechat-clone create 3 |
创建 3 个分身 |
wechat-clone create 3 --force |
覆盖已存在的分身 |
wechat-clone list |
列出所有分身 |
wechat-clone open |
显示分身路径,引导在 Finder 中启动 |
wechat-clone repair |
修复所有分身签名 |
wechat-clone repair 2 |
修复指定分身 |
wechat-clone remove 2 |
删除指定分身(有确认) |
wechat-clone remove all --force |
强制删除所有分身 |
技术栈
| 组件 | 选择 | 理由 |
|---|---|---|
| 语言 | Go | 单二进制分发,无运行时依赖 |
| CLI 框架 | cobra | Go CLI 标准选择,命令结构清晰 |
| TUI 框架 | bubbletea + lipgloss | Charm 家族,现代终端 UI 方案 |
| 构建/发布 | GoReleaser | 自动编译多架构 + 推送 Homebrew Formula |
项目结构也还算清晰:
wechat-clone/
├── main.go
├── internal/
│ ├── app/ # 业务逻辑(CLI 和 TUI 共享)
│ ├── cli/ # Cobra 命令定义
│ ├── macos/ # macOS 系统操作封装
│ └── tui/ # Bubble Tea 交互界面
分层设计的好处是 CLI 和 TUI 复用同一套业务逻辑,不用写两遍。internal/macos/ 把所有 macOS 特定操作(PlistBuddy、codesign、xattr)都封装好了,上层只管调用。
一些细节
启动方式:创建完分身后,工具不会自动帮你打开微信,而是显示路径引导你去 Finder 里手动启动。主要是自动启动(nohup 调二进制 or open 命令)在不同 macOS 版本上行为不太一致,手动启动反而更可靠。双击 .app 就行,也可以拖到程序坞固定。
编号管理:删除分身 2 后再创建,新分身会是编号 4 而不是填补 2 的空位。简单可靠,不会出现编号冲突的问题。
sudo 权限:复制和修改 /Applications 下的文件需要 sudo,工具会在需要时自动请求,终端会提示输入密码。
数据隔离:每个分身有独立的 Bundle ID,微信会为每个分身创建独立的数据目录,互不影响。多个分身可以同时登录不同的账号。
写在最后
本质上就是一个把 5 条终端命令打包成一个工具的小项目,没什么黑科技。但确实省了不少事——尤其是需要多开或者微信更新后要重新签名的场景。
源码在 GitHub,Apache 2.0 协议,欢迎提 issue 和 PR。
就这样了 👋
程序设计实验室
微信公众号