Apple rejected my dictation app for using the accessibility API
Apple rejected my dictation app for using the accessibility API
苹果因我使用辅助功能 API 而拒绝了我的听写应用
I built WhisperPad because I needed it. In the fall of 2024 the joints in my fingers started to hurt when I typed. Maybe the bill came due for spending most of my life on a keyboard: a childhood of video games, then 10 years working in tech. It got worse throughout the winter, and by early 2025, I could not type for sustained stretches without triggering an unsustainable level of pain. It was a progressive injury, so there was no single dramatic moment; just a slow narrowing of how much I could do in a day. That narrowing arrived at an inconvenient time. I was between jobs and trying to decide what came next, and I had landed on applying to a master’s program in human-computer interaction. My biggest fear about it was not whether I could keep up mentally. It was whether my hands would let me produce the work fast enough to keep pace.
我开发 WhisperPad 是因为我需要它。2024 年秋天,我的手指关节在打字时开始疼痛。这可能是因为我大半辈子都在使用键盘:童年时玩电子游戏,随后又在科技行业工作了 10 年。整个冬天情况持续恶化,到了 2025 年初,我已无法长时间打字,否则会引发难以忍受的剧痛。这是一种渐进性的损伤,因此没有某个单一的戏剧性时刻,只是我每天能做的事情在慢慢减少。这种局限性出现得非常不是时候。当时我正处于职业空窗期,在思考下一步该做什么,并决定申请人机交互专业的硕士课程。我最大的担忧不是能否跟上学习进度,而是我的双手是否能让我以足够快的速度完成作业。
What WhisperPad does (or did, anyway) WhisperPad lives in your menu bar. You press a keyboard shortcut, you talk, it transcribes what you said locally on your Mac, and it places the text into whatever field your cursor is in. Nothing is sent to a server. If you have clicked away by the time it finishes, the text is on your clipboard and you can paste it wherever you want. That is the whole app. The point was to make getting words out of my head and into the computer cost as few hand movements as possible.
WhisperPad 的功能(或者说曾经的功能)是驻留在你的菜单栏中。你按下快捷键,开始说话,它会在你的 Mac 上本地转录你所说的话,并将文本放入光标所在的任何输入框中。没有任何数据会被发送到服务器。如果转录完成时你已经点击了别处,文本会保存在你的剪贴板中,你可以将其粘贴到任何地方。这就是整个应用的功能。其核心目的在于,让文字从大脑输入到电脑的过程,尽可能减少手部动作。
In April, Apple rejected an update to my Mac dictation app, WhisperPad, under Guideline 2.4.5. Their position was that I was using the accessibility API in a way that wasn’t an accessibility use. The app exists because I have a hand injury. Apple had approved earlier versions doing the same thing. This time they did not. I had used Apple’s built-in dictation first, and the experience was a particular kind of frustrating. The transcription was close but rarely right, and every correction meant going back in with the keyboard, deleting, retyping. I was hurting my hands to fix the tool that was supposed to be saving them. That is the specific problem I wanted to solve: not “transcribe my voice,” but “transcribe my voice well enough that I am not constantly typing corrections.”
今年 4 月,苹果以违反 2.4.5 条款为由,拒绝了我 Mac 听写应用 WhisperPad 的更新。他们的立场是,我使用辅助功能(Accessibility)API 的方式并非真正的辅助功能用途。但这款应用的存在正是因为我有手部损伤。苹果此前曾批准过执行相同功能的早期版本,但这次却没有。我最初使用过苹果内置的听写功能,那种体验令人格外沮丧。转录结果虽然接近原意,但很少完全正确,每一次修正都意味着必须回到键盘上进行删除和重打。我为了修复本应保护双手的工具,反而让双手受到了伤害。这就是我想要解决的具体问题:不是“转录我的声音”,而是“足够准确地转录我的声音,让我不必不断地打字进行修正”。
The rejection Version 1.0 shipped in the winter, and it was free to download from the App Store. Next I added features early users asked for, and I decided to make it a paid app. That update was version 1.5. Apple rejected it under Guideline 2.4.5. The rejection was specifically about the accessibility permission. WhisperPad uses it to inject transcribed text into other applications, and Apple’s position was that this was not an approved use of that API. Earlier, approved versions of the app already did the identical thing with the identical permissions, so this was hard to swallow.
被拒经历:1.0 版本于冬季发布,在 App Store 上可免费下载。随后,我添加了早期用户要求的功能,并决定将其改为付费应用。那次更新是 1.5 版本,苹果以 2.4.5 条款为由拒绝了它。拒绝理由明确指向了辅助功能权限。WhisperPad 使用该权限将转录文本注入到其他应用程序中,而苹果认为这不是该 API 的批准用途。此前已获批的早期版本执行着完全相同的功能,并使用相同的权限,因此这让我很难接受。
The decision to split That second rejection is what forced a real decision, and I want to explain, because it would have been easy to make a worse one. I spent some time weighing two options: comply with Apple’s restrictions and release a version that fit their rules on the App Store (sacrificing the direct paste), or release WhisperPad through direct distribution. I decided I couldn’t sacrifice the reach of the App Store. So I would build a version that complied with their rules and put it there, and at the same time move ahead with direct distribution to deliver the full version I had originally set out to build.
拆分决定:第二次被拒迫使我做出真正的抉择,我想解释一下,因为做出一个更糟糕的决定其实很容易。我花了一些时间权衡两个方案:要么遵守苹果的限制,在 App Store 发布符合其规则的版本(牺牲直接粘贴功能);要么通过直接分发(Direct Distribution)发布 WhisperPad。我决定不能放弃 App Store 的覆盖面。因此,我将构建一个符合他们规则的版本放在商店里,同时推进直接分发,以提供我最初想要构建的完整版本。
So I split WhisperPad into two versions. The version on the Mac App Store does not auto-paste. It puts your transcribed text on the clipboard, and you press Command-V to place it. That takes the core flow from roughly four steps to six. That does not sound like much, and for most people it is not. The entire design goal of the app was to remove hand movements for people who need to be economical with them, so a 50% increase in steps is significant. It is a compromised version of the idea. But it is a real, useful app, and it is on the store where people with or without accessibility needs can stumble onto it.
因此,我将 WhisperPad 拆分为两个版本。Mac App Store 上的版本不支持自动粘贴。它会将转录文本放入剪贴板,你需要按下 Command-V 来粘贴。这使得核心流程从大约 4 个步骤增加到了 6 个。听起来差别不大,对大多数人来说确实如此。但这款应用的全部设计目标是为那些需要节省手部动作的人减少操作,所以步骤增加 50% 是非常显著的。这是一个妥协后的版本,但它仍然是一个真实、有用的应用,并且它存在于商店中,让那些有或没有辅助功能需求的人都能发现它。