f42a812256
Replace the unclear CLM source, align release and privacy disclosures, complete third-party notices, and keep the expanded test suites deterministic for release validation.
748 lines
38 KiB
HTML
748 lines
38 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-Hans" data-theme="light">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||
<title>OSGKeyboard — What's New / 更新说明</title>
|
||
<meta name="robots" content="noindex">
|
||
<meta name="color-scheme" content="light dark">
|
||
<style>
|
||
:root {
|
||
--bg: #f7f7f5;
|
||
--text: #1a1a1a;
|
||
--text-secondary: #5c5c5c;
|
||
--text-tertiary: #8a8a8a;
|
||
--card: #ffffff;
|
||
--border: rgba(0, 0, 0, 0.08);
|
||
--accent: #2f6fed;
|
||
--chip-bg: rgba(47, 111, 237, 0.1);
|
||
}
|
||
|
||
html[data-theme="dark"] {
|
||
--bg: #0a0a0b;
|
||
--text: #f2f2f2;
|
||
--text-secondary: #b0b0b0;
|
||
--text-tertiary: #7a7a7a;
|
||
--card: #161618;
|
||
--border: rgba(255, 255, 255, 0.1);
|
||
--accent: #6b9fff;
|
||
--chip-bg: rgba(107, 159, 255, 0.16);
|
||
}
|
||
|
||
* { box-sizing: border-box; }
|
||
|
||
html, body {
|
||
margin: 0;
|
||
padding: 0;
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC",
|
||
"Hiragino Sans GB", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||
-webkit-text-size-adjust: 100%;
|
||
line-height: 1.5;
|
||
}
|
||
|
||
body {
|
||
/* Fixed bottom padding only — App WKWebView already lays out above the home indicator. */
|
||
padding: 20px 16px 28px;
|
||
max-width: 720px;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.page-header {
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.page-header h1 {
|
||
margin: 0 0 6px;
|
||
font-size: 1.5rem;
|
||
font-weight: 700;
|
||
letter-spacing: -0.02em;
|
||
}
|
||
|
||
.page-header .subtitle {
|
||
margin: 0;
|
||
color: var(--text-secondary);
|
||
font-size: 0.95rem;
|
||
}
|
||
|
||
.empty {
|
||
display: none;
|
||
margin-top: 40px;
|
||
text-align: center;
|
||
color: var(--text-secondary);
|
||
font-size: 0.95rem;
|
||
}
|
||
|
||
.empty.visible { display: block; }
|
||
|
||
.version-block {
|
||
display: none;
|
||
background: var(--card);
|
||
border: 1px solid var(--border);
|
||
border-radius: 16px;
|
||
padding: 18px 16px 8px;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.version-block.visible { display: block; }
|
||
|
||
.version-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 4px 10px;
|
||
border-radius: 999px;
|
||
background: var(--chip-bg);
|
||
color: var(--accent);
|
||
font-size: 0.8rem;
|
||
font-weight: 650;
|
||
letter-spacing: 0.01em;
|
||
margin-bottom: 14px;
|
||
}
|
||
|
||
.section { margin-bottom: 16px; }
|
||
|
||
.section h2 {
|
||
margin: 0 0 8px;
|
||
font-size: 1.05rem;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.group { margin-bottom: 12px; }
|
||
|
||
.group-title {
|
||
margin: 0 0 6px;
|
||
font-size: 0.95rem;
|
||
font-weight: 650;
|
||
color: var(--text);
|
||
}
|
||
|
||
ul {
|
||
margin: 0;
|
||
padding: 0 0 0 1.15em;
|
||
}
|
||
|
||
li {
|
||
margin: 0 0 6px;
|
||
color: var(--text-secondary);
|
||
font-size: 0.92rem;
|
||
}
|
||
|
||
li strong {
|
||
color: var(--text);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.lang-block { display: none; }
|
||
.lang-block.visible { display: block; }
|
||
|
||
/* Inline demo media directly under a group title. */
|
||
.wn-media {
|
||
margin: 2px 0 12px;
|
||
text-align: center;
|
||
}
|
||
|
||
.wn-media video,
|
||
.wn-media img {
|
||
display: block;
|
||
width: 100%;
|
||
max-width: 260px;
|
||
height: auto;
|
||
margin: 0 auto;
|
||
border-radius: 14px;
|
||
border: 1px solid var(--border);
|
||
background: #000;
|
||
}
|
||
|
||
/* Landscape-ish clip (near-square) can sit a bit wider. */
|
||
.wn-media.wide video,
|
||
.wn-media.wide img {
|
||
max-width: 340px;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="page-header">
|
||
<div class="lang-block" data-lang="zh">
|
||
<h1>更新说明</h1>
|
||
<p class="subtitle">本页展示当前版本及更早版本的更新内容</p>
|
||
</div>
|
||
<div class="lang-block" data-lang="en">
|
||
<h1>What's New</h1>
|
||
<p class="subtitle">Notes for this version and earlier releases</p>
|
||
</div>
|
||
</header>
|
||
|
||
<p class="empty" id="empty-zh">暂无与当前版本匹配的更新说明。</p>
|
||
<p class="empty" id="empty-en">No release notes match this app version.</p>
|
||
|
||
<!-- ========== 1.8.0 ========== -->
|
||
<article class="version-block" data-version="1.8.0">
|
||
<div class="version-chip">1.8.0</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">AI 与语音助手</p>
|
||
<ul>
|
||
<li><strong>AI 键盘模式</strong>:新增独立 AI 输入面,可通过语音提问、查看回答,并在确认后插入或发送</li>
|
||
<li><strong>AI 联网搜索</strong>:支持服务商侧联网搜索,可回答天气、新闻等需要最新资料的问题,搜索失败时自动重试</li>
|
||
<li><strong>AI 流式回答</strong>:模型生成内容时,回答会实时显示在键盘中,无需等待整段完成</li>
|
||
<li><strong>AI 空闲建议</strong>:AI 面板会轮播常用提问和热点建议,点选后可直接生成回答</li>
|
||
<li><strong>回复篇幅设置</strong>:新增简短、中等、详细三档 AI 回复长度,并支持随设置同步</li>
|
||
<li><strong>编辑上次输入</strong>:长按麦克风即可口述修改要求,预览后替换上次输入或追加新内容</li>
|
||
<li><strong>问句保护</strong>:润色会保留用户原本的提问语气,不再把「你能听到吗」等问句改写成回答</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">剪贴板与技能</p>
|
||
<ul>
|
||
<li><strong>剪贴板历史</strong>:可选保存最近 15 条纯文本,支持查看、插入和单独清空,默认关闭且仅保存在本机</li>
|
||
<li><strong>剪贴板建议条</strong>:开启后,最新复制内容会显示在键盘上方,可一键插入</li>
|
||
<li><strong>粘贴权限引导</strong>:剪贴板设置页可直接打开系统设置,方便将「从其他 App 粘贴」设为允许</li>
|
||
<li><strong>口述剪贴板请求</strong>:在 AI 模式中说出「回复剪贴板」或「翻译剪贴板」,即可处理已保存的复制内容</li>
|
||
<li><strong>剪贴板快捷技能</strong>:复制后可直接选择回复、总结或翻译,无需先粘贴到输入框</li>
|
||
<li><strong>技能中心</strong>:首页新增技能页,可管理最多 8 个键盘技能,并通过长按拖动调整顺序</li>
|
||
<li><strong>自定义技能</strong>:可自定义名称、图标和提示词,也可连接自己的 iCloud 快捷指令</li>
|
||
<li><strong>提取待办</strong>:可从复制内容识别待办事项,并通过快捷指令写入提醒事项</li>
|
||
<li><strong>提取日程</strong>:可识别日期、时间、地点和结束时间,并写入系统日历</li>
|
||
<li><strong>存入备忘录</strong>:可根据复制内容生成简短标题,并将原文保存到 Apple 备忘录</li>
|
||
<li><strong>地址导航</strong>:可识别地址或起点终点,并直接打开高德、百度或 Apple 地图开始驾车导航</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>中英文输入</h2>
|
||
<ul>
|
||
<li><strong>英文 QuickType 候选栏</strong>:输入英文时同时显示原词、纠错和补全,提交后自动清空</li>
|
||
<li><strong>英文词汇覆盖扩充</strong>:加入约 4 万词的离线词表,并结合系统词库、通讯录名称和文本替换提供建议</li>
|
||
<li><strong>英文邻键纠错</strong>:按错相邻按键时,会优先推荐更符合真实键盘位置的单词</li>
|
||
<li><strong>英文自动更正更克制</strong>:减少对专名、短词和全大写词的误改;拒绝纠错后会学习保留原词</li>
|
||
<li><strong>拼音简拼改进</strong>:优化 <code>wom</code> 等混合简拼排序,并支持 <code>zh</code>、<code>ch</code>、<code>sh</code> 两键简拼</li>
|
||
<li><strong>输入习惯学习</strong>:中文候选频率和英文选择偏好会保存在本机,设置中可单独清除,不影响个性词库</li>
|
||
<li><strong>叠指连打</strong>:支持上一键尚未抬起时按下下一键,并按按下顺序输出文字</li>
|
||
<li><strong>双空格句号</strong>:英文单词后连续按两次空格,会自动转换为句号和空格,并开启句首大写</li>
|
||
<li><strong>回车键场景文案</strong>:回车键会根据当前输入框显示前往、搜索、发送、完成、下一项等系统文案</li>
|
||
<li><strong>iPad 键盘适配</strong>:键盘横竖屏均铺满可用宽度,底行加入逗号、句号和系统地球键,并提供撤销、重做、复制和剪切</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>界面、稳定性与隐私</h2>
|
||
<ul>
|
||
<li><strong>统一撤销上次输入</strong>:听写、AI 回答、编辑结果和剪贴板粘贴均可一次撤销</li>
|
||
<li><strong>首页与导航调整</strong>:历史记录和个性词库改为首页资料卡;技能、风格和设置入口重新整理</li>
|
||
<li><strong>输入稳定性改进</strong>:修复中文输入初始化失败、跨设备剪贴板导致键盘卡住、切换键盘崩溃、录音取消不及时及 AI 会话结束后麦克风不可用等问题</li>
|
||
<li><strong>数据控制更新</strong>:默认使用设备端语音识别;AI 使用用户自己的 API Key;剪贴板功能默认关闭,内容仅在用户主动触发时交给所配置的服务商</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">AI and voice assistant</p>
|
||
<ul>
|
||
<li><strong>AI keyboard mode</strong>: ask by voice, review the answer on the keyboard, then insert or send it when ready</li>
|
||
<li><strong>AI web search</strong>: supported providers can search for current information such as weather and news, with automatic fallback when search fails</li>
|
||
<li><strong>Streaming AI answers</strong>: answers appear on the keyboard as the model writes instead of waiting for the full response</li>
|
||
<li><strong>AI idle suggestions</strong>: the AI panel rotates useful prompts and current topics that can be sent with one tap</li>
|
||
<li><strong>Response length</strong>: choose Short, Medium, or Detailed AI answers and sync the preference with settings</li>
|
||
<li><strong>Edit last input</strong>: hold the microphone, describe the change, preview it, then replace the last input or append the result</li>
|
||
<li><strong>Question protection</strong>: polish preserves the user's question instead of rewriting prompts such as “Can you hear me?” into answers</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Clipboard and Skills</p>
|
||
<ul>
|
||
<li><strong>Clipboard history</strong>: optionally keep the latest 15 plain-text copies on this device, with separate view, insert, and clear controls</li>
|
||
<li><strong>Clipboard suggestion strip</strong>: show the newest copy above the keyboard for one-tap insertion</li>
|
||
<li><strong>Paste permission guide</strong>: open system Settings directly to set Paste from Other Apps to Allow</li>
|
||
<li><strong>Spoken clipboard requests</strong>: say “reply to the clipboard” or “translate my clipboard” in AI mode to use the saved copy</li>
|
||
<li><strong>Clipboard quick skills</strong>: choose Reply, Summarize, or Translate after copying without first pasting into a field</li>
|
||
<li><strong>Skills center</strong>: manage up to eight keyboard skills and reorder them with a long-press drag</li>
|
||
<li><strong>Custom skills</strong>: create a name, icon, and prompt, with an optional iCloud Shortcut connection</li>
|
||
<li><strong>Extract to-dos</strong>: recognize tasks in copied text and add them to Reminders through a companion Shortcut</li>
|
||
<li><strong>Extract events</strong>: recognize dates, times, locations, and end times, then add them to Calendar</li>
|
||
<li><strong>Save to Notes</strong>: generate a short title and save the original copied text to Apple Notes</li>
|
||
<li><strong>Navigate to an address</strong>: recognize an address or route and open driving directions in Amap, Baidu Maps, or Apple Maps</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Chinese and English Typing</h2>
|
||
<ul>
|
||
<li><strong>English QuickType bar</strong>: see the typed word, correction, and completion together; the bar clears after commit</li>
|
||
<li><strong>Broader English vocabulary</strong>: an offline list of about 40,000 words works with the system lexicon, contact names, and text replacements</li>
|
||
<li><strong>Neighbor-key correction</strong>: mistypes on nearby keys prioritize words that match the physical keyboard layout</li>
|
||
<li><strong>More conservative autocorrect</strong>: fewer unwanted changes to names, short words, and all-caps text; rejecting a correction teaches the original</li>
|
||
<li><strong>Pinyin abbreviation improvements</strong>: mixed forms such as <code>wom</code> rank better, with two-key <code>zh</code>, <code>ch</code>, and <code>sh</code> abbreviations</li>
|
||
<li><strong>Typing habit learning</strong>: Chinese candidate frequency and English boosts stay on device and can be cleared without deleting the personal dictionary</li>
|
||
<li><strong>Overlapping key presses</strong>: press the next key before lifting the previous finger while characters still commit in press order</li>
|
||
<li><strong>Double-space period</strong>: a second Space after an English word becomes a period and space, then enables sentence capitalization</li>
|
||
<li><strong>Contextual Return labels</strong>: the action key shows Go, Search, Send, Done, Next, and other system labels for the current field</li>
|
||
<li><strong>iPad keyboard layout</strong>: fills portrait and landscape width, adds comma, period, and the system globe key, plus undo, redo, copy, and cut</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Interface, Stability & Privacy</h2>
|
||
<ul>
|
||
<li><strong>Unified undo</strong>: roll back dictation, AI answers, edit results, and clipboard pastes in one step</li>
|
||
<li><strong>Home and navigation updates</strong>: History and Personal Dictionary become Home cards, with reorganized Skills, Styles, and Settings navigation</li>
|
||
<li><strong>Input stability</strong>: fixes Chinese setup failures, Universal Clipboard keyboard freezes, keyboard-switch crashes, delayed recording cancellation, and a stuck microphone after AI sessions</li>
|
||
<li><strong>Data controls</strong>: on-device speech recognition remains the default; AI uses your own API key; Clipboard features stay off until enabled and send text only after your action</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 1.7.5 ========== -->
|
||
<article class="version-block" data-version="1.7.5">
|
||
<div class="version-chip">1.7.5</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">AI 模式</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/ai-keyboard-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>键盘可切换到 <strong>AI</strong>:对着麦克风提问,答案显示在键盘上,方便查看后再写入</li>
|
||
<li>在即时通信等输入框中,先点白色<strong>「插入」</strong>,再点绿色<strong>「发送」</strong>;只有真正插入的内容会进入历史与字数统计</li>
|
||
<li>需要时会联网查资料;失败时会自动换方式重试</li>
|
||
<li>设置 → <strong>AI Agent</strong> 可调节<strong>「回复篇幅」</strong>:简短 / 中等 / 详细</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">剪贴板历史</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/clipboard-history-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>在设置 → <strong>剪贴板</strong> 开启<strong>「历史记录」</strong>(默认关闭);本机保存最近 15 条纯文本</li>
|
||
<li>顶栏<strong>剪贴板</strong>按钮打开历史,点一条即可插入;也可开启<strong>「建议条」</strong>,最新复制显示在键盘上方,点一下就能用</li>
|
||
<li>建议在系统设置里把<strong>「从其他 App 粘贴」</strong>设为<strong>「允许」</strong>,减少每次复制的弹窗</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>变更</h2>
|
||
<ul>
|
||
<li><strong>翻译</strong>入口移到语音键盘麦克风旁(与撤销对称);原顶栏位置改为剪贴板按钮</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">AI mode</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/ai-keyboard-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>Switch the keyboard to <strong>AI</strong>, ask with the microphone, and review the answer on the keyboard before inserting it</li>
|
||
<li>In messaging fields, tap white <strong>Insert</strong>, then green <strong>Send</strong>; only inserted answers count toward history and character stats</li>
|
||
<li>Looks up online info when needed, and retries another way if that fails</li>
|
||
<li>In Settings → <strong>AI Agent</strong>, choose <strong>Response length</strong>: Short / Medium / Detailed</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Clipboard history</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/clipboard-history-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>Turn on <strong>History</strong> in Settings → <strong>Clipboard</strong> (off by default); keeps the latest 15 plain-text copies on this device</li>
|
||
<li>Open history from the top-bar <strong>Clipboard</strong> button and tap an item to insert; optional <strong>Suggestion strip</strong> shows the newest copy above the keys for one-tap use</li>
|
||
<li>Set system <strong>Paste from Other Apps</strong> to <strong>Allow</strong> to reduce paste prompts after each copy</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Changes</h2>
|
||
<ul>
|
||
<li><strong>Translation</strong> moves to the voice keyboard beside the mic (mirrored with Undo); the former top-bar slot is now the Clipboard button</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 1.6.6 ========== -->
|
||
<article class="version-block" data-version="1.6.6">
|
||
<div class="version-chip">1.6.6</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">全新保活流程</p>
|
||
<ul>
|
||
<li>键盘保活流程全新升级,大幅提升后台保活逻辑,大幅降低耗电量并提升稳定性</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">新增键盘输入功能</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/keyboard-typing.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>新增<strong>拼音</strong>与<strong>英文</strong>键盘:支持全拼、微软/搜狗双拼、词组候选、可选模糊音;拼音与英文均支持自定义词库</li>
|
||
<li>键盘布局整体升级,语音 / 中文 / 英文外观统一;左侧 Logo 可跳转主 App,右侧改为输入方式切换与翻译入口</li>
|
||
<li>新增<strong>中文候选词面板</strong>,候选池更大,长词和更多备选更容易找到;多字输入时可分词选择</li>
|
||
<li>新增英文联想补全、自动纠错与候选撤销,输入更快更准</li>
|
||
<li>新增键盘防误触和误输入纠正,整体体验更接近系统键盘</li>
|
||
<li>新增<strong>按键音效与震动</strong>,以及轻 / 强震动设置</li>
|
||
<li>新增长按删除加速,改长文更高效</li>
|
||
<li>新增英文键盘智能大写:连续大写、句首自动大写</li>
|
||
<li>新增<strong>撤销上次输入</strong>按钮:麦克风旁可一键撤回最近一次听写或编辑结果</li>
|
||
<li>新增<strong>键盘偏好</strong>设置,支持记住上次使用的语音或文字界面,再次打开无需反复切换</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">编辑上次输入</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/edit-last-input-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>刚用 OSGKeyboard 输入过内容时,麦克风上方会提示<strong>「长按可编辑上一条」</strong></li>
|
||
<li><strong>长按</strong>麦克风进入编辑,说出想怎么改(如「改得更正式些」「结尾加一句问候」);<strong>短按</strong>仍是普通听写</li>
|
||
<li>说完<strong>再点一下</strong>结束录音,稍候即可左右滑动对比<strong>原文 / 编辑后</strong></li>
|
||
<li>确认后点<strong>应用编辑</strong>替换原文,或选择<strong>插入当前位置</strong>;右上角关闭可放弃本次编辑</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">润色模式整体升级</p>
|
||
<div class="wn-media">
|
||
<img src="assets/whats-new/polish-styles-zh.png" alt="润色风格列表" loading="lazy">
|
||
</div>
|
||
<ul>
|
||
<li>大幅升级<strong>趣味润色</strong>(含直男癌等),风格更鲜明,同时减少事实失真</li>
|
||
<li>润色强度简化为轻度 / 重度:轻度优先保真,重度释放五种趣味风格的完整创意</li>
|
||
<li>新增<strong>同音 / 近音纠错</strong>,语音识别后的错字修复更准</li>
|
||
<li>长文本润色与翻译分段更清晰,列表结构更易读,翻译后保留段落格式</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">应用内更新说明</p>
|
||
<ul>
|
||
<li>版本更新后自动展示更新说明;设置页版本行也可随时查看,跟随应用内语言与深浅色</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">设置优化</p>
|
||
<ul>
|
||
<li>设置页层级与卡片布局更清晰,转写与润色入口更好找</li>
|
||
<li>简化首次设置:未完成语音配置时仍可正常打字</li>
|
||
<li>文本输入设置页的方案、模糊音与资源文案跟随应用内语言</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>问题修复</h2>
|
||
<ul>
|
||
<li>修复润色代答问句:口述问句(如「你能听到我说话吗?」)时不再被改写成一句回答,全部风格与强度都会保留问句本身</li>
|
||
<li>修复自定义润色风格编辑偶发显示空白模板</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>稳定性与可靠性</h2>
|
||
<ul>
|
||
<li>重构蓝牙与音频路由处理:切换蓝牙设备(耳机)后,录音恢复更可靠</li>
|
||
<li>修复录音启动 / 取消竞态,减少识别完成后卡在润色阶段的问题</li>
|
||
<li>Apple 本地识别改用降噪接口:同房间旁人说话时,更倾向听清你的近讲声音</li>
|
||
<li>为识别与润色增加明确超时与原文兜底,网络不稳时不再无限等待</li>
|
||
<li>加强主 App 与键盘的结果确认与恢复,降低结果丢失或无法上屏的概率</li>
|
||
<li>修复火山 ASR 连接问题;修复云端 ASR 配置验证误报</li>
|
||
<li>重构键盘启动流程、降低内存峰值,减少闪退与被系统终止</li>
|
||
<li>输入引擎按需加载,语音与文字切换更快、更省内存</li>
|
||
<li>未使用麦克风时,不主动拉起主 App 占用内存</li>
|
||
<li>移除冗余多步引导;优化会话未完成时的体验</li>
|
||
<li>自定义词 / 本地识别相关能力打包更完整</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Redesigned keep-alive flow</p>
|
||
<ul>
|
||
<li>Keyboard keep-alive is rebuilt for more reliable background continuity, lower power use, and better stability</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Typing keyboards</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/keyboard-typing.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>New <strong>Pinyin</strong> and <strong>English</strong> keyboards: full Pinyin, Microsoft/Sogou double Pinyin, phrase candidates, optional fuzzy Pinyin; both support custom dictionaries</li>
|
||
<li>Unified keyboard chrome across Voice / Chinese / English; left logo opens the main app; right side switches input mode and opens translation</li>
|
||
<li>New <strong>Chinese candidate panel</strong> with a larger pool for long phrases and alternatives; multi-character input supports segmented selection</li>
|
||
<li>English autocomplete, autocorrect, and candidate undo for faster, more accurate typing</li>
|
||
<li>Anti-mis-tap and mistype correction for a closer-to-system keyboard feel</li>
|
||
<li>New <strong>key sounds and haptics</strong>, with light / strong haptic options</li>
|
||
<li>Accelerating long-press delete for faster long-text edits</li>
|
||
<li>Smarter English capitalization: caps lock and sentence-start autocapitalization</li>
|
||
<li>New <strong>undo last input</strong> button beside the mic to roll back the latest dictation or edit result</li>
|
||
<li>New <strong>Keyboard Preferences</strong>: remember the last Voice or Typing surface so you don’t keep switching</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Edit last input</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/edit-last-input-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>Right after you insert text with OSGKeyboard, the mic shows <strong>“Hold to edit your last input”</strong></li>
|
||
<li><strong>Long-press</strong> the mic to start editing and say how to change it (e.g. “make it more formal”, “add a greeting at the end”); a <strong>short press</strong> is still plain dictation</li>
|
||
<li><strong>Tap once more</strong> to finish, then swipe to compare <strong>Original / Edited</strong></li>
|
||
<li>Confirm to <strong>apply the edit</strong> (replace), or choose <strong>insert at cursor</strong>; close from the top-right to discard</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Polish upgrades</p>
|
||
<div class="wn-media">
|
||
<img src="assets/whats-new/polish-styles-en.png" alt="Polish styles list" loading="lazy">
|
||
</div>
|
||
<ul>
|
||
<li>Stronger <strong>fun polish</strong> styles (including Straight-Talk Rescue / 直男癌), with clearer voice and less factual drift</li>
|
||
<li>Intensity simplified to Light / Heavy: Light prioritizes fidelity; Heavy unlocks the full creativity of the five fun styles</li>
|
||
<li>New <strong>homophone / near-homophone correction</strong> after speech recognition</li>
|
||
<li>Clearer segmentation for long polish and translation; lists read better; translations keep paragraph structure</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">In-app release notes</p>
|
||
<ul>
|
||
<li>Release notes appear automatically after an update, and the Settings version row opens them any time, following your in-app language and theme</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Settings</p>
|
||
<ul>
|
||
<li>Clearer Settings hierarchy and cards; transcription and polish are easier to find</li>
|
||
<li>Simpler first-run setup: you can type even before voice setup is finished</li>
|
||
<li>Schema, fuzzy-Pinyin, and resource strings on the Text Input settings page follow the in-app language</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Bug Fixes</h2>
|
||
<ul>
|
||
<li>Fixed polish answering a question: dictating a question (e.g. “Can you hear me?”) is no longer rewritten into an answer — the question is preserved across every style and intensity</li>
|
||
<li>Fixed the custom polish style editor occasionally opening a blank template</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Stability & Reliability</h2>
|
||
<ul>
|
||
<li>Rebuilt Bluetooth / audio-route handling so recording recovers more reliably after switching headsets</li>
|
||
<li>Fixed start / cancel races that could leave the UI stuck in polish after recognition finished</li>
|
||
<li>Apple on-device recognition uses voice-processing / noise reduction so your near-talk mic is preferred over other speakers in the room</li>
|
||
<li>Explicit timeouts and original-text fallback for recognition and polish — no endless waits on flaky networks</li>
|
||
<li>Stronger host ↔ keyboard result confirmation and recovery to reduce lost or uninsertable text</li>
|
||
<li>Fixed Volcengine ASR connection issues and false cloud ASR config-validation failures</li>
|
||
<li>Rebuilt keyboard launch path with lower peak memory to reduce crashes and jetsams</li>
|
||
<li>Input engines load on demand — faster Voice ↔ Typing switches and lower memory use</li>
|
||
<li>Does not wake the host app just to hold memory when the mic isn’t used</li>
|
||
<li>Removed redundant multi-step prompts; smoother experience when a session isn’t finished</li>
|
||
<li>More complete packaging for custom words and on-device recognition assets</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 1.1.0 ========== -->
|
||
<article class="version-block" data-version="1.1.0">
|
||
<div class="version-chip">1.1.0</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
<ul>
|
||
<li>新增「润色风格包」:内置轻度清理、清晰结构、正式表达、日常聊天,并支持 iCloud 同步</li>
|
||
<li>新增「趣味润色风格」:直男癌拯救器、装逼指南、大厂黑话、帝吧大神、小红书集美五种润色风格</li>
|
||
<li>新增自定义润色风格功能</li>
|
||
<li>新增「画中画」保活,并作为默认风格,支持在设置中切换回灵动岛;关掉画中画即可结束会话</li>
|
||
<li>云端识别支持真流式(百炼 / 火山 / OpenAI),说话时文字会实时上屏</li>
|
||
<li>新增历史记录可按天删除(只清当天)</li>
|
||
<li>设置里对流式 ASR 供应商显示「流式识别」标签;OpenAI 云端识别默认走流式</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>体验改进</h2>
|
||
<ul>
|
||
<li>设置页重新设计,结构更清晰</li>
|
||
<li>灵动岛保活默认改为 5 分钟(更省隐私与电量),支持多种时长设置</li>
|
||
<li>更新 iPhone 历史、词库 Tab 图标,与 Mac / iPad 统一</li>
|
||
<li>润色风格卡片与设置摘要更简洁,少装饰、少冗余状态字</li>
|
||
<li>设置、风格等相关页面统一卡片留白与圆角</li>
|
||
<li>更新权限与隐私说明</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>问题修复</h2>
|
||
<ul>
|
||
<li>完成新手引导后不再卡在最后一页</li>
|
||
<li>删除重装后会重新出现欢迎引导</li>
|
||
<li>松手后尾音更不容易丢字;识别过短时会整句再识别一次兜底</li>
|
||
<li>按下录音时麦克风预热阶段的开头语音更不易被丢掉</li>
|
||
<li>末段识别为空时,不再把前面已经识别好的字抹掉</li>
|
||
<li>修复趣味润色在短句时的失真问题</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
<ul>
|
||
<li>Polish style packs: Light Cleanup, Clear Structure, Formal, and Casual Chat, with iCloud sync</li>
|
||
<li>Fun polish styles: Straight-Talk Rescue, Flex Guide, Big-Tech Buzzwords, Tieba Legend, and Xiaohongshu Vibes</li>
|
||
<li>Custom polish styles</li>
|
||
<li>Picture-in-Picture keep-alive as the default, with Dynamic Island as an option in Settings; ending PiP ends the session</li>
|
||
<li>True streaming cloud ASR (Bailian / Volcengine / OpenAI) with live on-screen text while you speak</li>
|
||
<li>Delete history by day (clear only that day)</li>
|
||
<li>Settings shows a “Streaming ASR” badge for streaming providers; OpenAI cloud ASR defaults to streaming</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Improvements</h2>
|
||
<ul>
|
||
<li>Redesigned Settings with a clearer structure</li>
|
||
<li>Dynamic Island keep-alive defaults to 5 minutes (more privacy- and battery-friendly), with multiple duration options</li>
|
||
<li>Updated iPhone History and Dictionary tab icons to match Mac / iPad</li>
|
||
<li>Simpler polish-style cards and Settings summaries — less decoration and fewer status words</li>
|
||
<li>Consistent card padding and corner radius across Settings and style pages</li>
|
||
<li>Updated permission and privacy copy</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Fixes</h2>
|
||
<ul>
|
||
<li>Onboarding no longer sticks on the last page after completion</li>
|
||
<li>Welcome onboarding shows again after delete-and-reinstall</li>
|
||
<li>Less end-of-utterance truncation on release; very short captures retry the whole phrase</li>
|
||
<li>Speech at the start of mic warm-up is less likely to be dropped</li>
|
||
<li>An empty final segment no longer wipes earlier recognized text</li>
|
||
<li>Fixed fun-polish distortion on short sentences</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<script>
|
||
(function () {
|
||
function parseVersion(raw) {
|
||
if (!raw) return null;
|
||
var parts = String(raw).trim().split(".").map(function (p) {
|
||
var n = parseInt(p, 10);
|
||
return Number.isFinite(n) ? n : 0;
|
||
});
|
||
while (parts.length < 3) parts.push(0);
|
||
return parts.slice(0, 3);
|
||
}
|
||
|
||
function compareVersions(a, b) {
|
||
for (var i = 0; i < 3; i++) {
|
||
if (a[i] !== b[i]) return a[i] - b[i];
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
function readParams() {
|
||
var params = new URLSearchParams(window.location.search);
|
||
var lang = (params.get("lang") || "").toLowerCase();
|
||
if (lang.indexOf("zh") === 0) lang = "zh";
|
||
else if (lang.indexOf("en") === 0) lang = "en";
|
||
else lang = (navigator.language || "").toLowerCase().indexOf("zh") === 0 ? "zh" : "en";
|
||
|
||
var theme = (params.get("theme") || "").toLowerCase();
|
||
if (theme !== "light" && theme !== "dark") {
|
||
theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
||
}
|
||
|
||
var version = params.get("v") || params.get("version") || "";
|
||
return { lang: lang, theme: theme, version: version };
|
||
}
|
||
|
||
var cfg = readParams();
|
||
document.documentElement.lang = cfg.lang === "zh" ? "zh-Hans" : "en";
|
||
document.documentElement.setAttribute("data-theme", cfg.theme);
|
||
|
||
document.querySelectorAll(".lang-block").forEach(function (el) {
|
||
el.classList.toggle("visible", el.getAttribute("data-lang") === cfg.lang);
|
||
});
|
||
|
||
var current = parseVersion(cfg.version);
|
||
var blocks = Array.prototype.slice.call(document.querySelectorAll(".version-block"));
|
||
var visibleCount = 0;
|
||
|
||
blocks
|
||
.map(function (el) {
|
||
return { el: el, version: parseVersion(el.getAttribute("data-version")) };
|
||
})
|
||
.filter(function (item) {
|
||
if (!item.version) return false;
|
||
// No v= → show all; otherwise only versions <= current app version.
|
||
if (!current) return true;
|
||
return compareVersions(item.version, current) <= 0;
|
||
})
|
||
.sort(function (a, b) {
|
||
return compareVersions(b.version, a.version);
|
||
})
|
||
.forEach(function (item) {
|
||
item.el.classList.add("visible");
|
||
// Re-append in newest → oldest order.
|
||
item.el.parentNode.appendChild(item.el);
|
||
visibleCount += 1;
|
||
});
|
||
|
||
var empty = document.getElementById(cfg.lang === "zh" ? "empty-zh" : "empty-en");
|
||
if (empty) empty.classList.toggle("visible", visibleCount === 0);
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|