Mac 微信 4.0 以上版本加强了单实例检测机制,只要在当前包签名下已经有程序在运行了,则允许再继续开启新的进程。因此以前使用 nohup 命令运行的方式已不可用。本文介绍如何通过 Bundle ID 重签名方案实现微信多开。
Bundle ID 重签名实现微信多开
Bundle ID 重签名方案实现原理
微信官方 Mac 版的 Bundle ID 为 com.tencent.xinWeChat,系统通过这个标识符判断是否已有实例在运行。Bundle ID 重签名方案的核心原理是复制微信应用并修改其 Bundle ID 为 com.tencent.xinWeChat2,从而创建系统认为完全不同的两个独立应用。
什么是 Bundle ID?
Bundle ID(应用程序标识符)是 macOS 系统用于唯一识别应用程序的字符串,类似于应用的"身份证号"。
如何查看 App 的 Bundle ID
- 应用程序搜索到你的应用,点击右键,进入访达。
- 应用程序右键,点击显示包内容。
- 点击 Contents 文件夹,进到包里面,打开 Info.plist。
- 搜索 Key:CFBundleIdentifier,底下对应的 string 值就是包的签名 Bundle ID。
技术原理解析
📋 Bundle ID 机制:macOS 使用 Bundle ID 作为应用程序的唯一标识符,存储在应用包内的 Info.plist 文件中。系统启动应用时会检查该 Bundle ID 是否已有运行实例,如果存在则拒绝启动第二个实例。通过修改 Bundle ID,系统会将修改后的应用视为全新应用,从而允许多实例运行。
详细实现流程
1、复制微信应用
在 Mac 终端,执行以下命令:
# 在终端中执行以下命令
cd /Applications
sudo cp -R WeChat.app WeChat2.app
2、修改 Bundle ID
进到复制的应用包内部,使用 PlistBuddy 工具修改 Bundle ID(PlistBuddy 说明:这是 macOS 系统自带的 plist 文件编辑工具,无需额外安装):
# 进入复制的应用包内部
cd /Applications/WeChat2.app/Contents
# 使用 PlistBuddy 工具修改 Bundle ID
sudo /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.tencent.xinWeChat2" Info.plist
3、重新签名应用
修改 Bundle ID 后必须重新签名,否则应用无法启动。--force 参数强制覆盖原有签名,--deep 参数递归签名所有内部组件,-s - 使用本地临时签名(adhoc 签名)。
# 强制重新签名,允许应用在修改后正常运行
sudo codesign --force --deep -s - --timestamp=none /Applications/WeChat2.app
4、修改应用显示名称
修改新的包显示名称,以便在应用程序可以搜索到:


