docs: 更新全客户端命名与构建分发文档

This commit is contained in:
2026-07-31 23:12:41 +08:00
parent 5ebab84ee3
commit 5d7bae41c5
5 changed files with 1234 additions and 216 deletions
+37 -9
View File
@@ -3,18 +3,18 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>cdrop — Changelog</title>
<meta name="generated-at" content="2026-06-28">
<meta name="source" content="cdrop · docs branch">
<title>Commilitia Drop — Changelog</title>
<meta name="generated-at" content="2026-07-31">
<meta name="source" content="Commilitia Drop · docs branch">
<!-- RUNTIME_CSS -->
</head>
<body>
<header class="page">
<div class="meta">
<h1>cdrop — Changelog</h1>
<h1>Commilitia Drop — Changelog</h1>
<p class="subtitle">时间倒序。细粒度迭代见 git 历史;本档只记录结构性 / 行为性变更与重要 fix。</p>
<p class="timestamp"><time>2026-06-28</time> · <span>docs branch</span></p>
<p class="timestamp"><time>2026-07-31</time> · <span>docs branch</span></p>
</div>
<div class="actions">
<!-- ACTIONS -->
@@ -25,6 +25,21 @@
<p class="lede">本 Changelog 自 2026-05-22 起以 HTML 格式维护。此前之变更可从 main 分支 <code>git log</code> 取得;下表为近期较显著之 commit。</p>
<h2>2026-07-31 — 全客户端正式命名、认证迁移与构建分发收口</h2>
<p>Windows、macOS、iPhone、iPad、Web 与服务端完成一次面向用户文本和可诊断协议面的统一。正式产品名固定为 <strong>Commilitia Drop</strong>;桌面端移除 “Desktop” 后缀,每个平台只保留一份正式客户端。</p>
<ul>
<li><strong>正式客户端矩阵</strong>Windows 使用 Wails x86-64macOS 继续使用 Wails ARM64iPhone 与 iPad 共用 SwiftUI targetWeb 使用 React SPA / PWA。原生 macOS target 仍是迁移候选,在功能对等、签名扩展和真机验收完成前不切换,也不作为第二个 macOS 客户端发布</li>
<li><strong>用户可见命名与协议</strong>:应用显示名统一为 “Commilitia Drop”;登录回调改为 <code>commilitia-drop://auth-callback</code>DataChannel 与 iOS 文件流 Scheme 改为 <code>commilitia-drop-file</code>Bonjour 服务类型改为 <code>_commilitia-drop._tcp</code>Auth Broker application key 原位迁移为 <code>commilitia-drop</code></li>
<li><strong>内部身份兼容边界</strong>Bundle ID、App Group、Keychain service、LaunchAgent label、环境变量、数据库与配置目录在不直接决定系统显示名时保持稳定,以保留既有权限、钥匙串和配置。稳定 AppId 本身不作为用户可见命名迁移对象</li>
<li><strong>认证链修复</strong>Broker、Caddy 与服务端 application key 同步后,修复桌面端“无法连接”以及 iPhone / iPad 在 Broker 批准后显示“登录失败”的问题;旧 session 允许失效,双移动端已重新登录验证</li>
<li><strong>macOS 分发</strong>:复用既有 Developer ID Application 证书,对 Wails ARM64 app 与 DMG 完成 hardened runtime 签名、Apple 公证、staple 与 Gatekeeper 验证;正式分发只保留公证 DMG</li>
<li><strong>Windows 与 iOS 安装</strong>Windows x86-64 客户端已以唯一正式文件安装并更新登录启动项,当前产物尚无 Authenticode 签名;iPhone 与 iPad 全程使用 CLI、复用既有 Apple Development 证书覆盖安装,不打开 Xcode GUI、不创建新证书</li>
<li><strong>分支收口</strong><code>native-transfer</code> 的原生数据面工作已并入 <code>main</code>,旧分支不再作为开发或发布入口</li>
<li><strong>流程文档与验证</strong>:新增 <a href="CLIENT_BUILD_INSTALL.md">全客户端构建与安装手册</a>,记录 Web / 服务端、Broker、Windows、macOS、iPhone、iPad 的构建、签名、安装、分发和验证步骤。代码落点为 main commit <code>c480f0d</code></li>
</ul>
<h2>2026-06-28 — 原生数据面收口:桌面 pion + iOS libwebrtc,逃离 WebView WebRTC 限制</h2>
<p>P2P 数据面(DataChannel 字节收发)从系统 WebView 的 JS 移出、改跑原生:桌面用 <code>pion/webrtc</code>Go 进程),iOS 用 <strong>libwebrtc</strong><code>RTCPeerConnection</code>)。两端逃出 WebKit 写死的 256KB SCTP 接收窗与渲染器节流;JS 仅留信令 / 会话 / presence / 消息 / relay 编排。</p>
@@ -32,7 +47,7 @@
<ul>
<li><strong>桌面 pion 数据面</strong>:吞吐专项定位两根因 —— WebView2 的 SCTP 处理活在渲染器进程内、窗口隐藏即被 backgrounding 节流(Windows host↔host 仍 100KB/s),WebKit usrsctp 接收窗写死 256KB。改由 Go <code>pion/webrtc</code> 跑数据面(<code>SetSCTPMaxReceiveBufferSize</code> 大 rwnd、真实 IP host 候选去 mDNS、Go 直接读写磁盘去 base64 桥),窗口状态与网络栈彻底解耦;引入 <code>p2pBackend</code> 抽象使 <code>transfer.ts</code> 编排零改动(<code>isDesktop()</code> 走 Go 桥、web / iOS 走 JS)。Win↔Mac 实测约 10MB/s</li>
<li><strong>iOS libwebrtc 数据面(U1→U2 翻案)</strong>:先试 gomobile + pion(与桌面同引擎,U1),真机 POC 证伪 —— Go raw BSD socket 不与 iOS Network framework 集成(连接时好时坏 + 中途断流)。按闸退到 <strong>libwebrtc.framework</strong>stasel/WebRTC M149 经 SPM、pin <code>149.0.0</code>),新增 <code>LibWebRtcEngine.swift</code> 端口桌面线协议;libwebrtc 原生集成 iOS 网络栈 + DcSCTP ~5MB 默认 rwnd</li>
<li><strong>三端线协议逐字节对齐</strong>DataChannel <code>cdrop-file</code>ordered<code>meta</code> / 二进制分片(64KB) / <code>done</code> / <code>ack</code> 帧、16MB-4MB 水位背压、接收端 ack 追平完成、不冲突落盘 —— 桌面 pion ↔ iOS libwebrtc ↔ 浏览器 JS 互通。新增结构化日志把 pion 内部日志路由到宿主(真机无 stderr 时诊断连接);进度回调 ~10Hz 节流(高吞吐下每片一回调打满宿主主线程)</li>
<li><strong>三端线协议逐字节对齐</strong>DataChannel 当时名为 <code>cdrop-file</code>2026-07-31 已迁移为 <code>commilitia-drop-file</code>),采用 ordered、<code>meta</code> / 二进制分片(64KB) / <code>done</code> / <code>ack</code> 帧、16MB-4MB 水位背压、接收端 ack 追平完成、不冲突落盘 —— 桌面 pion ↔ iOS libwebrtc ↔ 浏览器 JS 互通。新增结构化日志把 pion 内部日志路由到宿主(真机无 stderr 时诊断连接);进度回调 ~10Hz 节流(高吞吐下每片一回调打满宿主主线程)</li>
<li>验证:环回端到端 20MB 逐字节完整性 + 模拟器全 app 编译 + web typecheck / build 过;iOS 真机已装、用户反馈“传输总体良好”,真网吞吐互通为剩余闸。设计依据见 <code>desktop/NATIVE-TRANSFER.md</code> §7/§8、<code>ios/PLAN.md</code> 决策 F</li>
<li>commit <code>ab57afd</code>(桌面 pion)· <code>f1a00d1</code> · <code>349d94a</code>iOS libwebrtcnative-transfer 分支)</li>
</ul>
@@ -205,23 +220,36 @@
</main>
<footer class="page">
<p>cdrop · docs branch · CHANGELOG</p>
<p>Commilitia Drop · docs branch · CHANGELOG</p>
</footer>
<!-- RUNTIME_SPRITE -->
<script type="text/markdown" id="md-source">
# cdrop Changelog
# Commilitia Drop Changelog
时间倒序细粒度迭代见 git 历史本档只记录结构性 / 行为性变更与重要 fix
## 2026-07-31 全客户端正式命名认证迁移与构建分发收口
WindowsmacOSiPhoneiPadWeb 与服务端完成面向用户文本和可诊断协议面的统一正式产品名固定为 **Commilitia Drop**桌面端移除 Desktop 后缀每个平台只保留一份正式客户端
- 正式客户端矩阵Windows Wails x86-64macOS 继续使用 Wails ARM64iPhone / iPad 共用 SwiftUI targetWeb 使用 React SPA / PWA原生 macOS target 仍是迁移候选完成对等与验收前不切换不并行发布
- 用户可见命名与协议显示名 Commilitia Drop回调 `commilitia-drop://auth-callback`DataChannel / iOS 文件流 Scheme `commilitia-drop-file`Bonjour `_commilitia-drop._tcp`Broker application key `commilitia-drop`
- 内部身份兼容边界Bundle IDApp GroupKeychain serviceLaunchAgent label环境变量数据库与配置目录在不直接决定显示名时保持稳定稳定 AppId 本身不迁移
- 认证链修复BrokerCaddy 与服务端 application key 同步修复桌面无法连接 iPhone / iPad 批准后登录失败 session 允许失效双移动端已重登验证
- macOS复用既有 Developer ID Application 证书Wails ARM64 app / DMG 完成 hardened runtime 签名Apple 公证staple Gatekeeper 验证正式分发只留 DMG
- Windows / iOSWindows x86-64 以唯一正式文件安装并更新登录启动项当前尚无 AuthenticodeiPhone / iPad 仅用 CLI 和既有 Apple Development 证书覆盖安装不用 Xcode GUI不建新证书
- 分支收口`native-transfer` 的原生数据面工作已并入 `main`旧分支不再作为开发或发布入口
- 新增全客户端构建与安装手册 `CLIENT_BUILD_INSTALL.md`代码落点 main commit `c480f0d`
## 2026-06-28 原生数据面收口桌面 pion + iOS libwebrtc逃离 WebView WebRTC 限制
P2P 数据面从系统 WebView JS 移出改跑原生桌面 pionGoiOS libwebrtcRTCPeerConnection两端逃出 WebKit 写死的 256KB 接收窗与渲染器节流JS 仅留信令 / 会话 / presence / 消息 / relay 编排
- 桌面 pion吞吐两根因渲染器节流 + 256KB rwnd Go pion 根治 rwnd / host 候选去 mDNS / 直接读写磁盘去 base64 p2pBackend 抽象使 transfer.ts 编排零改动WinMac 10MB/s
- iOS libwebrtcU1U2 翻案gomobile + pion 真机证伪Go raw socket 不与 iOS Network framework 集成退 libwebrtc.frameworkstasel/WebRTC M149 SPM pin 149.0.0LibWebRtcEngine.swift 端口桌面线协议
- 三端线协议逐字节对齐cdrop-file ordered / meta + chunk(64KB) + done + ack / 16MB-4MB 水位 / ack 追平完成 / 不冲突落盘互通pion 日志路由宿主 + 进度 ~10Hz 节流
- 三端线协议逐字节对齐当时名为 cdrop-file2026-07-31 已迁移为 commilitia-drop-fileordered / meta + chunk(64KB) + done + ack / 16MB-4MB 水位 / ack 追平完成 / 不冲突落盘互通pion 日志路由宿主 + 进度 ~10Hz 节流
- 环回 20MB 逐字节 + 模拟器全编 + web 双过真机已装真网吞吐为剩余闸 NATIVE-TRANSFER.md §7/§8PLAN 决策 F
- commit ab57afd桌面 pion· f1a00d1 · 349d94aiOSnative-transfer 分支