DiffTools 是一款完全本地运行的 macOS 文本差异对比工具。应用使用 Swift 和 macOS 原生界面实现,不包含 Electron、WebView 或 HTML 运行时;输入内容不会离开设备。
- 左右双栏输入并实时展示文本差异
- 使用高对比配色清晰标记新增、删除和修改内容
- 默认使用 16pt 等宽中等字重正文,并支持
⌘+/⌘-缩放、⌘0恢复默认大小;字号会自动保存 - 交换左右内容、清空内容以及复制结果
- 将逐行数据按字典序重排后再对比
- 解析 JSON,并将对象中的 key 递归按字典序重排后再对比
- 所有处理均在本机离线完成
- macOS 13 Ventura 或更高版本
- Intel(
x86_64)或 Apple Silicon(arm64)Mac
在仓库的 GitHub Releases 页面下载与 Mac 匹配的安装包:
- Intel Mac:
DiffTools-<版本>-macOS-x86_64.dmg - Apple Silicon Mac:
DiffTools-<版本>-macOS-arm64.dmg
打开 DMG,将 DiffTools.app 拖入 Applications 文件夹。
CI 使用 macOS ad-hoc 本地自签名(codesign --sign -)签署 .app 和 .dmg。这种签名可在构建与校验阶段发现签名后发生的文件修改,但不包含开发者证书,不能证明发布者身份,也不是 Apple Developer ID 签名;安装包未经过 Apple 公证。因此 macOS 第一次打开时会显示“无法验证开发者”等 Gatekeeper 提示,这是预期行为。
确认安装包来自本仓库且 SHA-256 与 Release 中的 .sha256 文件一致后,可在 Finder 中按住 Control 点击 DiffTools.app,选择“打开”,再在提示中选择“打开”。通常只需执行一次。
如果 Finder 仍阻止启动,也可以在确认下载来源与校验值后执行:
xattr -dr com.apple.quarantine /Applications/DiffTools.app校验下载文件:
shasum -a 256 -c DiffTools-0.2.0-macOS-arm64.dmg.sha256需要 Xcode 15 或更高版本(Swift 5.9+)。完整 Xcode 同时提供运行 XCTest 所需的测试运行时;仅安装 Command Line Tools 的环境可能只能构建而无法运行测试。
运行测试:
swift test运行开发构建:
swift run DiffTools在当前 Mac 的原生架构上创建自签名 DMG:
./scripts/package-dmg.shad-hoc 签名不创建或导入任何证书,不访问 Keychain,也不需要 sudo。它适合无需 Apple Developer 账号的开源构建,但无法消除 Gatekeeper 提示。
也可以明确指定架构和输出目录:
./scripts/package-dmg.sh x86_64 "$PWD/artifacts/x86_64"
./scripts/package-dmg.sh arm64 "$PWD/artifacts/arm64"指定的架构必须受当前 Swift 工具链与主机支持。GitHub Actions 分别在原生 Intel 和 Apple Silicon runner 上构建,因此发布文件不会依赖 Rosetta 交叉编译。
可用环境变量覆盖打包元数据:
| 变量 | 默认值 | 说明 |
|---|---|---|
PRODUCT_NAME |
DiffTools |
.app 和 DMG 中显示的产品名 |
EXECUTABLE_NAME |
DiffTools |
Swift Package 可执行产品名 |
BUNDLE_IDENTIFIER |
com.qinggeng.DiffTools |
App Bundle Identifier |
MINIMUM_MACOS_VERSION |
13.0 |
最低 macOS 版本 |
VERSION |
0.2.0 |
显示版本及 DMG 文件名版本 |
BUILD_NUMBER |
GitHub run number 或 1 |
App 构建号 |
APP_ICON_PATH |
target 的 Resources/AppIcon.icns |
可选应用图标路径 |
DISABLE_SWIFTPM_SANDBOX |
0 |
设为 1 时给 SwiftPM 追加 --disable-sandbox,仅用于已由外层沙箱隔离的受管环境 |
正常本机和 CI 构建应保留 SwiftPM 默认沙箱。只有在外层沙箱明确导致嵌套 sandbox-exec 失败时,才使用 DISABLE_SWIFTPM_SANDBOX=1。
.github/workflows/ci.yml 在推送到 main、Pull Request 和手动触发时运行。矩阵任务会:
- 在
macos-15-intel上运行测试并构建x86_64App; - 在
macos-15Apple Silicon runner 上运行测试并构建arm64App; - 对 App 和 DMG 执行 ad-hoc 本地自签名,并通过
codesign --verify验证; - 用
lipo -info验证可执行文件架构; - 用
hdiutil verify验证并实际挂载 DMG,检查其中的 App 后再上传 artifacts。
创建版本 Release:
git tag v0.2.0
git push origin v0.2.0v* tag 的两个架构任务全部成功后,工作流会校验 SHA-256,并创建或更新对应 GitHub Release,上传两个 DMG 和两个校验文件。
本项目基于 MIT License 发布,详见 LICENSE。