【Mac 避坑指南】macOS 微信双开/重签名报错:`The following argument was not expected: --deep` 与 `SigTool::NotAMachOFi
1. 背景与问题复现在 macOS 上尝试对微信进行多开分身时我们通常会通过复制WeChat.app并修改Info.plist中的CFBundleIdentifierBundle ID来实现。但在进行最后的代码重签名codesign时频繁遭遇了以下两个极具迷惑性的报错报错一不识别--deep参数❯sudocodesign--force--deep--sign- /Applications/WeChat2.app The following argument was not expected:--deepRun with--helpformoreinformation.报错二去掉--deep后 C 运行时异常崩溃❯sudocodesign--force--sign- /Applications/WeChat2.app libcabi: terminating due to uncaught exception oftypeSigTool::NotAMachOFileException: std::exception[1]17610abortsudocodesign--force--sign- /Applications/WeChat2.app2. 原因深度剖析这两个报错接连出现其实暴露了两个核心问题原因一环境路径PATH被污染调用了“假”的 codesign原生的 macOScodesign绝对支持--deep参数。报错提示The following argument was not expected是典型的第三方 CLI 工具如 Python 虚拟环境中的某些工具、交叉编译链或第三方安全工具的风格。当直接在终端运行codesign时由于环境变量$PATH的优先级问题系统调用了同名的第三方伪劣工具导致不认识参数且直接发生SigTool异常崩溃。原因二微信 App 的复杂沙盒结构微信并不是一个单一的二进制文件它是一个.app包内部嵌套了大量的Frameworks如音视频组件和PlugIn如通知扩展。修改了Bundle ID后原有的签名链条断裂必须进行深度–deep递归签名否则即使主程序签名成功应用也会因内部组件签名不一致而闪退。3. 终极解决方案解决这个问题的关键在于绕过环境变量强制调用 macOS 原生系统路径下的正版codesign工具。请按照以下正确步骤操作步骤 1修改 Bundle ID确保你的分身应用有独立的 Bundle IDsudo/usr/libexec/PlistBuddy-cSet :CFBundleIdentifier com.tencent.xinWeChat2/Applications/WeChat2.app/Contents/Info.plist步骤 2使用绝对路径进行深度重签名明确指定使用/usr/bin/codesign并带上--deep参数让系统把微信内部所有的框架和插件像剥洋葱一样彻底重签一遍sudo/usr/bin/codesign--force--deep--sign- /Applications/WeChat2.app 备用小贴士如果依然提示报错说明微信内部某些第三方依赖库有更高级的校验可以直接锁定其核心二进制文件进行签名sudo /usr/bin/codesign --force --sign - /Applications/WeChat2.app/Contents/MacOS/WeChat4. 补充更优雅的“无感双开”方案如果你觉得重签名、改包名太麻烦且担心未来微信升级导致分身失效其实 macOS 原生自带一个绝对不封号、不破坏应用完整性的多开命令在终端中直接运行open-n/Applications/WeChat.app进阶玩法做成独立 App打开 Mac 自带的自动操作 (Automator)。选择新建应用程序 (Application)。在左侧搜索并双击添加运行 Shell 脚本 (Run Shell Script)。将默认的cat替换为open -n /Applications/WeChat.app。将其保存为“微信分身.app”到桌面。以后双击这个图标就能完美多开啦觉得有用的话点个赞和收藏吧如果有其他重签名问题欢迎在评论区交流。标签#macOS #微信双开 #codesign #命令行 #报错解决 #逆向工程