Skip to content

About

Native macOS app for WeChat anti-recall. 保留撤回消息,原生 SwiftUI,免费开源。

Topics

Resources

Stars

34 stars

Watchers

0 watching

Forks

Repository files navigation

中文 | English

菜单“配置与更新…”可选择使用系统 iCloud 记住提示样式与自动检查后重打偏好,也可导出、导入配置。微信路径、当前机器是否曾打补丁、登录项与系统权限不迁移;恢复配置不等于授权修改新机器上的微信。菜单“检查更新…”按需读取本发行渠道的新版本。

WeChatUnrevoke 应用图标

WeChatUnrevoke

撤回之后,消息仍在。
为 Mac 微信保留被撤回的消息。原生 SwiftUI,一屏完成检查、开启与还原。

产品主页 · 直接下载 · 使用指南 · 反馈问题 · English

最新版本 macOS 13 及以上 支持 Apple Silicon 与 Intel AGPL-3.0

WeChatUnrevoke 中文实机界面:保护状态、保留提示、自动重打与诊断

真实应用截图:微信 build 269627 测试副本,防撤回与更新拦截均已生效。其他版本支持情况以检查结果为准。

第一次用?看着视频一步一步做

打开产品主页:直接下载、安装图解、播放演示。不需要 GitHub 账号,安装包和视频直接从产品站获取。

当前界面导览 点开就能看
未开启、完整生效、仅防撤回生效 播放状态导览

安装遇到拦截怎么办 · 常见问题

仓内导览使用 v1.0.13 生产主界面离屏渲染和虚构状态,不执行真实微信补丁或消息操作,不代表性能,也不演示配置与更新窗口。线上导览版本以产品页实际标注为准;产品页另保留 v1.0.4 与 build 269627 测试副本的历史实录,并明确标注旧版按钮差异。录制与验证说明。

把命令行留给引擎

反馈与适配记录请带上微信的完整版本、build 和安装渠道;原版安装包可按 SHA256 校验。字段对应与只读提取方法见 微信版本与安装包校验。

不用手动查构建号,也不用记住补丁命令。WeChatUnrevoke 读取你的微信状态,告诉你能做什么,再把操作交给内嵌的 WeChatTweak 引擎。适合希望保留聊天消息、又想用图形界面检查和管理补丁的 Mac 用户。

你想做的事 应用怎么帮你
保留消息,也知道对方撤回过 默认「保留提示」:私聊保留消息和撤回提示;群聊保留消息,暂不显示提示。
安静地保留消息 切换「静默」,不显示撤回提示。
看清是否已生效 状态由引擎统一判定,详情分别显示防撤回、更新拦截和签名权限。
减少更新造成的补丁丢失 默认尝试拦截自动更新;满足无需密码、微信已退出、曾完整保护成功等条件时,自动重新打补丁。
拦不住自动更新的版本 防撤回与拦截自动更新各自独立执行:拦不住更新(App Store 版由 App Store 负责更新,或更新器尚未收录)时照常开启防撤回,并写明原因。
撤销操作或报告问题 一键还原补丁字节;失败后保留日志,可复制完整诊断报告。

免费开源,无激活码。无需关闭 SIP,无内核扩展,无常驻 root helper。 原生 SwiftUI 前端,内嵌 Swift CLI,没有 Python 运行环境。补丁库可联网更新;引擎规则或界面有变化时仍需更新应用。

历史实测:以下数据属于 v1.0.13 (99),不代表当前公开下载 v1.0.14;新版的内存、CPU、启动速度与安装后占用待测。运行指标的对象是本机安装 GUI 的 LSUIElement 隔离副本,只读检查微信状态并离屏绘制首屏。该装机主程序与原公开 ZIP 的摘要不同,运行指标只描述此装机 GUI;表中下载大小独立取原正式 Release ZIP,不能把两者的安装后占用混用。版本、设备与日期由表下小字列明,原始实测保留在 perf/lightweight.json;下载页另从经过 SHA256 校验的当前发行 ZIP 读取包内展开大小。

资源占用

安装包 空闲内存 空闲 CPU 冷启动到首屏就绪
2.8 MB(装好后 5.9 MB) 29.4 MB 0% 2.2 s

原生 SwiftUI 界面,无 Python 运行时;读写微信交给包内的 Swift 命令行引擎。窗口打开时每 60 秒只比对一次微信安装包里 5 个路径的文件指纹(不到 1 毫秒),微信没被更新、打补丁或还原就不启动引擎,另每 30 分钟完整检查一次兜底;关窗即停,无常驻后台服务。发布包剥离调试符号。

v1.0.13 (99) · Mac16,12 / Apple M4 / macOS 27.2 · 当前装机GUI的LSUIElement隔离副本;只读本机微信体检并离屏绘制首屏,不联网、不打补丁、不写偏好。 · 2026-10-11。数字来自所列版本与设备的测量记录;当前版本与测量范围以本页说明为准。内存口径为 phys_footprint;CPU 为 60 秒采样窗内 CPU 时间 ÷ 墙钟;大小按十进制 MB。原始数据见 perf/lightweight.json。

三步开始

1. 安装最新版

在产品主页直接下载,也可以从 GitHub Release 获取 WeChatUnrevoke-<版本>.zip,解压后将 WeChatUnrevoke.app 拖进「应用程序」。升级前退出旧版;从旧名 Unrevoke 升级时,把旧 app 移到废纸篓,避免出现两个入口。设置沿用原 bundle ID,不需要重新配置。

也可以使用 Homebrew:

brew install --cask zengtianli/tap/wechat-unrevoke
# 已安装:brew update && brew upgrade --cask zengtianli/tap/wechat-unrevoke

发布物采用 ad-hoc 签名,没有 Apple 开发者 ID 签名或公证。确认来源是本仓库后,若 macOS 阻止打开,可按以下方式移除这份 app 的下载隔离标记:

xattr -dr com.apple.quarantine /Applications/WeChatUnrevoke.app

2. 退出微信,点击开启

打开 WeChatUnrevoke,保持「保留提示(推荐)」,点击「开启防撤回」。系统要求时输入管理员密码,等待重签名结束。⌘R 可以重新检查状态。

防撤回与拦截自动更新是两个独立功能,一个做不了不影响另一个。App Store 版微信由 App Store 负责更新,没有可拦截的内置更新器;有些版本的更新器暂未收录。这时状态显示「防撤回已生效」,下方写明拦不住更新的原因:App Store 版请在 App Store 设置里关闭自动更新;其他版本在微信更新后按提醒重新开启即可。

若提示 You don’t have permission to save ... wechat.dylib、Permission denied 或 Operation not permitted,说明写文件被拒绝;即使日志已显示 Matched config: build 269631,也仍需处理写入权限。先到 系统设置 → 隐私与安全性 → App 管理,允许 WeChatUnrevoke 修改其他 App;没有条目时用 + 添加当前运行的 WeChatUnrevoke.app。完全退出并重开 WeChatUnrevoke,然后重试。更新 WeChatUnrevoke 之后要重新授权一次:本应用是 ad-hoc 签名,系统的这项授权只认授权时的那一版,更新后列表里的开关可能仍显示打开,写入却照样被拒;此时选中 WeChatUnrevoke 用 − 移除,再用 + 添加当前这份。使用 CLI 时应授权启动命令的终端应用。

管理员密码不能代替 App 管理授权。Apple 的说明中,该权限用于允许修改其他应用。相同报错也可能来自文件所有者、ACL 或锁定状态;授权后仍失败,请附上完整诊断报告,继续排查。v1.0.5 起应用会显示此指引,保留原始日志,并在权限失败后暂停本次运行的后台重试,直到你手动重试或重开应用;失败后仍会检查补丁的真实状态。

3. 检查结果,再打开微信

展开「详情」,确认 防撤回:已生效、签名权限:完整。仅防撤回模式可能显示 「部分保护已生效」,这是更新未被拦截的状态,并不等于防撤回失败。自行打开微信,用一条真实被撤回的消息验证。

微信更新可能清除补丁,更新后请重新检查。遇到问题,点击「复制诊断报告」,在 Issues 附上 app version、last engine log 和 last write error;发布前删去不想公开的个人路径。

运行要求与边界

  • 最低 macOS 13,Apple Silicon / Intel。 v1.0.12 起最低系统为 macOS 13(v1.0.11 及更早为 macOS 15)。双架构部署与链接检查不等于 macOS 13 或原生 Intel 实机验证,这两类机器上的实际表现以使用者反馈为准。补丁支持按微信 build 和架构而异,以引擎实际检查结果为准;universal 安装包不代表所有微信版本均有双架构补丁。
  • 适配以微信官网最新稳定版为准。 版本覆盖由补丁库决定;缺失的旧构建建议先更新到支持表列出的官网稳定版。App Store 版的 build 可能不同。微信更新后需要重新打补丁;联网退出并重开 WeChatUnrevoke 可刷新补丁库。没有收录的版本会明确提示,不猜地址写入。
  • 群聊暂不显示撤回提示。 即使选「保留提示」,群聊也只保留消息。私聊提示位置也不保证紧贴原消息。
  • 仅防撤回不拦截自动更新。 此模式不等于完整保护;更新后需要重新检查。
  • 不是微信官方产品,与腾讯无隶属关系。 本工具修改本机微信客户端,请自行了解并承担客户端修改和使用风险。它不读取或上传聊天内容;补丁库更新请求访问 GitHub,点击帮助链接会打开项目主页。

开源、反馈与传播

由 zengtianli 维护。觉得有用,可以 Star 本仓库,把下载页分享给同样使用 Mac 微信的朋友。版本适配、可复现问题和文档改进欢迎提交 issue 或 PR。

介绍本项目可直接使用 产品素材包:统一名称、图标、中英简介、真实截图和下载链接。截图展示应用功能,不代表每个微信 build 都已验证。

从源码构建

git clone https://github.com/zengtianli/WeChatTweak
git clone https://github.com/zengtianli/WeChatUnrevoke
cd WeChatUnrevoke
ENGINE_REPO=../WeChatTweak ./build.sh

需要适用的 Xcode 工具链和 python3(用于随仓的构建检查)。使用 xcode-select 或 DEVELOPER_DIR 选择 Xcode,不需要维护者本机的工具目录。build.sh 构建并嵌入 universal 引擎、打包配置、ad-hoc 签名并安装应用;只构建可用 INSTALL_APP=0 ENGINE_REPO=../WeChatTweak ./build.sh,回归检查运行 bash tests/run.sh。双架构发布使用 release.sh,它从构建产物直接打包,不安装也不替换本机已装的应用。bundle ID 保持 io.github.zengtianli.unrevoke,显示名与发行包统一为 WeChatUnrevoke。

维护者发布前先做 GUI 副本验收,更新 Info.plist 版本和 docs/releases/<版本>.md,提交后运行:

python3 scripts/publish.py docs/releases/1.0.5.md

发布入口运行回归测试、构建、打包、推送、草稿上传、下载校验、公开发布、Homebrew 同步及产品主页部署。网站下载版本和校验值读取最新公开 Release;已有同版本 Release 不会覆盖。产品主页经 Lintel 上线(重建站点目录、检查、验收、部署并回读线上),站点目录只带当前版本的安装包,旧版本留在 GitHub Releases。主页未上线时,已公开的 GitHub Release 不会撤销,发布入口以退出码 3 结束并打印续接命令;修复后只运行该命令(~/Dev/.venv/bin/python ~/Apps/lintel/engine/lintel.py site ship --site unrevoke --work ~/Library/Caches/unrevoke-site-ship --json),不要重跑发布入口,也不要直接运行 scripts/deploy-site.sh(未经 Lintel 验收的目录会被它的闸拒绝)。实机验收仍需完成,不自动发送 issue 评论。

致谢与许可

基于 sunnyyoung/WeChatTweak,引擎维护于 zengtianli/WeChatTweak。4.x 保留提示思路参考 fzlzjerry/wechat-antirecall。感谢提供兼容性反馈与复现日志的使用者。

代码采用 AGPL-3.0。图标由 Seedream 生成,来源记录见 icon/provenance.json。

About

Native macOS app for WeChat anti-recall. 保留撤回消息,原生 SwiftUI,免费开源。

Topics

Resources

Stars

34 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages