KL Profile iOS 端现在包含一个轻量的 Roast Color 色值仪。它被放在新建菜单中,也可以通过主屏小组件或锁屏入口直接打开。测量页保持相机式的简洁流程:选择白纸或 18% 灰卡,完成光源校准,再测量整豆或咖啡粉。

一次测量的流程

色值仪不会把相机预览和大量说明铺在复盘页里。进入后,中央取样框覆盖咖啡样本,底部只有两个核心动作:校准 和 采集。校准完成后显示绿色勾,用户换上咖啡即可采集。问号按钮承载必要说明,长按圆形按钮可重新校准。

白纸/灰卡切换位于右上角,整豆/咖啡粉切换位于底部,样式保持 iOS 相机的轻量分段选择。校准会连续采样并等待结果稳定,测量流程使用校准后的 RGB 计算 CIELAB L*、a*、b*。

光源校准与烘焙度换算

白纸或灰卡用于补偿当前光源、曝光和白平衡,它不是烘焙度标准。相机得到的 L* 先经过光源校准,再由 JSON 中匹配的曲线进行单调分段线性插值,得到连续的 Roast Score,最后按阈值显示浅烘、中浅烘、中烘、中深烘或深烘。

RGB → Lab → 光源校准 → L* → Calibration Curve → Roast Score → Roast Level

当前 App 使用一条通用 iPhone 整豆经验曲线。它是产品内的估算值,不等同于 Agtron 或专业仪器读数。曲线范围之外保留 L* 并提示超出标定范围;咖啡粉、灰卡和正式仪器标定应分别建立曲线。详细的采样、配对和验证方法见烘焙度换算标定方案。

结果、历史与 Profile

结果页直接显示 Roast Score、等级、L*、a*、b* 和校准参考物。保存时,如果当前打开了 Profile,用户可以选择“仅保存测量记录”或“同时保存到 Profile”,避免随手测量误写入当前 Profile。选择关联后,测量的明度、烘焙色值、等级和时间会写入 Profile description 的独立元数据段,后续复盘可以读取它。

测量记录会显示关联的 Profile 名称,并支持左滑删除。删除历史记录不会删除已经写入 Profile 的测量元数据。旧记录仍可读取,没有 Profile 关联的旧数据也不会被强行补写。

主屏小组件与锁屏入口

WidgetKit 扩展提供主屏小号/中号组件,以及锁屏圆形/矩形入口。组件显示最近一次已保存的测量;没有可用结果时显示“开始测量”。点击组件通过 klprofile://roast-color 直接打开色值仪。

组件视觉采用雾面透明 Baby Blue:默认外观使用蓝色染色、柔和渐变高光和细描边;iOS 26 的“透明/色调”模式由系统控制玻璃和壁纸透出效果。主 App 与 Widget 通过 App Group 共享一个小型最近测量快照,不共享相机图像或完整历史。保存或删除记录后请求 WidgetKit 刷新,实际刷新时机仍由系统调度。

实现细节与签名要求见色值仪小组件说明。

配置与验证

曲线文件位于 iOS App 的 RoastScoreCalibration.json,包含设备匹配、样本类型、参考物、算法版本、插值点和等级阈值。曲线说明见Roast Score JSON 接入说明。

代码验证覆盖插值边界、范围外输入、配置匹配、历史序列化、Profile description 往返、小组件快照和深链接路由。UI 采用 iOS 16 兼容实现,并在 iOS 26 模拟器中验证了组件添加、透明外观、数据显示、点击跳转和删除后的刷新状态。