changelog:2026-06-28 原生数据面(桌面 pion + iOS libwebrtc)+ iOS 原生客户端落地 + UX/品牌/字体
- 补 2026-06-27 → 06-28 的结构性变更,闸住自 06-26 Auth Broker 以来的空档: - 2026-06-28 原生数据面收口:桌面 pion + iOS libwebrtc(逃离 WebView 256KB rwnd 与渲染器节流) - 2026-06-28 iOS UX 重构:发送预览 / 按设备会话 / 品牌与字体 / 全平台平均速度 - 2026-06-27 iOS 原生客户端落地:应用内登录 / 流式发送 / 后台续传 / APNs / Share / 控件 / 通知 / 小组件 - md-source 孪生补齐 06-22 / 06-23 / 06-26(此前 HTML 已加但孪生漏更),Copy MD 与渲染一致 - 头部时间戳 → 2026-06-28;CHANGELOG.html 经 build.sh 重建
This commit is contained in:
+98
-3
@@ -1,11 +1,11 @@
|
||||
<!-- built with theme=dracula, mode=report, at=2026-06-26T14:16:04Z -->
|
||||
<!-- built with theme=dracula, mode=report, at=2026-06-28T11:38:03Z -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-Hans">
|
||||
<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-16">
|
||||
<meta name="generated-at" content="2026-06-28">
|
||||
<meta name="source" content="cdrop · docs branch">
|
||||
<style>
|
||||
/* ---------- Core tokens ----------
|
||||
@@ -2530,7 +2530,7 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }
|
||||
<div class="meta">
|
||||
<h1>cdrop — Changelog</h1>
|
||||
<p class="subtitle">时间倒序。细粒度迭代见 git 历史;本档只记录结构性 / 行为性变更与重要 fix。</p>
|
||||
<p class="timestamp"><time>2026-06-16</time> · <span>docs branch</span></p>
|
||||
<p class="timestamp"><time>2026-06-28</time> · <span>docs branch</span></p>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button class="btn" type="button" data-action="export-md" title="Copy Markdown to clipboard">Copy MD</button>
|
||||
@@ -2545,6 +2545,42 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }
|
||||
|
||||
<p class="lede">本 Changelog 自 2026-05-22 起以 HTML 格式维护。此前之变更可从 main 分支 <code>git log</code> 取得;下表为近期较显著之 commit。</p>
|
||||
|
||||
<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>
|
||||
|
||||
<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>验证:环回端到端 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 libwebrtc,native-transfer 分支)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2026-06-28 — iOS UX 重构:发送预览 · 按设备会话 · 品牌与字体系统 · 全平台平均速度</h2>
|
||||
|
||||
<p>真机使用后落地的一组用户可见改造:发送流程改“先预览后发”、消息按设备聚合成会话、引入与 web 对齐的品牌 logo 与字体栈,并统一传输完成后显示平均速度。</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>发送预览界面</strong>:选文件 / 图片或经分享进入后,先进发送预览(文件名 + 大小 + 选目标设备),不再即弹设备框;手动入口支持多选。分享经 Share Extension 暂存 App Group → 唤起主程序直入预览,并以 <code>scenePhase</code> 回前台兜底重扫(修“分享后必须重启 app 才能传”)</li>
|
||||
<li><strong>消息按设备会话</strong>:从扁平流改为按设备聚合的会话列表(社交 app 模型)—— 会话项 = 有历史或当前可达的设备,非 APNs 离线设备不可发但历史可查;未读粒度下放到每设备(各显未读红点、“消息”标签显总数);可删单条消息与整设备历史,避免废 session 堆积</li>
|
||||
<li><strong>品牌与字体系统</strong>(对齐 web):引入吉祥物 logo + “Commilitia Drop” Fredoka 字标(登录 / 传输空态 / 设置头 / 控制中心控件);界面字体栈接 Orbit Gothic(Sans)+ Maple Mono(Mono),woff2 经 Core Text <code>CTFontManagerRegisterFontsForURL</code> 运行期注册(仅主 app;扩展保持系统字 + 字标)。Orbit 为专有字体不入库,构建期 <code>just ios-fonts</code> 从 CDN 拉取</li>
|
||||
<li><strong>全平台平均速度</strong>:传输完成后速度列显平均速度(总字节 / 总耗时)而非末次瞬时值;web / iOS 一致(桌面共享 web store,需重建分发方落地)</li>
|
||||
<li>commit <code>349d94a</code>(native-transfer 分支)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2026-06-27 — iOS 原生客户端落地:应用内登录 · 流式发送 · 后台续传 · APNs · Share · 控件 · 通知 · 小组件</h2>
|
||||
|
||||
<p>iOS 原生 SwiftUI 客户端(液态玻璃壳 + 离屏无头 WebView 复用传输引擎)从计划走到真机预备,并经一整天真机反馈迭代成熟。</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>计划主体落地</strong>:发送端流式(整文件不进 WebView 内存)/ 后台续传(<code>BGContinuedProcessingTask</code>)/ APNs(后端 <code>internal/apns</code> ES256 + 原生注册,<code>push_subscriptions</code> 加 <code>platform</code> 列 + <code>POST /api/push/apns/register</code>)/ Share Extension(App Group 收件箱 + 深链)/ 控制中心剪贴板两控件(专用 broker 设备会话、纯原生 REST)</li>
|
||||
<li><strong>Broker 应用内登录 + 设备名解耦</strong>:iOS 接入 Auth Broker 应用内登录、消息 / 图库 / 记录持久化;设备名与令牌解耦</li>
|
||||
<li><strong>后台 / 会话三诉求</strong>:子会话(一台设备一会话)+ 离线消息队列 + 被登出推送 + 后台唤醒层;后台 / 墓碑态 iOS 可作可唤醒传输目标,发送端等其回前台再传</li>
|
||||
<li><strong>真机反馈迭代</strong>:隔夜重登修复(单飞刷新)+ 通知系统重做 + 未读红点 + 日志独立界面 + 扫码登他端 + 主屏小组件 + 长条行交互统一;取消即时落终态 + 行操作统一 + 记录按用户分桶 + 发送端进度 / 完成对齐接收端(接收端字节 ACK 回传)</li>
|
||||
<li>计划与同步检查单见 <code>ios/PLAN.md</code> / <code>ios/PARITY.md</code>;commit <code>4409606</code> · <code>127070e</code> · <code>1b94df1</code> · <code>a2cad11</code> · <code>2caf1ab</code> · <code>c1dda67</code>(main)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2026-06-26 — 鉴权并入 Auth Broker:委派设备会话统一模型 · 四端迁移 · 显示名与头像修复</h2>
|
||||
|
||||
<p>cdrop 的登录 / 会话 / 设备 / 令牌生命周期并入既有 <strong>Auth Broker</strong>(边缘身份中介),删去 cdrop 内的自建鉴权副本;浏览器、桌面、手机一律收敛为同一套“委派设备会话”模型,统一管理;并修复部分客户端显示名为账户 UUID、头像缺失的回归。</p>
|
||||
@@ -2714,6 +2750,65 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }
|
||||
|
||||
时间倒序。细粒度迭代见 git 历史;本档只记录结构性 / 行为性变更与重要 fix。
|
||||
|
||||
## 2026-06-28 — 原生数据面收口:桌面 pion + iOS libwebrtc,逃离 WebView WebRTC 限制
|
||||
|
||||
P2P 数据面从系统 WebView 的 JS 移出改跑原生:桌面 pion(Go),iOS libwebrtc(RTCPeerConnection)。两端逃出 WebKit 写死的 256KB 接收窗与渲染器节流;JS 仅留信令 / 会话 / presence / 消息 / relay 编排。
|
||||
|
||||
- 桌面 pion:吞吐两根因(渲染器节流 + 256KB rwnd)经 Go pion 根治(大 rwnd / 真 host 候选去 mDNS / 直接读写磁盘去 base64 桥);p2pBackend 抽象使 transfer.ts 编排零改动。Win↔Mac 约 10MB/s
|
||||
- iOS libwebrtc(U1→U2 翻案):gomobile + pion 真机证伪(Go raw socket 不与 iOS Network framework 集成),退 libwebrtc.framework(stasel/WebRTC M149 SPM pin 149.0.0),LibWebRtcEngine.swift 端口桌面线协议
|
||||
- 三端线协议逐字节对齐(cdrop-file ordered / meta + chunk(64KB) + done + ack / 16MB-4MB 水位 / ack 追平完成 / 不冲突落盘)互通;pion 日志路由宿主 + 进度 ~10Hz 节流
|
||||
- 环回 20MB 逐字节 + 模拟器全编 + web 双过;真机已装、真网吞吐为剩余闸。见 NATIVE-TRANSFER.md §7/§8、PLAN 决策 F
|
||||
- commit ab57afd(桌面 pion)· f1a00d1 · 349d94a(iOS,native-transfer 分支)
|
||||
|
||||
## 2026-06-28 — iOS UX 重构:发送预览 · 按设备会话 · 品牌与字体 · 全平台平均速度
|
||||
|
||||
真机反馈驱动的用户可见改造:发送先预览后发、消息按设备聚合成会话、引入对齐 web 的品牌 logo 与字体栈、统一完成显平均速度。
|
||||
|
||||
- 发送预览:选文件 / 图片或分享进入后先进预览(文件名 + 选设备)、不再即弹设备框,手动支持多选;分享经 App Group 暂存唤起主程序直入预览 + scenePhase 回前台兜底重扫(修“分享后必须重启 app”)
|
||||
- 消息按设备会话:扁平流改按设备聚合(社交 app 模型),非 APNs 离线设备不可发但历史可查;未读下放每设备(各红点 + 总数);可删单条 / 整设备历史
|
||||
- 品牌与字体:吉祥物 logo + Fredoka 字标 + Orbit Gothic / Maple Mono 界面字体(woff2 经 CTFontManager 运行期注册,仅主 app);Orbit 专有不入库、构建期 just ios-fonts 拉取
|
||||
- 全平台平均速度:完成显平均速度(总字节 / 总耗时)非末次瞬时;web / iOS 一致(桌面需重建分发)
|
||||
- commit 349d94a(native-transfer 分支)
|
||||
|
||||
## 2026-06-27 — iOS 原生客户端落地:应用内登录 · 流式发送 · 后台续传 · APNs · Share · 控件 · 通知 · 小组件
|
||||
|
||||
iOS 原生 SwiftUI 客户端(液态玻璃 + 离屏无头 WebView 复用引擎)走到真机预备,并经一整天真机反馈迭代成熟。
|
||||
|
||||
- 计划主体:流式发送 / 后台续传(BGContinuedProcessingTask)/ APNs(internal/apns ES256 + push_subscriptions.platform + /api/push/apns/register)/ Share Extension / 控制中心剪贴板两控件
|
||||
- Broker 应用内登录 + 设备名与令牌解耦;消息 / 图库 / 记录持久化
|
||||
- 后台 / 会话三诉求:子会话(一设备一会话)+ 离线消息队列 + 被登出推送 + 后台唤醒层;后台 / 墓碑 iOS 可作唤醒传输目标
|
||||
- 真机反馈:隔夜重登(单飞刷新)+ 通知重做 + 未读红点 + 日志独立界面 + 扫码登他端 + 主屏小组件 + 行交互统一 + 取消即时落终态 + 记录按用户分桶 + 发送端进度 / 完成对齐接收端
|
||||
- 见 ios/PLAN.md / ios/PARITY.md;commit 4409606 · 127070e · 1b94df1 · a2cad11 · 2caf1ab · c1dda67(main)
|
||||
|
||||
## 2026-06-26 — 鉴权并入 Auth Broker:委派设备会话统一模型 · 四端迁移 · 显示名与头像修复
|
||||
|
||||
cdrop 的登录 / 会话 / 设备 / 令牌生命周期并入既有 Auth Broker(边缘身份中介),删去自建鉴权副本;浏览器 / 桌面 / 手机收敛为同一套“委派设备会话”模型。
|
||||
|
||||
- 后端委托 Broker(路径 A):删自建 OIDC 交换 / 自签会话 / step-up / web_sessions / accounts,cdrop 不再存凭证;中间件改读边缘注入的 X-Auth-* 头;新增 internal/brokerclient
|
||||
- 委派设备会话:每客户端 = 一条带 meta(device_id) + label 的 broker 机器会话,Broker 作唯一注册表;各登录路径登录后“代铸”设备会话(同 device_id 幂等轮换、不堆重复)
|
||||
- 设备管理统一一个列表(在线 / 当前 / 类型,可吊销 / 改名);修一组迁移回归(空列表 / 重复无名 / 看不到在线另一台 / 吊销报不存在)
|
||||
- 显示名与头像经 Broker 端到端补 X-Auth-Name / Avatar 恢复;桌面启动 HealIdentity 自愈陈旧 UUID
|
||||
- 四端同步迁移,存量会话翻闸失效需重登;commit 10cf36e(main)
|
||||
|
||||
## 2026-06-23 — P2P 传输修复:接收混合落盘 sink · 发送进度与完成语义 · 文字累积 · 速度显示
|
||||
|
||||
修复 iOS PWA → Mac 大文件 P2P 约 15MB 处死锁及随之暴露的发送端语义问题,并修前端 CJK 文字累积、增设传输实时速度。
|
||||
|
||||
- 接收端混合有界内存 sink(桌面):wails:// 无持久存储致 OPFS 降级 / createWritable 回压堵死接收链 → rwnd=0 → 发送方卡死 16MiB。改为小文件纯内存、大文件流式 spill 到 Go 临时文件(64MB 一批),内存恒定有界;浏览器 / iOS 仍走 OPFS
|
||||
- 发送端进度按“已交付字节”(bytesSent − bufferedAmount)+ 250ms 轮询,不误判 stalled;送完等 bufferedAmount 落 0 再宣告完成
|
||||
- 前端 DynText 修聚珍 charify 拆段致 CJK 文字累积(既消累积又保排版);传输卡片 EMA 实时速度
|
||||
- commit 0451549(main)
|
||||
|
||||
## 2026-06-22 — 账户与登录子系统:扫码快登 · 自签会话 · OIDC 统一 · 即时吊销 · 设备=会话
|
||||
|
||||
“OAuth 为账户来源 + cdrop 自维护薄账户层 + 自签会话”的折中架构落地(蓝本 AUTH.md)。一台设备一条会话,吊销即时生效。
|
||||
|
||||
- 扫码快速登录:陌生设备显码、已登录手机扫码批准;三密钥分离(request_id / approval_code / poll_secret)防偷拍领取;两档 full(7 天)/ guest(1 小时受限),默认偏安全 guest
|
||||
- 薄账户层 + 自签 HS256 会话令牌(脱离 IdP refresh、短 TTL、载 sid);OIDC 统一到自签 token(exchange 先 JWKS 验签再签)
|
||||
- 吊销即时(每请求按 sid 查会话行,行删即拒)+ 设备自知(401 / Hub.Kick);设备列表 = 会话列表,孤儿 browser 设备清扫
|
||||
- 2FA step-up 钩子(默认关);应用内扫码器 + 聚珍三状态机页 data-jz-skip 崩溃修复
|
||||
- 蓝本 AUTH.md;commit 待提交
|
||||
|
||||
## 2026-06-18 — 推送通知:网页 / PWA Web Push + 桌面原生通知
|
||||
|
||||
页面 / PWA 关闭、或桌面窗口非前台时也能收到系统通知;判定统一为“页面打开走应用内提示,关闭则系统通知”。
|
||||
|
||||
+97
-2
@@ -4,7 +4,7 @@
|
||||
<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-16">
|
||||
<meta name="generated-at" content="2026-06-28">
|
||||
<meta name="source" content="cdrop · docs branch">
|
||||
<!-- RUNTIME_CSS -->
|
||||
</head>
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class="meta">
|
||||
<h1>cdrop — Changelog</h1>
|
||||
<p class="subtitle">时间倒序。细粒度迭代见 git 历史;本档只记录结构性 / 行为性变更与重要 fix。</p>
|
||||
<p class="timestamp"><time>2026-06-16</time> · <span>docs branch</span></p>
|
||||
<p class="timestamp"><time>2026-06-28</time> · <span>docs branch</span></p>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<!-- ACTIONS -->
|
||||
@@ -25,6 +25,42 @@
|
||||
|
||||
<p class="lede">本 Changelog 自 2026-05-22 起以 HTML 格式维护。此前之变更可从 main 分支 <code>git log</code> 取得;下表为近期较显著之 commit。</p>
|
||||
|
||||
<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>
|
||||
|
||||
<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>验证:环回端到端 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 libwebrtc,native-transfer 分支)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2026-06-28 — iOS UX 重构:发送预览 · 按设备会话 · 品牌与字体系统 · 全平台平均速度</h2>
|
||||
|
||||
<p>真机使用后落地的一组用户可见改造:发送流程改“先预览后发”、消息按设备聚合成会话、引入与 web 对齐的品牌 logo 与字体栈,并统一传输完成后显示平均速度。</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>发送预览界面</strong>:选文件 / 图片或经分享进入后,先进发送预览(文件名 + 大小 + 选目标设备),不再即弹设备框;手动入口支持多选。分享经 Share Extension 暂存 App Group → 唤起主程序直入预览,并以 <code>scenePhase</code> 回前台兜底重扫(修“分享后必须重启 app 才能传”)</li>
|
||||
<li><strong>消息按设备会话</strong>:从扁平流改为按设备聚合的会话列表(社交 app 模型)—— 会话项 = 有历史或当前可达的设备,非 APNs 离线设备不可发但历史可查;未读粒度下放到每设备(各显未读红点、“消息”标签显总数);可删单条消息与整设备历史,避免废 session 堆积</li>
|
||||
<li><strong>品牌与字体系统</strong>(对齐 web):引入吉祥物 logo + “Commilitia Drop” Fredoka 字标(登录 / 传输空态 / 设置头 / 控制中心控件);界面字体栈接 Orbit Gothic(Sans)+ Maple Mono(Mono),woff2 经 Core Text <code>CTFontManagerRegisterFontsForURL</code> 运行期注册(仅主 app;扩展保持系统字 + 字标)。Orbit 为专有字体不入库,构建期 <code>just ios-fonts</code> 从 CDN 拉取</li>
|
||||
<li><strong>全平台平均速度</strong>:传输完成后速度列显平均速度(总字节 / 总耗时)而非末次瞬时值;web / iOS 一致(桌面共享 web store,需重建分发方落地)</li>
|
||||
<li>commit <code>349d94a</code>(native-transfer 分支)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2026-06-27 — iOS 原生客户端落地:应用内登录 · 流式发送 · 后台续传 · APNs · Share · 控件 · 通知 · 小组件</h2>
|
||||
|
||||
<p>iOS 原生 SwiftUI 客户端(液态玻璃壳 + 离屏无头 WebView 复用传输引擎)从计划走到真机预备,并经一整天真机反馈迭代成熟。</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>计划主体落地</strong>:发送端流式(整文件不进 WebView 内存)/ 后台续传(<code>BGContinuedProcessingTask</code>)/ APNs(后端 <code>internal/apns</code> ES256 + 原生注册,<code>push_subscriptions</code> 加 <code>platform</code> 列 + <code>POST /api/push/apns/register</code>)/ Share Extension(App Group 收件箱 + 深链)/ 控制中心剪贴板两控件(专用 broker 设备会话、纯原生 REST)</li>
|
||||
<li><strong>Broker 应用内登录 + 设备名解耦</strong>:iOS 接入 Auth Broker 应用内登录、消息 / 图库 / 记录持久化;设备名与令牌解耦</li>
|
||||
<li><strong>后台 / 会话三诉求</strong>:子会话(一台设备一会话)+ 离线消息队列 + 被登出推送 + 后台唤醒层;后台 / 墓碑态 iOS 可作可唤醒传输目标,发送端等其回前台再传</li>
|
||||
<li><strong>真机反馈迭代</strong>:隔夜重登修复(单飞刷新)+ 通知系统重做 + 未读红点 + 日志独立界面 + 扫码登他端 + 主屏小组件 + 长条行交互统一;取消即时落终态 + 行操作统一 + 记录按用户分桶 + 发送端进度 / 完成对齐接收端(接收端字节 ACK 回传)</li>
|
||||
<li>计划与同步检查单见 <code>ios/PLAN.md</code> / <code>ios/PARITY.md</code>;commit <code>4409606</code> · <code>127070e</code> · <code>1b94df1</code> · <code>a2cad11</code> · <code>2caf1ab</code> · <code>c1dda67</code>(main)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2026-06-26 — 鉴权并入 Auth Broker:委派设备会话统一模型 · 四端迁移 · 显示名与头像修复</h2>
|
||||
|
||||
<p>cdrop 的登录 / 会话 / 设备 / 令牌生命周期并入既有 <strong>Auth Broker</strong>(边缘身份中介),删去 cdrop 内的自建鉴权副本;浏览器、桌面、手机一律收敛为同一套“委派设备会话”模型,统一管理;并修复部分客户端显示名为账户 UUID、头像缺失的回归。</p>
|
||||
@@ -178,6 +214,65 @@
|
||||
|
||||
时间倒序。细粒度迭代见 git 历史;本档只记录结构性 / 行为性变更与重要 fix。
|
||||
|
||||
## 2026-06-28 — 原生数据面收口:桌面 pion + iOS libwebrtc,逃离 WebView WebRTC 限制
|
||||
|
||||
P2P 数据面从系统 WebView 的 JS 移出改跑原生:桌面 pion(Go),iOS libwebrtc(RTCPeerConnection)。两端逃出 WebKit 写死的 256KB 接收窗与渲染器节流;JS 仅留信令 / 会话 / presence / 消息 / relay 编排。
|
||||
|
||||
- 桌面 pion:吞吐两根因(渲染器节流 + 256KB rwnd)经 Go pion 根治(大 rwnd / 真 host 候选去 mDNS / 直接读写磁盘去 base64 桥);p2pBackend 抽象使 transfer.ts 编排零改动。Win↔Mac 约 10MB/s
|
||||
- iOS libwebrtc(U1→U2 翻案):gomobile + pion 真机证伪(Go raw socket 不与 iOS Network framework 集成),退 libwebrtc.framework(stasel/WebRTC M149 SPM pin 149.0.0),LibWebRtcEngine.swift 端口桌面线协议
|
||||
- 三端线协议逐字节对齐(cdrop-file ordered / meta + chunk(64KB) + done + ack / 16MB-4MB 水位 / ack 追平完成 / 不冲突落盘)互通;pion 日志路由宿主 + 进度 ~10Hz 节流
|
||||
- 环回 20MB 逐字节 + 模拟器全编 + web 双过;真机已装、真网吞吐为剩余闸。见 NATIVE-TRANSFER.md §7/§8、PLAN 决策 F
|
||||
- commit ab57afd(桌面 pion)· f1a00d1 · 349d94a(iOS,native-transfer 分支)
|
||||
|
||||
## 2026-06-28 — iOS UX 重构:发送预览 · 按设备会话 · 品牌与字体 · 全平台平均速度
|
||||
|
||||
真机反馈驱动的用户可见改造:发送先预览后发、消息按设备聚合成会话、引入对齐 web 的品牌 logo 与字体栈、统一完成显平均速度。
|
||||
|
||||
- 发送预览:选文件 / 图片或分享进入后先进预览(文件名 + 选设备)、不再即弹设备框,手动支持多选;分享经 App Group 暂存唤起主程序直入预览 + scenePhase 回前台兜底重扫(修“分享后必须重启 app”)
|
||||
- 消息按设备会话:扁平流改按设备聚合(社交 app 模型),非 APNs 离线设备不可发但历史可查;未读下放每设备(各红点 + 总数);可删单条 / 整设备历史
|
||||
- 品牌与字体:吉祥物 logo + Fredoka 字标 + Orbit Gothic / Maple Mono 界面字体(woff2 经 CTFontManager 运行期注册,仅主 app);Orbit 专有不入库、构建期 just ios-fonts 拉取
|
||||
- 全平台平均速度:完成显平均速度(总字节 / 总耗时)非末次瞬时;web / iOS 一致(桌面需重建分发)
|
||||
- commit 349d94a(native-transfer 分支)
|
||||
|
||||
## 2026-06-27 — iOS 原生客户端落地:应用内登录 · 流式发送 · 后台续传 · APNs · Share · 控件 · 通知 · 小组件
|
||||
|
||||
iOS 原生 SwiftUI 客户端(液态玻璃 + 离屏无头 WebView 复用引擎)走到真机预备,并经一整天真机反馈迭代成熟。
|
||||
|
||||
- 计划主体:流式发送 / 后台续传(BGContinuedProcessingTask)/ APNs(internal/apns ES256 + push_subscriptions.platform + /api/push/apns/register)/ Share Extension / 控制中心剪贴板两控件
|
||||
- Broker 应用内登录 + 设备名与令牌解耦;消息 / 图库 / 记录持久化
|
||||
- 后台 / 会话三诉求:子会话(一设备一会话)+ 离线消息队列 + 被登出推送 + 后台唤醒层;后台 / 墓碑 iOS 可作唤醒传输目标
|
||||
- 真机反馈:隔夜重登(单飞刷新)+ 通知重做 + 未读红点 + 日志独立界面 + 扫码登他端 + 主屏小组件 + 行交互统一 + 取消即时落终态 + 记录按用户分桶 + 发送端进度 / 完成对齐接收端
|
||||
- 见 ios/PLAN.md / ios/PARITY.md;commit 4409606 · 127070e · 1b94df1 · a2cad11 · 2caf1ab · c1dda67(main)
|
||||
|
||||
## 2026-06-26 — 鉴权并入 Auth Broker:委派设备会话统一模型 · 四端迁移 · 显示名与头像修复
|
||||
|
||||
cdrop 的登录 / 会话 / 设备 / 令牌生命周期并入既有 Auth Broker(边缘身份中介),删去自建鉴权副本;浏览器 / 桌面 / 手机收敛为同一套“委派设备会话”模型。
|
||||
|
||||
- 后端委托 Broker(路径 A):删自建 OIDC 交换 / 自签会话 / step-up / web_sessions / accounts,cdrop 不再存凭证;中间件改读边缘注入的 X-Auth-* 头;新增 internal/brokerclient
|
||||
- 委派设备会话:每客户端 = 一条带 meta(device_id) + label 的 broker 机器会话,Broker 作唯一注册表;各登录路径登录后“代铸”设备会话(同 device_id 幂等轮换、不堆重复)
|
||||
- 设备管理统一一个列表(在线 / 当前 / 类型,可吊销 / 改名);修一组迁移回归(空列表 / 重复无名 / 看不到在线另一台 / 吊销报不存在)
|
||||
- 显示名与头像经 Broker 端到端补 X-Auth-Name / Avatar 恢复;桌面启动 HealIdentity 自愈陈旧 UUID
|
||||
- 四端同步迁移,存量会话翻闸失效需重登;commit 10cf36e(main)
|
||||
|
||||
## 2026-06-23 — P2P 传输修复:接收混合落盘 sink · 发送进度与完成语义 · 文字累积 · 速度显示
|
||||
|
||||
修复 iOS PWA → Mac 大文件 P2P 约 15MB 处死锁及随之暴露的发送端语义问题,并修前端 CJK 文字累积、增设传输实时速度。
|
||||
|
||||
- 接收端混合有界内存 sink(桌面):wails:// 无持久存储致 OPFS 降级 / createWritable 回压堵死接收链 → rwnd=0 → 发送方卡死 16MiB。改为小文件纯内存、大文件流式 spill 到 Go 临时文件(64MB 一批),内存恒定有界;浏览器 / iOS 仍走 OPFS
|
||||
- 发送端进度按“已交付字节”(bytesSent − bufferedAmount)+ 250ms 轮询,不误判 stalled;送完等 bufferedAmount 落 0 再宣告完成
|
||||
- 前端 DynText 修聚珍 charify 拆段致 CJK 文字累积(既消累积又保排版);传输卡片 EMA 实时速度
|
||||
- commit 0451549(main)
|
||||
|
||||
## 2026-06-22 — 账户与登录子系统:扫码快登 · 自签会话 · OIDC 统一 · 即时吊销 · 设备=会话
|
||||
|
||||
“OAuth 为账户来源 + cdrop 自维护薄账户层 + 自签会话”的折中架构落地(蓝本 AUTH.md)。一台设备一条会话,吊销即时生效。
|
||||
|
||||
- 扫码快速登录:陌生设备显码、已登录手机扫码批准;三密钥分离(request_id / approval_code / poll_secret)防偷拍领取;两档 full(7 天)/ guest(1 小时受限),默认偏安全 guest
|
||||
- 薄账户层 + 自签 HS256 会话令牌(脱离 IdP refresh、短 TTL、载 sid);OIDC 统一到自签 token(exchange 先 JWKS 验签再签)
|
||||
- 吊销即时(每请求按 sid 查会话行,行删即拒)+ 设备自知(401 / Hub.Kick);设备列表 = 会话列表,孤儿 browser 设备清扫
|
||||
- 2FA step-up 钩子(默认关);应用内扫码器 + 聚珍三状态机页 data-jz-skip 崩溃修复
|
||||
- 蓝本 AUTH.md;commit 待提交
|
||||
|
||||
## 2026-06-18 — 推送通知:网页 / PWA Web Push + 桌面原生通知
|
||||
|
||||
页面 / PWA 关闭、或桌面窗口非前台时也能收到系统通知;判定统一为“页面打开走应用内提示,关闭则系统通知”。
|
||||
|
||||
Reference in New Issue
Block a user