feat(app): add crash visibility, memory relief, and clipboard reply work
Squashes the working tree that had accumulated on cloud-agent. Two strands of work, kept in one commit at the maintainer's request. Crash and stability (this session): - Subscribe to MetricKit so crash, hang, CPU, and disk-write diagnostics are recorded on device. Keyboard-extension memory kills are the most likely way a user loses the keyboard mid-sentence and iOS does not classify them as crashes, so they never reach App Store Connect. - Upload those reports to POST /v1/analytics/diagnostics from internal builds only (local Debug and TestFlight), reusing the analytics installation identifier and skipping entirely when analytics are off. App Store builds keep everything on device. - Shed the Chinese engine, English lexicon, and in-flight pipeline work at the 40 MiB and 48 MiB budget thresholds instead of waiting for a system memory warning that jetsam often preempts. - Install audio taps with the input node's live format through one shared adaptive resampler, so an audio-route change mid-recording no longer raises an uncatchable format-mismatch exception. Covers the dictation preview and the Mac recorder, which still used the pattern the Flow capture path had already moved away from. - Harden the librime bridge: never pass a nil string across a nonnull boundary when a user dictionary holds malformed UTF-8, null-check the engine API vector, and distrust a candidate count without its array. - Guard the expanded candidate grid against a list that shrinks while the collection view is still laying out against the previous count. - Resolve localized text without the App Group so the screen shown when that container is missing renders its message instead of crashing on launch, which is the one situation it exists to handle. - Gate CI on the App Group and Keychain wiring that the keyboard extension hard-depends on, with a self-test proving the check fails. Clipboard, reply, and semantics (pre-existing working tree): - Unify the reply center, refresh keyboard AI features, and add native event and reminder exporters. - Expand clipboard semantic routing with authored corpora and a product-blind holdout, plus the scripts that build and validate them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
Binary file not shown.
Binary file not shown.
+128
-123
@@ -15,8 +15,10 @@
|
||||
--card: #ffffff;
|
||||
--border: rgba(0, 0, 0, 0.08);
|
||||
--media-border: rgba(0, 0, 0, 0.06);
|
||||
--accent: #2f6fed;
|
||||
--chip-bg: rgba(47, 111, 237, 0.1);
|
||||
/* Brand green — matches OSGColor.brandAccent (#3AA05A) in the app. */
|
||||
--accent: #3aa05a;
|
||||
--chip-bg: rgba(58, 160, 90, 0.1);
|
||||
--card-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 10px 26px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
html[data-theme="dark"] {
|
||||
@@ -27,8 +29,10 @@
|
||||
--card: #161618;
|
||||
--border: rgba(255, 255, 255, 0.1);
|
||||
--media-border: rgba(255, 255, 255, 0.08);
|
||||
--accent: #6b9fff;
|
||||
--chip-bg: rgba(107, 159, 255, 0.16);
|
||||
/* Brightened brand green for legibility on dark surfaces. */
|
||||
--accent: #57c47d;
|
||||
--chip-bg: rgba(87, 196, 125, 0.16);
|
||||
--card-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 12px 30px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
@@ -85,6 +89,8 @@
|
||||
border-radius: 16px;
|
||||
padding: 18px 16px 8px;
|
||||
margin-bottom: 16px;
|
||||
/* Faint directional long shadow — mirrors the app's card depth. */
|
||||
box-shadow: var(--card-shadow);
|
||||
}
|
||||
|
||||
.version-block.visible { display: block; }
|
||||
@@ -153,9 +159,14 @@
|
||||
margin: 0 auto;
|
||||
border-radius: 14px;
|
||||
border: 0.5px solid var(--media-border);
|
||||
background: #000;
|
||||
}
|
||||
|
||||
/* Screenshots and demo clips are light captures — keep a light backing in
|
||||
both themes so a not-yet-painted frame never disappears against the dark
|
||||
page background (e.g. before autoplay starts). */
|
||||
.wn-media img { background: #ffffff; }
|
||||
.wn-media video { background: #ffffff; }
|
||||
|
||||
/* Landscape-ish clip (near-square) can sit a bit wider. */
|
||||
.wn-media.wide video,
|
||||
.wn-media.wide img {
|
||||
@@ -178,80 +189,16 @@
|
||||
<p class="empty" id="empty-zh">暂无与当前版本匹配的更新说明。</p>
|
||||
<p class="empty" id="empty-en">No release notes match this app version.</p>
|
||||
|
||||
<!-- ========== 2.0.3 ========== -->
|
||||
<article class="version-block" data-version="2.0.3">
|
||||
<div class="version-chip">2.0.3</div>
|
||||
<!-- ========== 2.1.0 ========== -->
|
||||
<!-- Cumulative notes for users upgrading from 1.8.0: 2.0.x were skipped as -->
|
||||
<!-- public releases, so all of their user-facing changes ship here. -->
|
||||
<article class="version-block" data-version="2.1.0">
|
||||
<div class="version-chip">2.1.0</div>
|
||||
|
||||
<div class="lang-block" data-lang="zh">
|
||||
<section class="section">
|
||||
<h2>英文个性词推荐</h2>
|
||||
<ul>
|
||||
<li>除中文输入习惯外,键盘现在也会学习你反复使用的英文生词,并推荐加入个人词库</li>
|
||||
<li>中英文推荐词都需要你确认后才会加入,原有的中文学习记录不受影响</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>界面一致性优化</h2>
|
||||
<ul>
|
||||
<li>统一卡片间距、设置页字体和菜单对齐方式,账号与购买记录的排版更整齐</li>
|
||||
<li>一级页面与详情页之间的标签栏过渡更自然</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>问题修复</h2>
|
||||
<ul>
|
||||
<li>重装 App 或重新回到前台后,Apple 账号登录状态恢复更可靠,登录过程中的加载提示保持一致</li>
|
||||
<li>在不同 App 之间切换后,中英文候选词可靠恢复,且不会残留上一个输入框的内容</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="lang-block" data-lang="en">
|
||||
<section class="section">
|
||||
<h2>English Personal-Term Suggestions</h2>
|
||||
<ul>
|
||||
<li>Alongside Chinese typing habits, the keyboard now learns rare English words you use repeatedly and suggests adding them to your Personal Dictionary</li>
|
||||
<li>Suggestions in either language are added only after you confirm, and existing Chinese learning history is preserved</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Interface Consistency</h2>
|
||||
<ul>
|
||||
<li>Card spacing, settings typography, menu alignment, and the account and purchase-history rows are now consistent</li>
|
||||
<li>Tab-bar transitions between primary pages and detail pages feel smoother</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Fixes</h2>
|
||||
<ul>
|
||||
<li>Apple sign-in is restored more reliably after a reinstall or when returning to the foreground, with a consistent loading state</li>
|
||||
<li>Chinese and English candidates recover reliably after switching apps, without leaking state from the previous text field</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- ========== 2.0.2 ========== -->
|
||||
<article class="version-block" data-version="2.0.2">
|
||||
<div class="version-chip">2.0.2</div>
|
||||
|
||||
<div class="lang-block" data-lang="zh">
|
||||
<section class="section">
|
||||
<h2>UI 与交互全面升级</h2>
|
||||
<ul>
|
||||
<li>iPhone 使用 iOS 26 原生 Liquid Glass 标签栏与页面过渡,切换标签时会保留各页面的导航状态</li>
|
||||
<li>技能页改为更清晰的已安装与未安装列表;点按技能进入完整详情页,集中管理安装、快捷指令配置和自定义技能编辑</li>
|
||||
<li>重新整理首页、账号、AI 服务和个人词库中的信息层级;缺少必要配置时,会直接说明原因并提供下一步入口</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="group">
|
||||
<h2>新增 Apple 账号登录</h2>
|
||||
<h2>全新 Apple 账号登录</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/account-sign-in-zh.png" alt="OSGKeyboard 通过 Apple 登录账号的真实界面卡片" loading="lazy" decoding="async">
|
||||
</div>
|
||||
@@ -275,49 +222,75 @@
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>新增个人专属风格</h2>
|
||||
<h2>全新 App 界面与视觉</h2>
|
||||
<ul>
|
||||
<li>iPhone 使用 iOS 26 原生 Liquid Glass 标签栏与页面过渡,切换标签时保留各页面的导航状态</li>
|
||||
<li>技能页改为更清晰的已安装与未安装列表,点按进入详情页,集中管理安装、快捷指令配置和自定义技能编辑</li>
|
||||
<li>重新整理首页、账号、AI 服务与个人词库的信息层级;缺少必要配置时会直接说明原因并提供下一步入口</li>
|
||||
<li>卡片统一加入淡雅的定向长投影;系统弹窗与模态操作改用自适应黑白配色,不再继承绿色,主次更清晰</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>首页焕新:月度用量日历与积分</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/monthly-usage-zh.png" alt="首页当月听写字数日历卡片" loading="lazy" decoding="async">
|
||||
</div>
|
||||
<ul>
|
||||
<li>首页与 Mac 总览用<strong>当月日历</strong>替换近七天图表,日期圆点的深浅代表当天听写字数,一眼看清整月节奏</li>
|
||||
<li>积分与邀请卡片从设置迁到首页统计上方,登录前也能看清免费注册与邀请奖励</li>
|
||||
<li>可直接从「听写字数」和「个性词库」卡片进入历史记录或个性词库</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>智能剪贴板技能与智能回复</h2>
|
||||
<div class="wn-media wide">
|
||||
<video src="assets/whats-new/smart-reply-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||||
</div>
|
||||
<ul>
|
||||
<li>端侧模型与本地规则会对剪贴板内容进行语义识别,并从完整技能目录中智能推荐最多五个相关操作(回复、翻译、总结、澄清、共情、商务回复、整理清单等)</li>
|
||||
<li>对可回复的消息,<strong>「回复」</strong>会给出<strong>普通 / 正式 / 轻松趣味</strong>三种个性化候选;键盘分别学习你的听写与回复偏好,让候选越来越像你</li>
|
||||
<li>遇到邀约、任务、祝福、澄清、共情等需要明确表态的场景,提供三种固定且清晰标注的立场,绝不替你猜测意图</li>
|
||||
<li>复制单个电话号码可直接拨号或新建联系人;复制网页链接可直接打开,或提取公开网页正文进行总结</li>
|
||||
<li>识别与推荐在设备端完成;只有运行需要 AI 的技能时内容才会发送给所选服务,选择反馈仅保留在本机</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>个人专属风格</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/personal-style-card-zh.png" alt="润色风格页面中的生成专属风格真实界面卡片" loading="lazy" decoding="async">
|
||||
</div>
|
||||
<ul>
|
||||
<li>可从自己的听写表达与明确修改中学习说话风格,生成专属于你的措辞和表达习惯</li>
|
||||
<li>个人风格可应用于剪贴板回复,在不改变原意的前提下调整用词与节奏,让回复更像你自己</li>
|
||||
<li>用于学习的文字语料仅在你主动点击生成时发送给所选 AI 服务,生成结果需要确认后才会保存和启用</li>
|
||||
<li>从你的听写表达和明确修改中学习说话风格,生成专属于你的措辞与表达习惯</li>
|
||||
<li>应用到剪贴板回复时,在不改变原意的前提下让用词和节奏更像你自己</li>
|
||||
<li>用于学习的语料仅在你点击「生成」时发送给所选 AI 服务,结果需确认后才会保存启用</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>新增智能剪贴板技能</h2>
|
||||
<ul>
|
||||
<li>端侧模型与本地规则会对剪贴板内容进行基础语义识别,并从完整技能目录中智能推荐最多五个相关操作</li>
|
||||
<li>可识别任务、邀约、问句、情绪和语言,推荐回复、翻译、总结、澄清、共情、商务回复或整理清单等技能</li>
|
||||
<li>复制单个电话号码时可直接拨号或新建联系人;复制网页链接时可直接打开,或提取公开网页内容进行总结</li>
|
||||
<li>识别和推荐过程在设备端完成;只有主动运行需要 AI 的技能时,相关内容才会发送给所选服务</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>新增自动推荐个人热词</h2>
|
||||
<h2>更聪明的输入</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/personal-terms-card-zh.png" alt="首页个性词库中的个人热词推荐真实界面卡片" loading="lazy" decoding="async">
|
||||
</div>
|
||||
<ul>
|
||||
<li>根据键盘中反复输入的新词自动生成个人热词推荐,让常用名称、术语和表达更容易再次输入</li>
|
||||
<li>推荐词必须由你明确确认后才会加入个人词库;本地学习不会记录完整击键内容</li>
|
||||
<li>根据键盘中反复输入的新词自动推荐个人热词,让常用名称、术语与表达更容易再次输入;本地学习不会记录完整击键内容</li>
|
||||
<li>在中文输入习惯之外,也会学习你反复使用的<strong>英文生词</strong>并推荐加入个人词库;中英文推荐词都需你确认后才会加入</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>问题修复与其他</h2>
|
||||
<ul>
|
||||
<li>Apple 账号登录状态更可靠:令牌轮换更稳,已撤销的登录不会被恢复,切换 App 后中英文候选词可靠恢复</li>
|
||||
<li>推荐热词按真实来源标记,移除词库列表中的内部使用次数,iPhone 确认弹窗指向所选热词</li>
|
||||
<li>移除自愿打赏,积分包成为唯一的 App 内购买项</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="lang-block" data-lang="en">
|
||||
<section class="section">
|
||||
<h2>UI and Interaction, Rebuilt</h2>
|
||||
<ul>
|
||||
<li>iPhone now uses the native iOS 26 Liquid Glass tab bar and transitions while preserving each tab's navigation state</li>
|
||||
<li>Skills are organized into clearer Installed and Not Installed lists; tap one to manage installation, Shortcut setup, or custom-skill editing on a dedicated detail page</li>
|
||||
<li>Home, Account, AI Service, and Personal Dictionary now have a clearer hierarchy, with direct explanations and next steps when setup is incomplete</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="group">
|
||||
<h2>New Sign in with Apple</h2>
|
||||
@@ -344,45 +317,77 @@
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>New Personal Style</h2>
|
||||
<h2>A New App Interface and Visual Language</h2>
|
||||
<ul>
|
||||
<li>iPhone uses the native iOS 26 Liquid Glass tab bar and transitions while preserving each tab's navigation state</li>
|
||||
<li>Skills are organized into clearer Installed and Not Installed lists; tap one to manage installation, Shortcut setup, or custom-skill editing on a dedicated detail page</li>
|
||||
<li>Home, Account, AI Service, and Personal Dictionary have a clearer hierarchy, with direct explanations and next steps when setup is incomplete</li>
|
||||
<li>Card surfaces gain a faint directional long shadow; system dialogs and modal actions use adaptive black or white instead of the green accent</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Home, Refreshed: Monthly Usage Calendar and Credits</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/monthly-usage-en.png" alt="Home monthly dictation-characters calendar card" loading="lazy" decoding="async">
|
||||
</div>
|
||||
<ul>
|
||||
<li>Home and the Mac Dashboard replace the seven-day chart with a full <strong>current-month calendar</strong> whose date-circle opacity reflects each day's dictation characters</li>
|
||||
<li>The credits and invitation card moves from Settings to Home above the usage metrics, explaining free signup and referral rewards before you sign in</li>
|
||||
<li>Open History or Personal Dictionary directly from their metric cards</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Smart Clipboard Skills and Replies</h2>
|
||||
<div class="wn-media wide">
|
||||
<video src="assets/whats-new/smart-reply-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||||
</div>
|
||||
<ul>
|
||||
<li>On-device models and local rules recognize clipboard content and recommend up to five relevant actions from the full catalog (Reply, Translate, Summarize, Clarify, Empathy, Business Reply, Organize List, and more)</li>
|
||||
<li>For a message worth answering, <strong>Reply</strong> offers <strong>Ordinary / Formal / Playful</strong> personalized choices; the keyboard learns your dictation and reply preferences separately so they sound more like you</li>
|
||||
<li>For invitations, tasks, blessings, clarifications, and empathy — where intent must not be guessed — it offers three fixed, clearly labeled positions</li>
|
||||
<li>A copied phone number can open calling or a prefilled new-contact form; a copied web link can open directly or be summarized from bounded public webpage content</li>
|
||||
<li>Recognition and recommendation stay on device; content is sent to the selected service only when a skill needs AI, and choice feedback stays on this device</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Personal Style</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/personal-style-card-en.png" alt="Real Generate Your Style card on the Polish Styles page" loading="lazy" decoding="async">
|
||||
</div>
|
||||
<ul>
|
||||
<li>Learn a personal speaking style from your dictation and explicit edits, capturing the wording and expression patterns that make your voice distinct</li>
|
||||
<li>Apply that style to clipboard replies so wording and rhythm sound more like you without changing the original meaning</li>
|
||||
<li>Learning text is sent to the selected AI service only when you explicitly tap Generate, and the result must be reviewed before it is saved and enabled</li>
|
||||
<li>Learn a personal speaking style from your dictation and explicit edits, capturing the wording and expression that make your voice distinct</li>
|
||||
<li>Apply it to clipboard replies so wording and rhythm sound more like you, without changing the original meaning</li>
|
||||
<li>Learning text is sent to the selected AI service only when you tap Generate, and the result is saved only after you review it</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>New Smart Clipboard Skills</h2>
|
||||
<ul>
|
||||
<li>On-device models and local rules perform lightweight semantic recognition, then recommend up to five relevant actions from the complete skill catalog</li>
|
||||
<li>Tasks, invitations, questions, sentiment, and language can surface skills such as Reply, Translate, Summarize, Clarify, Empathy, Business Reply, or Organize List</li>
|
||||
<li>A single copied phone number can open calling or a prefilled new-contact form; a copied web link can open directly or be summarized from bounded public webpage content</li>
|
||||
<li>Recognition and recommendation stay on device. Content is sent to the selected service only after you run a skill that requires AI</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>New Automatic Personal-Term Suggestions</h2>
|
||||
<h2>Smarter Typing</h2>
|
||||
<div class="wn-media wide">
|
||||
<img src="assets/whats-new/personal-terms-card-en.png" alt="Real personal-term suggestion card on Home" loading="lazy" decoding="async">
|
||||
</div>
|
||||
<ul>
|
||||
<li>Repeated new terms from keyboard input become suggestions, making frequently used names, terminology, and expressions easier to type again</li>
|
||||
<li>A suggestion joins Personal Dictionary only after your explicit confirmation; local learning does not record complete keystrokes</li>
|
||||
<li>Repeated new terms from keyboard input become suggestions, making frequently used names, terminology, and expressions easier to type again; local learning does not record complete keystrokes</li>
|
||||
<li>Beyond Chinese typing habits, the keyboard learns rare <strong>English words</strong> you use repeatedly and suggests them; suggestions in either language are added only after you confirm</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<h2>Fixes and Other Changes</h2>
|
||||
<ul>
|
||||
<li>Apple sign-in is more durable: steadier token rotation, a revoked login is no longer restored, and Chinese/English candidates recover reliably after switching apps</li>
|
||||
<li>Hotword recommendations are labeled by their real source, internal usage counts are removed from dictionary rows, and the iPhone confirmation popover points at the selected hotword</li>
|
||||
<li>The voluntary tip purchase is removed; credit packs are now the only in-app purchase</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- ========== 2.0.1 ========== -->
|
||||
<!-- Consolidated into the cumulative 2.0.2 user-facing release notes. -->
|
||||
|
||||
<!-- ========== 2.0.0 ========== -->
|
||||
<!-- Intentionally skipped in user-facing notes; key changes are included in 2.0.2. -->
|
||||
<!-- ========== 2.0.0 – 2.0.3 ========== -->
|
||||
<!-- Skipped as public releases; all user-facing changes are folded into 2.1.0 above. -->
|
||||
|
||||
<!-- ========== 1.8.0 ========== -->
|
||||
<article class="version-block" data-version="1.8.0">
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<li><strong>Speaking-style learning</strong> — voice history can retain the displayed final text and, when available, the corrected ASR text from before AI polishing plus a deduplicated snapshot of the polish-style prompt used for that take. The pre-polish text is not shown in History. Only after you tap “Generate My Style” are eligible before-and-after pairs and their prior style prompts sent to your configured AI service. Native speech and explicit user edits are used to infer recurring habits; historical prompts are supplied only to distinguish and remove AI-added style. The generated prompt is shown for review and is not saved or activated until you confirm it. When you later invoke a conversational clipboard-reply skill while a reviewed user-created style is active, that style prompt is sent with the copied text so the reply can follow your wording and rhythm; built-in polish personalities are not attached. User-configured requests go directly to that provider; managed-credit requests go through <code>account.osglab.com</code>.</li>
|
||||
<li><strong>AI mode questions</strong> — in AI keyboard mode, your spoken question text—or a question you tap from an idle suggestion—is sent to the selected AI service. User-configured requests go directly to that provider; managed-credit requests go through <code>account.osglab.com</code>. When the selected service supports server-side web search, it may retrieve public web results for time-sensitive answers.</li>
|
||||
<li><strong>AI suggestions and OSGKeyboard web pages</strong> — the main app may request public suggestion titles from <code>key.osglab.com</code>; no voice, transcript, clipboard body, API key, or ordinary keystroke content is included in that request. Opening the update page requests public content from <code>download.osglab.com</code>. As with ordinary HTTPS sites, those hosts and their infrastructure may process connection metadata such as IP address and request time.</li>
|
||||
<li><strong>AI Agent skills, Shortcuts, and maps</strong> — when you deliberately run a skill, the selected or copied text and skill prompt are sent to your configured LLM provider. For Reminders, Calendar, or Notes exports, the generated result is passed on-device to the Apple Shortcut you install; OSGKeyboard does not receive the resulting item. For navigation, an address or route is placed in a URL opened by Apple Maps, Amap, or Baidu Maps, and the selected map provider's policy applies.</li>
|
||||
<li><strong>AI Agent skills, Shortcuts, and maps</strong> — when you deliberately run a skill, the selected or copied text and skill prompt are sent to your configured LLM provider. For Reminders and Calendar exports, the app writes the generated items directly through Apple's EventKit on this device, after iOS asks you for permission; Calendar is requested with write-only access, so the app can add events but never reads your existing ones. Nothing about these items is sent to OSGKeyboard servers. For Notes exports, the generated result is passed on-device to the Apple Shortcut you install; OSGKeyboard does not receive the resulting item. For navigation, an address or route is placed in a URL opened by Apple Maps, Amap, or Baidu Maps, and the selected map provider's policy applies.</li>
|
||||
<li><strong>API credentials</strong> — your user-configured provider keys are stored in the iOS Keychain and shared with the keyboard through a shared Keychain group, never through UserDefaults. When you enable <strong>iCloud settings sync</strong>, API keys replicate through Apple's <strong>iCloud Keychain</strong> to your other signed-in devices — not through iCloud Key-Value Store JSON.</li>
|
||||
<li><strong>Optional OSGKeyboard account and purchases</strong> — no account is required for local transcription or user-configured providers. If you choose Sign in with Apple, the account service processes the Apple identity token, a pseudonymous OSGKeyboard account identifier, optional display name, device-integrity evidence, credit balance, referral state, and StoreKit transaction identifiers needed to verify consumable credit purchases. Account session tokens stay in the main app's private Keychain; the keyboard extension receives only a short-lived, scope-limited managed-service grant. You can sign out or delete the account in the app.</li>
|
||||
<li><strong>App preferences</strong> — engine mode, recognition language, polish intensity, translation target, handedness, and keyboard settings are stored in App Group <code>UserDefaults</code> so the main app and keyboard extension stay in sync. Device-local clipboard consent switches are not activated by iCloud settings sync.</li>
|
||||
@@ -60,7 +60,7 @@
|
||||
<h2>What we do not collect</h2>
|
||||
<ul>
|
||||
<li>We do <strong>not</strong> log or upload ordinary keystrokes. Only the on-device Chinese candidate-learning data described above is retained locally.</li>
|
||||
<li>We do <strong>not</strong> use third-party analytics, crash-reporting, advertising SDKs, ATT, or IDFA.</li>
|
||||
<li>We do <strong>not</strong> use third-party analytics, crash-reporting, advertising SDKs, ATT, or IDFA. OSGKeyboard records Apple <strong>MetricKit</strong> crash and hang diagnostics on your device so you can export them from Settings ▸ Diagnostics; App Store builds never upload them. Beta builds distributed through TestFlight additionally upload these diagnostics to <code>account.osglab.com</code>, and you can turn that off in the same screen. The reports contain crash metadata only — exception type, signal, termination reason, binary names and a truncated call stack — never audio, transcripts, clipboard content, prompts, or API keys.</li>
|
||||
<li>We do <strong>not</strong> upload raw audio on a local engine. Audio leaves the device only after you select a user-configured cloud engine or managed credits.</li>
|
||||
<li>We do <strong>not</strong> sell personal data.</li>
|
||||
</ul>
|
||||
@@ -108,7 +108,7 @@
|
||||
<li><strong>说话风格学习</strong> — 语音历史可同时保留界面展示的最终文本、可用时保留 AI 润色前且已经过确定性纠错的 ASR 文本,以及当次使用的润色风格 Prompt 去重快照;润色前文本不会在历史界面显示。只有当你主动点击「生成我的风格」后,符合条件的润色前后文本对及对应历史 Prompt 才会发送给你配置的 AI 服务。原生口述与用户明确编辑用于归纳反复出现的习惯;历史 Prompt 只用于识别并排除 AI 附加风格。生成结果会先展示供你检查,确认保存前不会写入或启用。之后,当你启用了经检查的用户自定义风格并主动使用口语回复类剪贴板技能时,该风格 Prompt 会随复制文本一起发送,用于贴近你的用词与节奏;内置润色人格不会附加。用户自备请求直达所选服务商;托管积分请求经 <code>account.osglab.com</code> 处理。</li>
|
||||
<li><strong>AI 模式问题</strong> — 在 AI 键盘模式下,语音转写后的问题文字或你点选的建议会发送到当前选择的 AI 服务。用户自备请求直达所选服务商;托管积分请求经 <code>account.osglab.com</code> 处理。所选服务支持联网搜索时,可能检索公开网页结果回答时效性问题。</li>
|
||||
<li><strong>AI 建议与 OSGKeyboard 网页</strong> — 主 App 可能从 <code>key.osglab.com</code> 请求公开建议标题;该请求不包含语音、转写、剪贴板正文、API Key 或普通击键内容。打开更新页时会从 <code>download.osglab.com</code> 请求公开内容。与普通 HTTPS 网站相同,相关主机与基础设施可能处理 IP 地址、请求时间等连接元数据。</li>
|
||||
<li><strong>AI Agent 技能、快捷指令与地图</strong> — 仅在你主动运行技能时,所选或复制的文字及技能提示词才会发送到你配置的 LLM 服务商。导出提醒事项、日历或备忘录时,生成结果会在设备端交给你安装的 Apple 快捷指令;OSGKeyboard 不会收到最终创建的项目。导航时,地址或路线会写入 URL 并交给 Apple 地图、高德地图或百度地图,相应地图服务商的政策适用。</li>
|
||||
<li><strong>AI Agent 技能、快捷指令与地图</strong> — 仅在你主动运行技能时,所选或复制的文字及技能提示词才会发送到你配置的 LLM 服务商。导出提醒事项与日历时,App 在本机经 iOS 授权后通过 Apple EventKit 直接写入;日历仅申请「仅写入」权限,只能新增日程、无法读取你已有的日程,相关内容不会发送到 OSGKeyboard 服务器。导出备忘录时,生成结果会在设备端交给你安装的 Apple 快捷指令;OSGKeyboard 不会收到最终创建的项目。导航时,地址或路线会写入 URL 并交给 Apple 地图、高德地图或百度地图,相应地图服务商的政策适用。</li>
|
||||
<li><strong>API 凭证</strong> — 用户自备服务商的 API Key 保存在设备 Keychain,通过共享 Keychain 组与键盘扩展共享,<strong>不会</strong>写入 <code>UserDefaults</code>。开启<strong>iCloud 设置同步</strong>后,API 密钥经 Apple <strong>iCloud 钥匙串</strong>同步到你其他已登录设备,<strong>不会</strong>写入 iCloud 键值存储 JSON。</li>
|
||||
<li><strong>可选 OSGKeyboard 账号与购买</strong> — 本地转写和用户自备服务商无需账号。若你选择 Apple 登录,账号服务会处理 Apple 身份令牌、匿名化的 OSGKeyboard 账号标识、可选昵称、设备完整性证明、积分余额、邀请状态,以及核验消耗型积分包所需的 StoreKit 交易标识。账号会话令牌只保存在主 App 私有 Keychain;键盘扩展仅获得短时、限权的托管服务凭证。你可以在 App 内退出或注销账号。</li>
|
||||
<li><strong>应用偏好</strong> — 引擎模式、识别语言、润色档位、翻译目标、握持偏好与键盘设置等保存在 App Group <code>UserDefaults</code>,用于主 App 与键盘扩展之间的状态同步。本机剪贴板许可开关不会被 iCloud 设置同步开启。</li>
|
||||
@@ -125,7 +125,7 @@
|
||||
<h2>我们不收集的内容</h2>
|
||||
<ul>
|
||||
<li>我们<strong>不会</strong>记录或上传你平时在键盘上的击键内容。</li>
|
||||
<li>我们<strong>不会</strong>集成第三方分析、崩溃上报或广告 SDK,也不使用 ATT 或 IDFA。</li>
|
||||
<li>我们<strong>不会</strong>集成第三方分析、崩溃上报或广告 SDK,也不使用 ATT 或 IDFA。OSGKeyboard 会在你的设备上记录 Apple <strong>MetricKit</strong> 崩溃与卡顿诊断,供你在「设置 ▸ 诊断」中导出;App Store 版本不会上传。通过 TestFlight 分发的内测版本会额外将这些诊断上传至 <code>account.osglab.com</code>,可在同一页面关闭。报告只包含崩溃元数据——异常类型、信号、终止原因、二进制名称与截断的调用栈——不包含录音、转写文本、剪贴板内容、提示词或 API 密钥。</li>
|
||||
<li>使用本地引擎时,我们<strong>不会</strong>上传原始录音。只有你选择用户自备云端识别或托管积分后,录音才会离开设备。</li>
|
||||
<li>我们<strong>不会</strong>出售个人数据。</li>
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user