Releases: syncmeta/PendingNet
Release list
PendingNet 0.3.33
自建代理的一套自用客户端。你需要一台自己的 VPS——这个仓库不托管任何服务端。
这一版:TUN 和系统代理下也有统计了
0.3.32 把统计做成了 App 自带、不再需要手工配,但只有「仅端口」这一种接管方式真的能看到数据;TUN 和系统代理下界面上只写了一句「暂时没有统计」。而按应用看流量,恰恰是 TUN 下才最有意义。
原因是这两种接管方式的 sing-box 由特权助手以 root 另起,它的 Clash API 密钥按设计不交给 App,采集器因此连不上去。这一版照既有的路由模式切换那条先例解决:采集器改由特权助手管——助手起引擎时把它一并拉起、停引擎时一并停掉、换配置时重来一遍,密钥全程留在助手一侧,既不出现在命令行上也不落进日志。App 那边照旧只从统计端口读,不需要知道自己处在哪种接管方式。
配套的几条:
- 三种接管方式同一时刻只有一个采集器,切换时两侧都先无条件停掉自己那份,不会两个抢同一个端口。
- 三种方式写同一个数据库,切换接管方式不会让历史统计清零。
- 助手以 root 拉起采集器时会先降到登录用户身份,数据库及其 -wal/-shm 不会变成 root 所有。
- 统计页那句没有下一步的话删掉了,现在分「还没连接」「这段时间没流量」「采集器起不来(带原因和怎么查)」「助手还是旧版(怎么办)」。
助手 XPC 接口升到版本 5,旧助手由既有的版本握手自动退场,不需要重新授权。
docs/stats-service.md 记了这套东西归谁管、密钥怎么流、以及装上之后逐条验什么。
VPS 一键部署
curl -fsSL https://raw.githubusercontent.com/syncmeta/PendingNet/main/deploy/vps-install.sh | sudo bash跑完直接给一条 pendingnet:// 配对链接,在装了 PendingNet 的 Mac / iPhone 上点一下就完成导入。
系统要求和硬性前提
- macOS 14 或更高。安装包经 Developer ID 签名并通过 Apple 公证。
- 装完要去「系统设置 → 通用 → 登录项与扩展」打开 PendingNet 的后台项目——不打开,TUN 和系统代理两种模式都用不了。
- 要连上必须有一台自己的 VPS,用上面那条命令装好并生成配对链接。
已知边界
arm64 的服务端二进制只是交叉编译出来的,没在真 arm64 机器上跑过。iOS 版只能走 App Store / TestFlight。
PendingNet 0.3.32
自建代理的一套自用客户端。你需要一台自己的 VPS——这个仓库不托管任何服务端。
这一版的重点:统计不再需要手工配
以前 macOS 客户端的「实时 / 应用 / 域名」三个页面,对绝大多数人是永远打不开的:统计数据由一个独立的采集器提供,而 App 从来不安装、也不启动它,界面上也没有任何地方能启用——只有当年手工做过 deploy/install.sh 的机器才碰巧有。现在改成:
- 采集器随 App 走(打进安装包并纳入签名),不再依赖机器上装没装过什么。
- 它跟代理引擎同生命周期:引擎起来它就起,引擎停掉它就停。换 VPS、换端口、改分流都会让引擎就地重启,这些路径走的是同一个入口,不会漏。
- 访问引擎的密钥每次现读,引擎重新生成密钥之后统计会自己恢复,不再静默失灵。
- 默认端口被占时会说清是谁占的、怎么查,必要时自动改用另一个端口;旧机器上遗留的采集器会被干净接管,历史数据不丢。
- 统计页那句没有下一步的「统计服务尚未启用」删掉了,换成四种能看出该做什么的说法:还没连接 / 这段时间没流量 / 采集器起不来(带原因)/ 在跑但这次没读到。
同时修掉采集端一个真 bug:监听端口被占用时它把错误吞掉了,进程活着但一个字节都不服务。
VPS 一键部署(0.3.31 引入,这一版继续改进)
curl -fsSL https://raw.githubusercontent.com/syncmeta/PendingNet/main/deploy/vps-install.sh | sudo bash跑完屏幕上直接给一条 pendingnet:// 配对链接,在装了 PendingNet 的 Mac / iPhone 上点一下就完成导入。这一版脚本的改动:
- 每次跑都会把机器上的服务端对齐到该用的版本。此前在装过旧版的机器上重跑,会沿用旧二进制、吐出老格式的
.pdnJSON 而不是链接。 - 生成后加了兜底检查:拿到的不是
pendingnet://链接就不算成功,直接说清原因。 - 新增
pendingnet-server version,一句话查清机器上装的是哪一版。 - 输出砍到只剩进度和链接;详细日志落到
/tmp/pendingnet-install.log,说明性内容进--help和 README。
系统要求和硬性前提
- macOS 14 或更高。安装包经 Developer ID 签名并通过 Apple 公证。
- 装完要去「系统设置 → 通用 → 登录项与扩展」打开 PendingNet 的后台项目——不打开,TUN 和系统代理两种模式都用不了。
- 要连上必须有一台自己的 VPS,用上面那条命令装好并生成配对链接。
已知边界
arm64 的服务端二进制只是交叉编译出来的,没在真 arm64 机器上跑过。iOS 版只能走 App Store / TestFlight。
PendingNet 0.3.31
自建代理的一套自用客户端。你需要一台自己的 VPS——这个仓库不托管任何服务端,下载了 app 也连不上任何现成节点。
这一版的重点:VPS 那头变成一条命令
在一台全新的 Debian VPS 上以 root 执行:
curl -fsSL https://raw.githubusercontent.com/syncmeta/PendingNet/main/deploy/vps-install.sh | sudo bash脚本自己探公网 IP、下载并校验服务端二进制(下不到就现场装 Go 编译)、装好并启动服务,最后在屏幕上打印一条 pendingnet:// 配对链接。在装了 PendingNet 的 Mac / iPhone 上点一下那条链接就完成导入,链接被聊天软件吞掉时也可以整条复制、粘进 App 连接页的「粘贴链接导入」框。
再要一条链接就跑 sudo pendingnet-server pair create。凭据规则没变:默认十分钟过期、只能用一次、一台设备一份——它等同于密码,别往公开地方贴。
脚本不会替你改防火墙,跑完会把需要放行的三个入口(443/tcp、443/udp、7443/tcp)列出来,你自己在云厂商安全组里开。第二次在同一台机器上跑只补一条新链接,不动在跑的服务;要重做部署得显式加 --force-provision(已配对的客户端会立刻失效)。
其他改动
- 配对文件多了一种形态:一条
pendingnet://链接。macOS 和 iOS 都注册了这个 scheme,点一下直接唤起配对。原来的.pdn文件一个字没删(pair create --format json --out xx.pdn)。 provision加了--force,允许重做自己装过的机器;中途失败会把停掉的服务原样拉回来。- 发布产物新增 Linux 服务端二进制(amd64 / arm64)和
SHA256SUMS,一键脚本据此秒装。
系统要求和硬性前提
- macOS 14 或更高。安装包经 Developer ID 签名并通过 Apple 公证。
- 装完要去「系统设置 → 通用 → 登录项与扩展」把 PendingNet 的后台项目打开——不打开,TUN 和系统代理两种模式都用不了。
- 要连上必须有一台自己的 VPS,按上面那条命令装好
pendingnet-server并生成一条配对链接。
已知边界
arm64 的服务端二进制只是交叉编译出来了,从没在真的 arm64 机器上跑过。一键脚本在容器里跑通了全套场景,但公网入站(云厂商安全组这类)只能在真机上验。iOS 版不能从这里分发,只能走 App Store / TestFlight。
PendingNet 0.3.30
修一个 0.3.29 没修对的问题。
这一版改了什么
- 菜单栏图标把整条菜单栏占满了。 0.3.29 试过在界面代码里给图标加尺寸限制,装上去毫无变化——
MenuBarExtra的 label 只取原样的Image,加在上面的.resizable()/.frame()会被丢掉。实测已装的 0.3.29 里NSImage.size仍是 756×630 点(菜单栏总共才 22 点高)。真正的原因是图标资源本身就是一张 756 点的大图,从来没按菜单栏尺寸出过。现在按 22×18 点出 @1x/@2x/@3x 三档,编译后的Assets.car里是 22×18 @1x / 44×36 @2x。
0.3.29 的其余内容(DNS 缓存冲刷、换网卡自愈收窄、引擎优雅重启)见 0.3.29 的发布说明。
用之前要知道的
- 需要一台你自己的 VPS,上面装好
pendingnet-server并生成一份配对凭据(.pdn文件或配对链接)。这个 App 本身不提供任何节点。 - macOS 14 或更高。安装包经过 Developer ID 签名和 Apple 公证。
- 装完要去「系统设置 → 通用 → 登录项与扩展」把 PendingNet 的后台项目打开,否则 TUN 和系统代理两种接管方式都用不了。
完整提交记录:v0.3.29...v0.3.30
PendingNet 0.3.29
PendingNet 是一个 macOS / iOS 客户端,把 sing-box 的流量按「哪个 App」拆开统计,并管理你自己那台 VPS 上的节点。项目说明见 README。
这是本仓库的第一个 GitHub Release。 已经装了 App 的人一直从内置的自动更新通道收更新,这条通道是给第一次来的人下载用的。
用之前要知道的
- 需要一台你自己的 VPS,上面装好
pendingnet-server并生成一份配对凭据(.pdn文件或配对链接)。这个 App 本身不提供任何节点——没有服务端,下载下来打开也连不上。 - macOS 14 或更高。安装包经过 Developer ID 签名和 Apple 公证,Gatekeeper 直接放行。
- 装完要去「系统设置 → 通用 → 登录项与扩展」把 PendingNet 的后台项目打开。 不打开的话,TUN 和系统代理两种接管方式都用不了。
怎么装
下载 PendingNet-0.3.29.zip,解压后把 PendingNet.app 拖进「应用程序」。
这一版改了什么
修复
- 菜单栏图标把整条菜单栏占满了。 图标只被限定了高度、宽度没约束,系统就按图片原始尺寸(756pt)给它腾地方。现在宽高一起钉死。
- 被污染的 DNS 记录会一直缓存着,只有重启电脑才能恢复上网。 开机那几秒代理还没起来,系统去问上游 DNS 拿回一条投毒应答,之后就一直用这条假记录——重启引擎、换代理软件都救不回来。现在引擎启动、切换接管方式、应用配置、换网卡自愈、停止引擎这五个时刻各冲一次系统 DNS 缓存。
- 换网卡自愈会白重启引擎。 过去只要默认网关变了就判定「换网卡了」,于是兜一圈回到同一条链路也会把引擎踢一遍。现在只有网卡或地址真的变了才重启。
- 重启引擎不再 SIGKILL 硬杀。 先请 sing-box 自己退(拆掉 TUN、还原系统网络),确认进程真的没了再拉新的,5 秒不退才补刀。原来的硬杀加立刻重拉会让新进程绑不到网卡——起来了却没网。重启后还会自检一次,没绑上就再来一次。
改进
- 菜单栏换成 PendingNet 自己的图标(明暗两套),面板里不再重复放品牌头。
- 错误提示改成浮层弹一下自动消失,不再作为一条常驻文字挂在卡片里。
- 后台服务的日志加了轮转,不会无限长下去。
- iOS 的路由档位和 macOS 对齐成 全局 / 白名单 / 黑名单 三档。
完整提交记录:v0.3.28...v0.3.29
PendingNet 0.3.28
这是什么:macOS / iOS 的 sing-box 客户端,配套 VPS 端控制服务与部署脚本。它想解决的是:配置文件把服务端材料和客户端策略混在一起、换设备要从头来一遍、而配置本身又是长期凭据。
下载:macOS 版在下面的 .zip(已签名并经 Apple 公证)。
状态:个人项目,只在作者自己的机器上长期使用过。arm64 VPS 没有验证过,iOS 真机长跑没有验收记录,没有 CI。详见 README 的「现在还不能做什么」。
测试:272 个用例,0 失败(Go 72 / Swift 200)。三个跳过的用例在 README 里写明了跳过原因。