Push-to-talk
+Press and hold the mic key, speak naturally, release — polished text lands at your cursor.
+diff --git a/OSGKeyboard/AppIcon.icon/Assets/App Icon Template.svg b/OSGKeyboard/AppIcon.icon/Assets/App Icon Template.svg new file mode 100644 index 0000000..92bd30d --- /dev/null +++ b/OSGKeyboard/AppIcon.icon/Assets/App Icon Template.svg @@ -0,0 +1,23 @@ + diff --git a/OSGKeyboard/AppIcon.icon/icon.json b/OSGKeyboard/AppIcon.icon/icon.json new file mode 100644 index 0000000..8608d5d --- /dev/null +++ b/OSGKeyboard/AppIcon.icon/icon.json @@ -0,0 +1,41 @@ +{ + "fill" : { + "linear-gradient" : [ + "extended-gray:0.25000,1.00000", + "display-p3:0.13763,0.15253,0.17418,1.00000" + ] + }, + "groups" : [ + { + "blur-material" : null, + "hidden" : false, + "layers" : [ + { + "fill" : "none", + "hidden" : false, + "image-name" : "App Icon Template.svg", + "name" : "App Icon Template", + "opacity" : 1 + } + ], + "lighting" : "individual", + "shadow" : { + "kind" : "none", + "opacity" : 0.5 + }, + "specular" : false, + "translucency" : { + "enabled" : false, + "value" : 0.5 + } + } + ], + "supported-platforms" : { + "circles" : [ + "watchOS" + ], + "squares" : [ + "iOS" + ] + } +} \ No newline at end of file diff --git a/OSGKeyboardExt/Utilities/ExtL10n.swift b/OSGKeyboardExt/Utilities/ExtL10n.swift index 0bb5f14..61cb664 100644 --- a/OSGKeyboardExt/Utilities/ExtL10n.swift +++ b/OSGKeyboardExt/Utilities/ExtL10n.swift @@ -1,17 +1,26 @@ // ExtL10n.swift // OSGKeyboard · Keyboard Extension // -// Loads strings from the keyboard extension bundle (not SwiftUI's default -// bundle, which may not see our Localizable.strings). +// Loads strings from Keyboard.strings in the extension bundle. We use a +// dedicated strings table (not Localizable.strings) because XcodeGen merges +// duplicate Localizable.strings variant groups into the main app target only. import Foundation import SwiftUI enum ExtL10n { + private static let table = "Keyboard" private static let bundle = Bundle(for: KeyboardViewController.self) static func string(_ key: String) -> String { - NSLocalizedString(key, bundle: bundle, comment: "") + let value = NSLocalizedString( + key, + tableName: table, + bundle: bundle, + value: key, + comment: "" + ) + return value } static func text(_ key: String) -> Text { diff --git a/OSGKeyboardExt/en.lproj/Localizable.strings b/OSGKeyboardExt/en.lproj/Keyboard.strings similarity index 100% rename from OSGKeyboardExt/en.lproj/Localizable.strings rename to OSGKeyboardExt/en.lproj/Keyboard.strings diff --git a/OSGKeyboardExt/zh-Hans.lproj/Localizable.strings b/OSGKeyboardExt/zh-Hans.lproj/Keyboard.strings similarity index 100% rename from OSGKeyboardExt/zh-Hans.lproj/Localizable.strings rename to OSGKeyboardExt/zh-Hans.lproj/Keyboard.strings diff --git a/docs/index.html b/docs/index.html index f1c377b..b49fada 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,172 +3,845 @@
-Tap to talk. Polished text in any app.
++ A custom keyboard that transcribes your voice on-device and optionally polishes the result with the LLM you configure — WeChat, Notes, Mail, ChatGPT, and everywhere else you type. +
+Notes
+OSGKeyboard active
+- OSGKeyboard is a custom keyboard extension that transcribes your voice on-device - and optionally polishes the result through an LLM you configure. - Works in WeChat, Notes, Mail, ChatGPT, and anywhere a keyboard appears. -
-- Audio is processed on your device for transcription. We do not log ordinary keystrokes. - In Cloud polish mode, only the transcribed text (not audio) is sent to your chosen API provider. -
-点按说话,任意 App 里获得润色文字。
+Native SwiftUI, privacy-first architecture, and a Typeless-style push-to-talk experience.
+Press and hold the mic key, speak naturally, release — polished text lands at your cursor.
+Speech stays on your iPhone. Apple's on-device speech stack handles transcription — audio never leaves the device.
+Optional cloud pass adds punctuation, structure, and clarity. Only the transcript is sent — not your voice.
+Works with any OpenAI-compatible endpoint: OpenAI, DeepSeek, Qwen DashScope, or your own server.
+No ordinary keystroke logging. You choose when cloud polish runs and which provider receives text.
+Pure Swift 6 and SwiftUI — no CocoaPods, no Carthage, no third-party packages.
+- OSGKeyboard 是一款自定义键盘扩展:在设备端转写语音,并可选通过你配置的 LLM 润色结果。 - 适用于微信、备忘录、邮件、ChatGPT 等所有出现键盘的场景。 -
-Three gestures between thought and sent message.
+Install from source, turn on OSGKeyboard in iOS Settings, and allow Full Access for mic + your API.
+Switch to OSGKeyboard in any text field, press and hold the circular record button, and speak.
+On-device transcription runs instantly; optional LLM polish returns clean text right where you type.
+