
在 macOS 上想同时登录两个微信、两个 QQ,或者给工作/个人账号各自独立的 Claude、Cursor 实例,一直是个老痛点。系统默认把同一个 Bundle Identifier 的 App 当作单实例处理,数据、登录状态、权限几乎共享,切换账号非常麻烦。
Telegram对多账号比较友好的,因此直接用 open -n 就能很好支持Telegram不同账号、不同数据目录。
open -n -a Telegram --args -workdir ~/TelegramData1
open -n -a Telegram --args -workdir ~/TelegramData2
或
/Applications/Telegram.app/Contents/MacOS/Telegram -workdir ~/TelegramData1 &
/Applications/Telegram.app/Contents/MacOS/Telegram -workdir ~/TelegramData2 &
微信(WeChat)早期版本还可以用open -n 方式多开,4.x以后的微信有更强的单实例检测,经常直接激活已有窗口。即使启动成功,数据/登录状态通常仍共享,容易互相干扰。
可靠做法是类似iOS应用「克隆 App + 修改 Bundle Identifier + 重新签名」的多开的方案,让系统把它当成完全不同的应用。这也是各种多开脚本的核心原理。
但「克隆 App + 修改 Bundle Identifier + 重新签名」的门槛对普通用户门槛过高,因此有很多现成的针对特定应用的多开脚本,例如:
WeChat Multi-Instance Manager for macOS:https://github.com/nullbyte-lab/wechat-multi-open
claude-multiprofile:https://github.com/jmdarre-v/claude-multiprofile
有没有更通用的方案,能够支持常见的APP Clone?
最近开源社区出现了一个干净、原生的解决方案——App Clone。它不是脚本堆砌,也不是注入或虚拟机,而是一个真正的 SwiftUI 原生 macOS 应用,通过「克隆 App + 修改 Bundle Identifier + 重新签名」的方式,让系统把克隆出来的 App 当作全新应用对待。
App Clone:https://github.com/tobemaster56/app-clone
App Clone 的核心思路很直接:
- 复制原 .app 到新位置(自动编号,如 WeChat.app → WeChat2.app)
- 用 PlistBuddy 修改 CFBundleIdentifier(例如 com.tencent.xinWeChat → com.tencent.xinWeChat2)
- 清除扩展属性
- 用 ad-hoc 签名重新签名并验证
整个过程在一次管理员密码提示下完成,失败会自动清理半成品,不会留下垃圾。每个克隆体拥有独立的数据目录、登录状态、缓存和权限,真正做到互不干扰。
主要功能:
- 原生 SwiftUI 界面,支持简体中文(默认)、繁体中文、英文、日文
- 一键克隆 /Applications 下任意 App
- 自动编号与 Bundle ID 后缀
- 实时日志面板,能看到每一步命令
- 失败自动回滚,干净安全
- 不依赖第三方二进制、不注入、不用内核扩展
系统要求: macOS 13 Ventura 或更高版本,需要 Xcode Command Line Tools(用于 PlistBuddy 和 codesign)。
App Clone 的使用场景:
- 微信、QQ、Telegram、Discord 等多账号需求
- 需要严格隔离数据的工具(测试、客户端分离等)
- 不想用虚拟机或第三方容器的轻量用户
App Clone 的限制:
- 克隆不会自动跟随原 App 更新。原 App 更新后,建议删除旧克隆再重新生成。
- 部分沙盒(Sandbox)App 在重新签名后可能拒绝启动,这是系统限制,不是工具问题。
- 少数 App 在运行时会做额外单实例检测(超出 Bundle ID 之外),这些暂时无法被克隆。
- 第一次打开克隆 App 时,Gatekeeper 可能拦截,需要手动允许。
对于App Clone的限制,Parallel Spaces 、Parall 这两个收费软件做的比较好,有特殊需要可以考虑。Parall的官网对其技术原理解释得很清晰,值得一看。
Parall:https://parall.app/
Parallel Spaces:https://parallelspaces.app/