← 返回 Siami 首頁

因為 Apple 拒絕了我的聽寫應用,原因是我使用了輔助使用 API

▲ 205 💬 123
因為 Apple 拒絕了我的聽寫應用,原因是我使用了輔助使用 API

因為 Apple 拒絕了我的聽寫應用,原因是我使用了輔助使用 API

Rene Zelaya · 2026 年 5 月 27 日

我打造 WhisperPad 是因為我需要它。2024 年秋天,我每打一次字,手指關節就開始痛。也許是為大半輩子坐在鍵盤前付出了代價:小時候打電動遊戲,後來在科技業工作了十年。整個冬天狀況愈來愈嚴重,到 2025 年初,我已經無法長時間打字而不引發難以承受的疼痛。這是一種漸進式的傷害,沒有戲劇性的單一瞬間;只是我每天能做的事情一點一點地變窄。

那個縮限發生在最不方便的時機。我當時在待業,試著想清楚下一步要做什麼,我已經決定要去申請人機互動碩士學位。我最擔心的不是腦袋能不能跟上,而是我的手能不能讓我以足夠快的速度完成作業。

WhisperPad 在做什麼(或曾經在做什麼)

WhisperPad 住在你的選單列裡。你按一個鍵盤快速鍵,講話,它會在你的 Mac 上本地轉錄你說的話,然後把文字放進你游標所在的任何欄位。一切都不會送到伺服器。如果你講完前已經點開別的視窗,文字會留在你的剪貼簿上,你可以貼到任何你想貼的地方。這就是整個 App 的全部。設計目標是讓「把字從腦袋搬進電腦」這件事花費最少的手部動作。

那個在你聽寫時會出現的視窗指示器。

今年四月,Apple 拒絕了我 Mac 聽寫 App WhisperPad 的一次更新,引用的規範是 2.4.5。他們的立場是我使用輔助使用 API 的方式「不屬於輔助使用用途」。這個 App 存在的原因就是我有手部傷害。Apple 之前核准過做一模一樣事情的版本,這次卻沒有。

我先用過 Apple 內建的聽寫功能,體驗是一種特定的挫折感。轉錄的內容「差不多對」但很少真的對,每一次修正都意味著要回到鍵盤前、刪掉、重打。我正在用痛的手去修補那個本該拯救我手的工具。這是我真正想解決的問題:不是「把我的聲音轉成文字」,而是「把我的聲音轉得夠準,讓我不用一直打字去修正」。

坦白講,我處理這件事的方式不是先做市場研究。市面上可能已經有很好的工具,但大部分都會把你的音訊送到某個伺服器,而我想要的是不會送出去的東西。當我想要某個東西時,我的第一個問題通常是「我可以自己做出來嗎」,而不是「我可以買到什麼」。

第一版很粗糙,但我每天都用、一直改進。我把它分享給幾位同學,看著他們把它整合進自己的日常工作流程。看見其他人默默開始依賴它,讓我更想把它好好地正式發布出去。

被拒絕

1.0 版在冬天上架,免費從 App Store 下載。接著我加入了早期用戶要求的功能,決定把它做成付費 App。那次更新是 1.5 版。

Apple 拒絕了它,引用的是 2.4.5 規範。拒絕理由特別針對輔助使用權限。WhisperPad 用這個權限把轉錄出來的文字注入到其他應用程式,而 Apple 的立場是這不是該 API 的核准用途。之前被核准的版本已經在做一模一樣的事、用一模一樣的權限,所以這次的結果很難吞下去。

拒絕說明裡也有一些合理的回饋,我修了那些問題,但 2.4.5 才是真正的牆。所以我提出申訴,解釋 WhisperPad 本身就是當作輔助使用工具在運作,我有重複性勞損傷害,整個 App 用這種方式注入文字的原因,正是為了讓那些跟我一樣、負擔不起多打幾下按鍵的人能保護自己的手。我請 Apple 從這個角度來看這件事。

他們回應說會再看仔細一點,告訴我不要在該討論串裡回覆,並說會再回覆決定。那天是 4 月 21 日。

然後就靜悄悄了。到 5 月 21 日我什麼都沒收到,所以我寄了一封簡短、禮貌的備忘訊息詢問進度。我做過客服,知道工單會被忽略,我想輕輕推一下把它推回待辦堆。

他們這次回得很快,答案是又一次拒絕。

決定分流

第二次拒絕逼出一個真正的決定,我想說明一下,因為要做成比較糟的決定其實很容易。

我花了一點時間權衡兩個選項:遵守 Apple 的限制,發一個符合他們規則的版本到 App Store(犧牲直接貼上功能),或者透過直接發布的方式把 WhisperPad 推出來。我決定不能放棄 App Store 帶來的觸及面。所以我會做一個符合規則的版本上架,同時繼續走直接發布,把我原本想做的那個完整版本交到使用者手上。

關於這條限制有件事要說。以我所能理解的,Apple 的規範是用來約束「App 為了輔助使用而把文字注入到它自己內部」,而不是「注入到其他 App」。這是我的猜測,因為我從來沒得到一個非常清楚的解釋。(如果你對這條規範更了解、能指正我,歡迎聯絡——我想聽。)無論如何,一個 App 伸進你系統裡的每一個其他應用程式,確實是要小心的事情,我可以理解 WhisperPad 為什麼會落在這條線的尷尬位置。

所以我把 WhisperPad 拆成了兩個版本。

Mac App Store 上的版本不會自動貼上。它會把你轉錄出來的文字放到剪貼簿,然後你按 Command-V 貼上。這把核心流程從大約四個步驟變成六個。聽起來不多,對大多數人來說也確實不多。這個 App 的整個設計目標就是為需要節省手部動作的人減少手部動作,所以步驟多 50% 是顯著的。這是這個想法被妥協後的版本。但它是一個真的、有用的 App,而且擺在商店裡,有沒有輔助使用需求的人都有可能偶然看到它。App Store 讓它可以被發現。

原始的願景——那個會直接把文字貼到你游標位置的那個——我自己上架了,繞過 App Store。

直接發布

在 App Store 之外發布軟體意味著要自己重建那些商店平常幫你處理的事。還有一道新的信任門檻:你要使用者相信你會在他們自己的網站上處理信用卡。

付款我選了 Paddle,事先研究過幾個選項。更新我用的是 Sparkle,這是個老牌框架,專門用來在商店之外把 Mac App 保持在最新狀態。授權則用授權金鑰,會去跟一台小伺服器做檢查。這些都不稀奇,是獨立 Mac 軟體那條走過無數次的老路,但對我來說全都是新的,做到正確花了不少功夫。實務上,我把 App fork 成不同的建置目標:一個配給 App Store、一個配給直接發布。我在 5 月 27 日早上——也就是我開始寫這篇文章的同一天——把直接發布的管線接線完成。

我從這件事學到的事

一開始看起來像障礙的東西,最後變成一個把我推向更整齊產品的限制。我現在比三月時更了解自己的建置設定、更新流程、付款流程,因為 Apple 的「不行」逼著我把這些全部搞懂。Apple 的規範存在是有合理理由的,即使我會希望我這個 App 落在線的另一邊。

當一個平台對你說不行時,你通常擁有比那個當下感覺得到的還要更多的選項。選擇很少是「遵守或放棄」,多半是「在這裡遵守,然後在別的地方做更完整的事」。發布兩個版本、讓每個版本都盡可能服侍好它所在的那個通路,這不是一場失敗,只是下一塊工作。

WhisperPad 現在已經在 Mac App Store 上,提供每月 120 分鐘的免費額度,讓你可以在付費前先看看它合不合你的工作方式。直接發布的版本——有完整自動貼上功能——可以在 mitmllc.com/whisperpad 取得。如果你想跟我聊聊,我是 Rene Zelaya,可以寫信到 contact@mitmllc.com

Reddit 熱門留言 (5)

#1 marvin-hansen ▲ 15
I actually had the almost same situation by building an offline voice dictation app for macOS and iOS, and in macOS I was confronted with the exact same situation. However, I would like to point out that Apple isn't totally wrong here because the accessibility API unfortunately is way too broadly scoped, and because of that you literally get access to everything on the computer like you can screenshot listen and move the cursor... This is completely ridiculous and the proper engineering solution would actually be to phase out the accessibility API and replace it with something that is narrowly scoped so you can grant specific permissions individually. However, Apple, being Apple, is obviously not doing anything, and instead says no accessibility permission for anything that isn't demonstrable accessible. Now, there are obviously some exceptions because Apple is not particularly well known for applying its rule consistently and granting big exceptions for itself. However, they do have a valid point on privacy and data protection. And I say that as somebody who ended up distributing my MacOS app outside the App Store because I only got approval for iOS. That said, I would definitely appreciate if Apple would gradually improve its developer program experience, because compared to its hardware lineup, the developer program is nothing short of abysmal.
#2 claviska 0
They rejected mine too for the exact same reason, despite press-to-talk being a legitimate accessibility issue. I wrote about this [in a blog post], and even called out some of the most common disabilities that clearly benefit from it. They also don't allow microphone access from keyboard extensions in iOS, which makes things even more difficult for a lot of people. The only path forward is either to go direct, or to use web APIs (PWA, etc.) but those have their own challenges.
#3 robgough 0
I recently built a similar app, and so hit the same limitations — I wasn't too upset on Mac, happy to distribute without the App Store (though it's a shame). Where I was more frustrated was how much this limited the potential usability of the iPhone app. Because of app store restrictions it is a far worse experience on iOS than on macOS.
#4 PaulHoule 0
Is it really true you get more distribution from the MacOS App Store? I would never use that App Store to install something unless I had absolutely no other choice — and that would mean I would take somebody else's app which was a little less polished or functional. We've had an App Store in Windows for decades now and I think the market for it is limited.
#5 BoggleOhYeah 0
Eh. I think it's fair if Apple doesn't want to publish something on their app store. I just wish they weren't so obstinate about people installing from other sources without signing/notarization. I understand it from a security standpoint but it's also nakedly self-serving. I'm glad that they're finally letting people install from other sources in the EU at least.