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:
2026-06-28 19:38:47 +08:00
parent 1a8db5686a
commit d616c7a63e
2 changed files with 195 additions and 5 deletions
+98 -3
View File
@@ -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 libwebrtcnative-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 GothicSans+ Maple MonoMono),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 ExtensionApp 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 移出改跑原生:桌面 pionGo),iOS libwebrtcRTCPeerConnection)。两端逃出 WebKit 写死的 256KB 接收窗与渲染器节流;JS 仅留信令 / 会话 / presence / 消息 / relay 编排。
- 桌面 pion:吞吐两根因(渲染器节流 + 256KB rwnd)经 Go pion 根治(大 rwnd / 真 host 候选去 mDNS / 直接读写磁盘去 base64 桥);p2pBackend 抽象使 transfer.ts 编排零改动。Win↔Mac 约 10MB/s
- iOS libwebrtcU1→U2 翻案):gomobile + pion 真机证伪(Go raw socket 不与 iOS Network framework 集成),退 libwebrtc.frameworkstasel/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 · 349d94aiOSnative-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 349d94anative-transfer 分支)
## 2026-06-27 — iOS 原生客户端落地:应用内登录 · 流式发送 · 后台续传 · APNs · Share · 控件 · 通知 · 小组件
iOS 原生 SwiftUI 客户端(液态玻璃 + 离屏无头 WebView 复用引擎)走到真机预备,并经一整天真机反馈迭代成熟。
- 计划主体:流式发送 / 后台续传(BGContinuedProcessingTask/ APNsinternal/apns ES256 + push_subscriptions.platform + /api/push/apns/register/ Share Extension / 控制中心剪贴板两控件
- Broker 应用内登录 + 设备名与令牌解耦;消息 / 图库 / 记录持久化
- 后台 / 会话三诉求:子会话(一设备一会话)+ 离线消息队列 + 被登出推送 + 后台唤醒层;后台 / 墓碑 iOS 可作唤醒传输目标
- 真机反馈:隔夜重登(单飞刷新)+ 通知重做 + 未读红点 + 日志独立界面 + 扫码登他端 + 主屏小组件 + 行交互统一 + 取消即时落终态 + 记录按用户分桶 + 发送端进度 / 完成对齐接收端
- 见 ios/PLAN.md / ios/PARITY.mdcommit 4409606 · 127070e · 1b94df1 · a2cad11 · 2caf1ab · c1dda67main
## 2026-06-26 — 鉴权并入 Auth Broker:委派设备会话统一模型 · 四端迁移 · 显示名与头像修复
cdrop 的登录 / 会话 / 设备 / 令牌生命周期并入既有 Auth Broker(边缘身份中介),删去自建鉴权副本;浏览器 / 桌面 / 手机收敛为同一套“委派设备会话”模型。
- 后端委托 Broker(路径 A):删自建 OIDC 交换 / 自签会话 / step-up / web_sessions / accountscdrop 不再存凭证;中间件改读边缘注入的 X-Auth-* 头;新增 internal/brokerclient
- 委派设备会话:每客户端 = 一条带 meta(device_id) + label 的 broker 机器会话,Broker 作唯一注册表;各登录路径登录后“代铸”设备会话(同 device_id 幂等轮换、不堆重复)
- 设备管理统一一个列表(在线 / 当前 / 类型,可吊销 / 改名);修一组迁移回归(空列表 / 重复无名 / 看不到在线另一台 / 吊销报不存在)
- 显示名与头像经 Broker 端到端补 X-Auth-Name / Avatar 恢复;桌面启动 HealIdentity 自愈陈旧 UUID
- 四端同步迁移,存量会话翻闸失效需重登;commit 10cf36emain
## 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 0451549main
## 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 统一到自签 tokenexchange 先 JWKS 验签再签)
- 吊销即时(每请求按 sid 查会话行,行删即拒)+ 设备自知(401 / Hub.Kick);设备列表 = 会话列表,孤儿 browser 设备清扫
- 2FA step-up 钩子(默认关);应用内扫码器 + 聚珍三状态机页 data-jz-skip 崩溃修复
- 蓝本 AUTH.mdcommit 待提交
## 2026-06-18 — 推送通知:网页 / PWA Web Push + 桌面原生通知
页面 / PWA 关闭、或桌面窗口非前台时也能收到系统通知;判定统一为“页面打开走应用内提示,关闭则系统通知”。
+97 -2
View File
@@ -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 libwebrtcnative-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 GothicSans+ Maple MonoMono),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 ExtensionApp 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 移出改跑原生桌面 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 节流
- 环回 20MB 逐字节 + 模拟器全编 + web 双过真机已装真网吞吐为剩余闸 NATIVE-TRANSFER.md §7/§8PLAN 决策 F
- commit ab57afd桌面 pion· f1a00d1 · 349d94aiOSnative-transfer 分支
## 2026-06-28 iOS UX 重构发送预览 · 按设备会话 · 品牌与字体 · 全平台平均速度
真机反馈驱动的用户可见改造发送先预览后发消息按设备聚合成会话引入对齐 web 的品牌 logo 与字体栈统一完成显平均速度
- 发送预览选文件 / 图片或分享进入后先进预览文件名 + 选设备不再即弹设备框手动支持多选分享经 App Group 暂存唤起主程序直入预览 + scenePhase 回前台兜底重扫分享后必须重启 app
- 消息按设备会话扁平流改按设备聚合社交 app 模型 APNs 离线设备不可发但历史可查未读下放每设备各红点 + 总数可删单条 / 整设备历史
- 品牌与字体吉祥物 logo + Fredoka 字标 + Orbit Gothic / Maple Mono 界面字体woff2 CTFontManager 运行期注册仅主 appOrbit 专有不入库构建期 just ios-fonts 拉取
- 全平台平均速度完成显平均速度总字节 / 总耗时非末次瞬时web / iOS 一致桌面需重建分发
- commit 349d94anative-transfer 分支
## 2026-06-27 iOS 原生客户端落地应用内登录 · 流式发送 · 后台续传 · APNs · Share · 控件 · 通知 · 小组件
iOS 原生 SwiftUI 客户端液态玻璃 + 离屏无头 WebView 复用引擎走到真机预备并经一整天真机反馈迭代成熟
- 计划主体流式发送 / 后台续传BGContinuedProcessingTask/ APNsinternal/apns ES256 + push_subscriptions.platform + /api/push/apns/register/ Share Extension /
- Broker 应用内登录 + 设备名与令牌解耦消息 / 图库 / 记录持久化
- 后台 / 会话三诉求子会话一设备一会话+ 离线消息队列 + 被登出推送 + 后台唤醒层后台 / 墓碑 iOS 可作唤醒传输目标
- 真机反馈隔夜重登单飞刷新+ 通知重做 + 未读红点 + 日志独立界面 + 扫码登他端 + 主屏小组件 + 行交互统一 + 取消即时落终态 + 记录按用户分桶 + 发送端进度 / 完成对齐接收端
- ios/PLAN.md / ios/PARITY.mdcommit 4409606 · 127070e · 1b94df1 · a2cad11 · 2caf1ab · c1dda67main
## 2026-06-26 鉴权并入 Auth Broker委派设备会话统一模型 · 四端迁移 · 显示名与头像修复
cdrop 的登录 / 会话 / 设备 / 令牌生命周期并入既有 Auth Broker边缘身份中介删去自建鉴权副本浏览器 / 桌面 / 手机收敛为同一套委派设备会话模型
- 后端委托 Broker路径 A删自建 OIDC 交换 / 自签会话 / step-up / web_sessions / accountscdrop 不再存凭证中间件改读边缘注入的 X-Auth-* 新增 internal/brokerclient
- 委派设备会话每客户端 = 一条带 meta(device_id) + label broker 机器会话Broker 作唯一注册表各登录路径登录后代铸设备会话 device_id 幂等轮换不堆重复
- 设备管理统一一个列表在线 / 当前 / 类型可吊销 / 改名修一组迁移回归空列表 / 重复无名 / 看不到在线另一台 / 吊销报不存在
- 显示名与头像经 Broker 端到端补 X-Auth-Name / Avatar 恢复桌面启动 HealIdentity 自愈陈旧 UUID
- 四端同步迁移存量会话翻闸失效需重登commit 10cf36emain
## 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 0451549main
## 2026-06-22 账户与登录子系统扫码快登 · 自签会话 · OIDC 统一 · 即时吊销 · 设备会话
OAuth 为账户来源 + cdrop 自维护薄账户层 + 自签会话的折中架构落地蓝本 AUTH.md一台设备一条会话吊销即时生效
- 扫码快速登录陌生设备显码已登录手机扫码批准三密钥分离request_id / approval_code / poll_secret防偷拍领取两档 full7 / guest1 小时受限默认偏安全 guest
- 薄账户层 + 自签 HS256 会话令牌脱离 IdP refresh TTL sidOIDC 统一到自签 tokenexchange JWKS 验签再签
- 吊销即时每请求按 sid 查会话行行删即拒+ 设备自知401 / Hub.Kick设备列表 = 会话列表孤儿 browser 设备清扫
- 2FA step-up 钩子默认关应用内扫码器 + 聚珍三状态机页 data-jz-skip 崩溃修复
- 蓝本 AUTH.mdcommit 待提交
## 2026-06-18 推送通知网页 / PWA Web Push + 桌面原生通知
页面 / PWA 关闭或桌面窗口非前台时也能收到系统通知判定统一为页面打开走应用内提示关闭则系统通知