如何从零开发一个 TypeWhisper 插件:基于 Swift 的 Plugin SDK 完整教程

发布时间:2026/10/10 15:18:11

如何从零开发一个 TypeWhisper 插件:基于 Swift 的 Plugin SDK 完整教程 语音音频AI 应用桌面应用CLI插件系统【免费下载链接】typewhisper-macLocal speech-to-text for macOS on-device AI, fully private, optional cloud项目地址https://gitcode.com/gh_mirrors/ty/typewhisper-mac点击查看免费下载TypeWhisper 是一款运行在 macOS 上的本地语音转文字Speech-to-Text工具主打设备端 AI、完全私密、可选云端。通过它的 Swift 插件框架TypeWhisper Plugin SDK你可以按下面这份完整教程从创建工程到发布上架5 步开发出自己的第一个 TypeWhisper 插件 1️⃣ TypeWhisper 插件能做什么一个插件本质上是一个 macOS Bundle通过 TypeWhisperPluginSDK一个标准 Swift Package与主程序通信。SDK 定义了 5 种插件类型覆盖语音转文字应用的主要扩展点插件类型协议名典型用途转录引擎TranscriptionEnginePlugin接入新的语音转文字模型/云服务大模型LLMProviderPlugin用 LLM 做文本润色、总结、改写语音合成TTSProviderPlugin为朗读反馈提供新的 TTS 声音后处理器PostProcessorPlugin转录完成后自动清理/转换文本自定义动作ActionPlugin把转录结果发送到第三方服务一个插件类还可以同时实现多个协议比如一个插件既是转录引擎又提供 LLM相关协议定义在 TypeWhisperPlugin.swift。 想快速看懂一个真实插件推荐从最简单的 FillerWordsPlugin.swift 读起——它用不到 30 行代码就实现了自动去除语气词的后处理器。2️⃣ 环境准备Xcode 克隆仓库最低要求来自 README.mdmacOS 14.0Swift 6.0Xcode 16TypeWhisper 1.7.0新插件发布的最低宿主版本git clone https://gitcode.com/gh_mirrors/ty/typewhisper-mac克隆后打开TypeWhisper.xcodeprojSDK 的所有公共 API 都集中在 TypeWhisperPluginSDK/Sources/TypeWhisperPluginSDK/ 目录下包括HostServices宿主服务、PluginManifest清单模型、TypeWhisperEvent事件总线等核心文件直接查源码即可。3️⃣ 三步创建插件工程Bundle 目标 清单 代码骨架第一步创建 Bundle 目标在 Xcode 中执行File New Target macOS Bundle将 Product Name 设为你的插件名如MyPlugin再把TypeWhisperPluginSDK包添加为依赖——包定义见 Package.swift注意它声明了 macOS 14 平台和动态库产物。第二步编写 manifest.json 清单在 Bundle 的Contents/Resources/下创建manifest.json它是 TypeWhisper 识别插件的身份证{ id: com.yourname.myplugin, name: My Plugin, version: 1.0.0, minHostVersion: 1.7.0, sdkCompatibilityVersion: v1, minOSVersion: 14.0, author: Your Name, principalClass: MyPlugin }三个字段最容易踩坑id必须是唯一的反向域名格式com.typewhisper命名空间保留给官方插件principalClass必须与代码里objc(ClassName)的类名完全一致sdkCompatibilityVersion市场/外部插件必须与当前 SDK 兼容线一致目前为v1发布前可用仓库自带脚本校验清单避免构建被拒绝python3 scripts/validate_plugin_release_manifest.py path/to/manifest.json --version 1.0.0第三步编写最小插件类一个最简后处理器插件长这样import Foundation import SwiftUI import TypeWhisperPluginSDK objc(MyPlugin) final class MyPlugin: NSObject, PostProcessorPlugin, unchecked Sendable { static let pluginId com.yourname.myplugin static let pluginName My Plugin private var host: HostServices? required override init() { super.init() } func activate(host: HostServices) { self.host host } func deactivate() { host nil } var processorName: String { My Processor } var priority: Int { 500 } // 数字越小越先执行 MainActor func process(text: String, context: PostProcessingContext) async throws - String { return text.uppercased() } }如果你的插件需要用户配置比如填 API Key只需实现settingsView返回一个 SwiftUI 视图用户点击设置里的齿轮图标时就会弹出该界面官方示例可参考 FillerWordsPlugin 的设置视图。4️⃣ 与宿主交互HostServices 提供的核心能力插件激活时会收到一个HostServices实例这是你与 TypeWhisper 主程序交互的唯一入口能力说明安全存储storeSecret/loadSecret插件独立的 Keychain存 API Key用户偏好setUserDefault/userDefault插件独立的 UserDefaults文件存储pluginDataDirectory~/Library/Application Support/TypeWhisper/PluginData/插件ID/应用上下文activeAppName、activeAppBundleId知道用户当前在哪个 App 说话事件总线eventBus.subscribe监听转录完成、录音开始、文本插入等事件工作流availableWorkflows只读访问用户自定义的转录工作流以 OpenAI 兼容 API 为例SDK 还内置了PluginOpenAITranscriptionHelper转录、PluginOpenAIChatHelper聊天、PluginWavEncoder音频编码等助手类详见 SDK 文档 的 Built-in Helpers 章节——大多数云端插件不需要自己写一行 HTTP 请求。5️⃣ 构建安装3 种方式让插件生效构建成功后.bundle产物有三种安装方式从文件安装设置 → Discover plugins →Install from File...选择.bundle推荐日常使用手动复制拷贝到~/Library/Application Support/TypeWhisper/Plugins/符号链接开发期最快ln -s /path/to/DerivedData/.../MyPlugin.bundle ~/Library/Application\ Support/TypeWhisper/Plugins/改完代码重新构建即自动生效安装后在设置中启用插件即可。主程序加载插件的完整逻辑版本兼容检查、架构匹配、类加载位于 PluginManager.swift如果插件声明的minOSVersion或架构不满足TypeWhisper 会跳过加载并给出原因。6️⃣ 测试与发布到插件市场写测试SDK 提供了 PluginTestSupport.swift 测试工具集仓库中每个插件都带有Tests/目录例如 FillerWordsPlugin 的测试可以直接模仿。发布到社区市场流程见 README提交 PR把插件源码放入TypeWhisperPluginSDK/Plugins/你的插件Plugin/并添加 Bundle 目标在 PluginRegistry/community-v1/ 目录添加以插件 ID 命名的 JSON 注册表条目使用自己的 ID 命名空间和作者名com.typewhisper与作者TypeWhisper为官方保留源码评审通过后由维护者运行发布工作流完成构建、签名并写入市场 feed常见问题速答 插件没被加载先检查principalClass是否与objc类名一致再看minHostVersion/minOSVersion是否满足当前系统。API Key 存哪里用host.storeSecret它会进入插件作用域的 Keychain绝不写入明文文件。本地模型插件怎么写参考 CanaryPlugin基于 MLX 的本地转录引擎它在清单中用supportedArchitectures声明了仅支持 Apple Silicon。后处理器执行顺序怎么定用priority数值内置 LLM300、片段500、词典600数字越小越先执行。至此你已经完成了从环境搭建、工程创建、宿主交互到上架发布的完整链路。打开 Xcode复制一份 FillerWordsPlugin 作为起点改几行代码你的第一个 TypeWhisper 插件就能跑起来了 赞分享语音音频AI 应用桌面应用CLI插件系统【免费下载链接】typewhisper-macLocal speech-to-text for macOS on-device AI, fully private, optional cloud项目地址https://gitcode.com/gh_mirrors/ty/typewhisper-mac点击查看免费下载相关推荐终极指南如何为Decky Loader开发第一个插件从零开始的完整教程终极指南如何为Decky Loader开发第一个插件从零开始的完整教程 Decky Loader是Steam Deck上最强大的插件加载器它让用户能够轻后端前端插件系统重新定义你的宝可梦冒险Universal Pokemon Randomizer ZX深度探索重新定义你的宝可梦冒险Universal Pokemon Randomizer ZX深度探索 你是否曾想过那些熟悉的宝可梦游戏能否带来全新的体验Unive开发工具React Native Toast Message TypeScript类型定义详解完整的类型安全实现React Native Toast Message TypeScript类型定义详解完整的类型安全实现 React Native Toast Message创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/10 16:34:01

羽毛球轨迹预测代码解析:从数据预处理到STGCN建模

简介:本资源是一套基于深度学习的轨迹预测完整实现代码,面向人工智能初学者、高校学生及轨迹分析方向的研究者,解决船舶、车辆等移动对象未来位置预测的实际建模问题。压缩包共11个文件,含7个核心Python脚本(如lstm模型…

2026/10/10 16:34:01

OpenCV车牌识别从定位到模板匹配:Python完整流水线实战

简介:PythonOpenCV车牌自动识别实战项目,面向计算机视觉初学者与智能交通开发者,完整演示了从图像预处理、车牌定位、字符分割到模板匹配识别的全流程。资源包含2000个文件,包括1999张JPG图片和1个Python源码文件,压缩…

2026/10/10 16:34:01

DeepLabv3+图像分割实战:从Pytorch环境搭建到Cityscapes训练避坑

简介:面向图像分割学习者和算法工程师的DeepLabv3实战资源,基于Pytorch在VOC与Cityscapes两个公开数据集上完成训练、验证与推理,覆盖数据加载、数据增强、网络定义、损失函数、学习率策略、评估指标和可视化等关键环节,适合快速上…

2026/10/10 16:34:01

STM32基础1:嵌入式历史与生态

嵌入式历史与生态 目录 嵌入式历史与生态 一、历史生态问题 1.1.计算机发展的底层驱动 1.2.军转民 1.3.摩尔定律 1.4.通用与专用 1.5.嵌入式系统的诞生 1.6.嵌入式命名的由来 二、认识计算机 2.1.个人电脑(PC) 2.2.智能手机、平板电脑 2.3.…

2026/10/10 16:34:01

短剧内容自动化生产:知漫剧工作室落地教程

短剧工作室接单,最愁的不是没活,是活接不动:跨五六个软件做一条片,导文件、对序号、等渲染,产能全耗在搬运上。近期一轮工作室工具横评中被反复提及的知漫剧(zz.jiaxunai.cn),主打站…

2026/10/10 7:31:36

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/9 20:15:56

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 0:04:53

从逻辑门到计算机:数字电路核心原理与全加器搭建实战

如果你拆过一台旧电脑的主板,盯着那些黑乎乎的小芯片看上一会儿,可能会冒出同一个疑问:这堆引脚密集的元件,到底是怎么“变”出那么复杂的应用的?答案并不在某个神秘的部件里,而是在所有芯片内部都在反复使…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑