Releases: TgolMsk/lan-send
Release list
lan-send 0.4.1
Mac App Store 重提:仅改“下载”文件夹用途说明,功能与 0.4.0 相同。
Fixed
- macOS “下载”文件夹的用途说明(
NSDownloadsFolderUsageDescription,Info.plist 与八种语言的InfoPlist.strings)改成“用途 + 具体例子”的写法。App Review 按 5.1.1(ii) 拒绝了 0.4.0 构建 22,认为原文案只说明了用途、没有举例;这条字符串编译在 App 内,需要新构建重新提交。
应用:macOS 打开 .dmg 把 lan-send 拖进“应用程序”(未签名版本首次打开需在“系统设置 › 隐私与安全性”允许),Windows 运行 -setup.exe(或 .msi)。命令行:lan-send-cli-* 的 .pkg / .msi 会把 lan-send 加入 PATH,压缩包免安装。校验和见 SHA256SUMS.txt。
lan-send 0.4.0
Added
- 界面支持八种语言(简中、繁中、英、日、韩、德、法、西),文案表移到
apps/app/src/locales/*.json,pnpm build前校验键集合与占位符;语言偏好成为设置项app.language(默认跟随系统),托盘菜单与文件对话框标题跟随该设置,iOS / macOS 的系统权限弹窗按*.lproj/InfoPlist.strings本地化(ADR-0016)。 - 核心层新增
runtime::ErrorCode:传输失败、配对失败、IPC 命令错误都带语言无关的编码,前端据此显示翻译后的提示,未编码的保留原文。 - 商店文案八种语言的草稿(
docs/store-listing.md§五)。 - iOS 与 Mac App Store 沙盒版加上
com.apple.developer.networking.multicast权利(Apple 于 2026-09-13 批准申请 HTFYV6DZUK)。此前这两种构建收不到也发不出组播公告,手机端只能靠电脑主动探测才会互相出现;现在与桌面版一样走组播发现。沙盒版的描述文件需重建后更新MAS_PROVISIONING_PROFILE,步骤见docs/release.md。
Fixed
- Mac App Store 沙盒版的默认接收目录显式指向真实的
~/Downloads:沙盒把$HOME及所有 Foundation 主目录查询都重定向到容器,directoriescrate 算出的是容器路径(只靠沙盒创建的符号链接才写到真实目录,设置页显示的也是容器路径)。macOS 上改用getpwuid_r取真实主目录。App Review 2.4.5(i) 的静态扫描看不见 Ruststd::fs的写入,曾判定com.apple.security.files.downloads.read-write无对应功能;显式路径加上审核备注里的说明是应对办法。 - 支持页(
docs/support.md)补上电子邮件联系方式与更完整的 FAQ;App Review 按 1.5 认为只有 GitHub issues 链接不算可用的支持渠道。
Changed
- 新图标:深蓝圆角方块内衬白底的衬线 L 与薄荷绿纸飞机(源图
docs/brand/logo.jpeg)。apps/app/scripts/make-icons.py从源图裁出满铺方形(iOS / Windows)、Apple 圆角模板(macOS)与侧栏品牌标,再由cargo tauri icon生成各尺寸;iOS 图标去掉 alpha 通道。商店截图随之重出。 - 应用改名为 LanSend(产品名、窗口标题、
CFBundleDisplayName、托盘、文档与商店文案);bundle idcom.wangsheng.lansend、数据目录lan-send、CLI 二进制名与 WiXUpgradeCode保持不变,升级不丢数据。 lan-send identity多打印一行Receive dir,方便确认文件会收到哪里。
Added
- iOS 发送时可以直接从相册选图片和视频:发送弹窗在移动端多一个“相册”按钮,走系统照片选择器(
PHPicker),选中的项目由系统复制到应用临时目录后按普通文件发送,不需要先存进“文件”App。选择类型从布尔的folders改为files / folders / media;Info.ios.plist补上NSPhotoLibraryUsageDescription。
应用:macOS 打开 .dmg 把 lan-send 拖进“应用程序”(未签名版本首次打开需在“系统设置 › 隐私与安全性”允许),Windows 运行 -setup.exe(或 .msi)。命令行:lan-send-cli-* 的 .pkg / .msi 会把 lan-send 加入 PATH,压缩包免安装。校验和见 SHA256SUMS.txt。
lan-send 0.2.0
首个带界面的版本:macOS 与 Windows 桌面应用(Tauri 2),iOS 通过 TestFlight 分发;命令行工具改名 lan-send-cli-* 继续随发布提供。
Added
- 发布流程:桌面应用包(macOS 通用
.dmg/.app.zip,Windows NSIS-setup.exe与.msi)与 iOS TestFlight 上传(配置 App Store Connect API Key secrets 后自动签名、打.ipa、altool上传;构建号取 GitHub 运行序号);命令行产物改名lan-send-cli-*。iOS 工程补上本地网络权限说明、Files 共享、出口合规声明;无 Downloads 目录的平台(iOS)默认把文件收到“文稿”。 - 里程碑 6:正式界面(
apps/app/src)——按docs/ui-style-reference.md的金融风格实现:深色对角渐变底、半透明卡片与白色重点卡片、薄荷绿单一强调色、单色速度曲线;桌面侧栏布局,窄屏(iOS)自动切到底部标签栏;设备(在线/收藏/配对、发送、配对、重命名、忘记、按地址发送、拖放发送)、传输(进行中的大数字进度卡、速度与剩余时间、逐文件进度、取消/移除/在文件夹中显示)、剪贴板(同步开关、立即推送、历史与重新复制)、历史、设置(常规/网络/剪贴板/应用);接收请求、PIN、同名冲突、配对(双向)、发送弹窗与提示条;中英文界面,深/浅色主题。浏览器假数据层可脱离 Tauri 预览。 - 里程碑 5:
lan_send_core::runtime——把 CLI 里的编排(接受请求、落盘、续传、历史、配对、剪贴板同步、发送重试)下沉为核心库的事件式运行时:Runtime::start启动服务、发现、探活与可选的剪贴板同步;所有需要用户决定的事情变成RuntimeEvent+ 应答方法(respond_incoming、respond_conflict、provide_pin、respond_pair_request、pair_confirm);设备列表合并发现结果与数据库;每 30 s 探活、两次失败发device-lost;进程内双实例集成测试覆盖 PIN、接受、拒绝、配对与解除配对。ADR-0013。 - 里程碑 5:Tauri 2 壳
apps/app(cratelan-send-app,加入工作区):cmd_<模块>_<动作>命令一一对应运行时 API(app / devices / transfer / pair / history / clipboard),运行时事件转发为event:<name>(含简报要求的六个),桌面端托盘菜单、全局快捷键(默认CmdOrCtrl+Shift+V推送剪贴板,可配置)、关窗隐藏到托盘;platform/{desktop,macos,windows,ios}.rs;前端骨架 Vite + React 19 + TypeScript、类型化 IPC 层与浏览器假数据层(里程碑 6 换成正式界面)。 - 设置新增
clipboard.syncEnabled(默认开)与app { globalShortcut, closeToTray, theme(默认 dark), autoAcceptPaired, notifications };历史、设备、剪贴板记录可序列化供 IPC 使用。 deny.toml把许可证检查限定到 macOS / Windows / iOS 目标三元组(Tauri 在 Linux 会链接 LGPL 的 GTK,Linux 不是目标平台)。
应用:macOS 打开 .dmg 把 lan-send 拖进“应用程序”(未签名版本首次打开需在“系统设置 › 隐私与安全性”允许),Windows 运行 -setup.exe(或 .msi)。命令行:lan-send-cli-* 的 .pkg / .msi 会把 lan-send 加入 PATH,压缩包免安装。校验和见 SHA256SUMS.txt。
lan-send 0.1.0
首个版本:命令行客户端,覆盖里程碑 1–3(协议、发现、传输、断点续传、IPv6、配对、剪贴板同步)。
Added
- 发布流程:推送
v*标签在 GitHub Actions 构建安装包并发布到 Releases——macOS 通用.pkg(有证书时签名与公证)、Windows.msi(WiX,加入 PATH)、各平台免安装压缩包、SHA256SUMS.txt;ADR-0012,流程见docs/release.md。 - 里程碑 3(第三部分):剪贴板文件列表同步——复制文件时转为带
x-lanext.intent = "clipboard"的普通传输,已配对的接收方自动接受并把收到的文件写入自己的剪贴板;receive与clip watch共用同一套接收逻辑;send的传输流程抽成可复用的transfer。 - 里程碑 3(第二部分):剪贴板同步——
ClipboardItem模型,POST /api/ext/v1/clipboard(JSON / multipart,仅限已配对设备,大小上限),同步引擎(回环防止环形缓冲、超限提示、并行推送),macOSNSPasteboard后端(changeCount轮询,PNG 优先、TIFF 转 PNG,文件 URL),Windowsclipboard-win后端(事件监听、PNG 优先、CF_DIB 转 PNG、CF_HDROP),敏感文本启发式,剪贴板历史(默认 50 条,图片存缓存目录),CLIclip watch / push / history。 - 里程碑 3(第一部分):设备配对——
POST /api/ext/v1/pair/unpair,双方各自显示由指纹派生的 6 位校验码并确认;服务端维护已配对指纹集合供私有端点鉴权;CLIpair <device>、receive处理配对请求、devices --unpair,设备列表标记 P。 - 里程碑 2(第三部分):IPv6——每个有 IPv6 的接口按索引加入
ff12::fd3a:e420组播组,HTTP 服务同时监听[::](v6-only),链路本地地址带 scope 回拨(自定义 DNS 解析器编码fe80::1%3),命令行目标支持[fe80::1%en1]:53317;设置ipv6可关闭。 - 里程碑 2(第二部分):断点续传扩展——
x-resume-token/x-resume-offsets、带Range的上传、GET /api/ext/v1/resume断点查询、会话内与跨会话恢复、上传空闲超时(30 秒)与会话闲置回收(10 分钟);进程内端到端测试覆盖中断后续传与官方式发送方的兼容路径。 - 里程碑 2(第一部分):
settings.json与 SQLite 持久化(传输历史默认 200 条、已知设备与收藏、断点记录表);发送文件夹(递归、跳过符号链接与隐藏文件、保留相对路径、发送前汇总);接收目录按设备 / 日期 / 类型分子目录,同名策略 rename / overwrite / ask;CLI 新增history、devices,send与receive读取设置并写入历史;发现阶段探测收藏与最近 7 天见过的设备地址。 - 里程碑 1:
lan-send-core的protocol(v2.2 DTO、x-lanext扩展字段、指纹)、transport(RSA-2048 自签名身份、强制/可选客户端证书的 rustls 策略、reqwest 客户端、axum 上传 API 服务端、流式落盘与 SHA-256/字节数校验、文件名净化)、discovery(每接口一个组播 socket、公告脉冲、HTTP register 回应、已知地址探测、/24 子网扫描回退)、store(应用目录、私钥文件权限)。 - CLI:
lan-send discover / send / receive / identity,PIN 交互、进度条、--auto-accept、--config-dir、--client-certs。 - 互操作测试
tests/interop/run.py:与官方localsend-cli1.18.2 双向收发(pexpect 驱动官方 TUI),CI 在 Linux 与 macOS 上运行。 - 仓库骨架:Cargo 工作区、
lan-send-core与lan-send-cli空壳、命令行参数定义。 - 文档:开发简报、LocalSend v2.2 接口核对清单、协议差异与扩展、三端平台约束、UI 视觉参考、ADR-0001 仓库布局。
- CI:macOS / Windows / Linux 格式与 clippy 与测试,iOS 交叉检查,Windows 与 macOS CLI 产物,cargo-deny 许可证检查,标签发布。
安装:macOS 双击 .pkg(未签名版本需在“系统设置 › 隐私与安全性”允许),Windows 运行 .msi(会把 lan-send 加入 PATH),或解压压缩包后把 lan-send 放到 PATH 里。校验和见 SHA256SUMS.txt。