因為 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)