Releases: zdx8/SyncEngine-macOS
Releases · zdx8/SyncEngine-macOS
Release list
sync-engine v1.0.0
macOS 原生数据同步工具。SwiftUI + Swift,零第三方依赖 —— 只用系统框架(SwiftUI / Foundation / CryptoKit / AppKit / Security / NetFS)。
核心取舍:用 SHA-256 内容指纹判断变更,而不是修改时间。 外接盘常是 FAT/exFAT(时间戳精度只有 2 秒),时钟也会漂移,靠时间戳判变更必然出错。
下载
| 机型 | 安装包 | SHA-256 |
|---|---|---|
| Apple Silicon(M 系列) | sync-engine-v1.0.0-arm64.dmg | b86cfabf6685689ddb0f5a819e7bb0893018ef09ce0dd56d8e2521aa0ab2e133 |
| Intel(x86_64) | sync-engine-v1.0.0-x86_64.dmg | a23e0f4b8ccb0f1345f46b92bbf1bd218b2a8f2db93f4458d0cb45ab0538b161 |
校验:shasum -a 256 <下载的文件>
首次打开会被 Gatekeeper 拦下
安装包是临时签名(ad-hoc)、未经 Apple 公证的版本,所以首次打开会被拦下。这是预期行为,不是缺陷 —— 绕过它需要开发者证书签名 + 公证。
放行方式:把 sync-engine.app 拖进「应用程序」后,右键 → 打开,或到「系统设置 → 隐私与安全性」点「仍要打开」。放行一次即可,之后正常双击启动。
系统要求
- macOS 14 或更高
- Apple Silicon 或 Intel 处理器(两种安装包分别对应)
本版包含
- 目录扫描与内容指纹 —— 递归遍历、逐文件 SHA-256;显式栈实现,不跟随软链接
- 并发哈希 —— 滑动窗口,实测 10 路并发比串行快 4.2 倍(283 → 1179 MB/s)
- 三个阶段分开计时 —— 遍历 / 哈希 / 合计分别统计,便于定位瓶颈
- 本地目录目标端 —— 路径逃逸双重校验(词法 + 软链接解析,且校验目标自身)
- SMB 目标端 —— 走系统 NetFS 框架挂载后复用本地驱动,自动复用已挂载的卷
- WebDAV 目标端 —— URLSession 直发 PROPFIND/PUT/MKCOL/DELETE,Basic/Digest 认证
- 凭据存系统钥匙串 —— 任务结构内只保存用户名,密码不落配置文件、不进日志
- 界面 —— 浅色 / 深色 / 跟随系统;任务可编辑;菜单栏常驻;关闭主窗口行为可选
⚠️ 本版功能并不完整
已完成的是引擎与目标端连接/读写原语,同步本身尚未实现。 以下能力当前不存在:
- 传输能力 —— 只能扫描源目录并列文件,不会真正写入目标端。界面上的「预览扫描」跑的是真实扫描,但它不等于同步。
- 增量同步 —— 每次扫描都全量重算哈希,无哈希缓存。十万文件级目录需要数十秒。
- 三方比对与冲突裁决 —— 目标端已被改动过的文件不会被识别,也不会产生冲突副本。
- 同步删除 —— 因缺少冲突裁决,该开关当前不存在。
- 断点续传、FSEvents 监听、任务与日志持久化。
上述限制在应用界面上有对应标注,详见 README。
验证
| 层 | 手段 | 结果 |
|---|---|---|
| 引擎逻辑 | swift test |
76 项通过(1 项 SMB 写入用例默认跳过) |
| 存储驱动 | 对进程内真实 WebDAV 服务端的完整往返;对真实 SMB 挂载的只读验证 | 通过 |
| 交付产物 | --selfcheck(跑的是 .app 内那份二进制) |
16/16 通过 |
| 界面渲染 | 单窗口截图 + 位图像素分析 | 外观矩阵 6/6 场景通过 |
两个安装包均已挂载并实跑自检确认(x86_64 经 Rosetta 运行)。
构建
git clone https://github.com/zdx8/SyncEngine-macOS.git
cd SyncEngine-macOS/SyncApp
swift build && swift test
bash Scripts/build_app.sh
bash Scripts/make_dmg.sh 1.0.0 arm64许可证
MIT © 2026 SyncEngine-macOS Contributors