Apple từ chối ứng dụng WhisperPad vì sử dụng Accessibility API: Hành trình của một lập trình viên độc lập

Công nghệ02 tháng 6, 2026·9 phút đọc

Tác giả tạo ra WhisperPad để giải quyết vấn đề chấn thương cổ tay khi gõ phím, nhưng Apple đã từ chối phê duyệt bản cập nhật vì cho rằng việc sử dụng Accessibility API để chèn văn bản vào ứng dụng khác là không phù hợp. Trước sự từ chối này, nhà phát triển đã chọn giải pháp chia ứng dụng thành hai phiên bản: một bản tuân thủ quy định trên App Store và một bản đầy đủ tính năng phát hành trực tiếp.

Apple từ chối ứng dụng WhisperPad vì sử dụng Accessibility API: Hành trình của một lập trình viên độc lập

Tôi đã xây dựng WhisperPad vì tôi thực sự cần nó. Vào mùa thu năm 2024, các khớp ngón tay của tôi bắt đầu đau mỗi khi gõ phím. Có lẽ đó là cái giá phải trả cho việc dành phần lớn cuộc đời ngồi trước bàn phím: tuổi thơ chơi game điện tử, sau đó là 10 năm làm việc trong ngành công nghệ. Cơn đau tồi tệ hơn trong suốt mùa đông, và đến đầu năm 2025, tôi không thể gõ phím liên tục mà không phải chịu mức đau không thể chịu đựng được. Đó là một chấn thương tiến triển chậm, không có khoảnh khắc nào gây sốc, chỉ là sự thu hẹp dần dần khả năng làm việc của tôi mỗi ngày.

Sự hạn chế này đến vào một thời điểm rất không thuận lợi. Tôi đang ở giữa hai công việc và cố gắng quyết định hướng đi tiếp theo, và tôi đã định nộp đơn vào chương trình thạc sĩ về tương tác người - máy (HCI). Nỗi sợ lớn nhất của tôi không phải là liệu tôi có theo kịp về mặt trí tuệ hay không, mà là đôi tay có cho phép tôi hoàn thành công việc kịp thời hay không.

WhisperPad hoạt động như thế nào?

WhisperPad nằm trên thanh menu của bạn. Bạn nhấn một phím tắt, nói, ứng dụng sẽ phiên âm những gì bạn nói ngay trên máy Mac và đặt văn bản vào bất kỳ trường nào con trỏ của bạn đang ở. Không có dữ liệu nào được gửi lên máy chủ. Nếu bạn đã nhấp đi nơi khác vào thời điểm nó hoàn thành, văn bản sẽ nằm trên bộ nhớ tạm (clipboard) và bạn có thể dán nó vào bất cứ đâu bạn muốn. Đó là toàn bộ ứng dụng. Mục đích là để đưa lời nói từ đầu ra máy tính với ít thao tác tay nhất có thể.

Chỉ báo cửa sổ khi đang chép âmChỉ báo cửa sổ khi đang chép âm

Vào tháng 4, Apple đã từ chối bản cập nhật cho ứng dụng chép âm trên Mac của tôi, WhisperPad, theo Nguyên tắc 2.4.5. Họ cho rằng tôi đang sử dụng API Khả năng truy cập (Accessibility API) theo cách không phải là mục đích khả năng truy cập. Ứng dụng này tồn tại vì tôi bị chấn thương ở tay. Apple đã phê duyệt các phiên bản trước làm điều tương tự. Nhưng lần này thì không.

Tôi đã từng dùng tính năng chép âm có sẵn của Apple trước đó, và trải nghiệm rất thất vọng. Bản phiên âm gần đúng nhưng hiếm khi chính xác, và mỗi lần sửa lỗi nghĩa là phải quay lại bàn phím, xóa, gõ lại. Tôi đang làm đau tay của mình để sửa chữa công cụ lẽ ra phải cứu chúng. Đó là vấn đề cụ thể tôi muốn giải quyết: không phải là "phiên âm giọng nói của tôi", mà là "phiên âm giọng nói của tôi đủ tốt để tôi không phải liên tục gõ phím sửa lỗi".

Lần từ chối từ Apple

Phiên bản 1.0 ra mắt vào mùa đông và có thể tải miễn phí từ App Store. Tiếp theo, tôi thêm các tính năng mà người dùng sớm yêu cầu, và tôi quyết định biến nó thành một ứng dụng trả phí. Bản cập nhật đó là phiên bản 1.5.

Apple đã từ chối nó theo Nguyên tắc 2.4.5. Lần từ chối này cụ thể là về quyền truy cập khả năng truy cập. WhisperPad sử dụng nó để chèn văn bản đã phiên âm vào các ứng dụng khác, và quan điểm của Apple là đây không phải là cách sử dụng được chấp thuận của API đó. Các phiên bản trước đã được phê duyệt đã làm điều y hệt với các quyền y hệt, nên điều này rất khó chấp nhận.

Giải thích về sự từ chối cũng có một số phản hồi hợp lý. Tôi đã sửa những vấn đề đó, nhưng vấn đề 2.4.5 mới là bức tường thực sự. Vì vậy, tôi đã kháng cáo, giải thích rằng WhisperPad hoạt động như một công cụ hỗ trợ người khuyết tật, rằng tôi bị chấn thương do lặp lại (RSI), và lý do duy nhất ứng dụng chèn văn bản theo cách đó là để giảm bớt gánh nặng cho đôi tay của những người giống như tôi, những người không thể gõ thêm phím. Tôi yêu cầu Apple xem xét vấn đề dưới góc độ đó.

Họ phản hồi rằng họ sẽ xem xét kỹ hơn. Họ bảo tôi không nên trả lời trong chuỗi đó và nói họ sẽ quay lại với quyết định. Đó là ngày 21 tháng 4.

Sau đó mọi thứ im lặng. Đến ngày 21 tháng 5, tôi vẫn chưa nhận được tin tức gì, nên tôi đã gửi một ghi chú ngắn gọn, lịch sự hỏi về tình trạng. Tôi đã làm việc trong bộ phận hỗ trợ khách hàng. Tôi biết các vé hỗ trợ đôi khi bị bỏ sót, và tôi muốn nhắc nó trở lại danh sách việc cần làm.

Họ phản hồi rất nhanh, và câu trả lời là một sự từ chối nữa.

Quyết định chia tách ứng dụng

Lần từ chối thứ hai đã buộc tôi phải đưa ra một quyết định thực sự, và tôi muốn giải thích rõ, vì sẽ rất dễ để đưa ra một quyết định tồi tệ hơn.

Tôi đã dành một chút thời gian để cân nhắc hai lựa chọn: tuân thủ các hạn chế của Apple và phát hành một phiên bản phù hợp với quy tắc của họ trên App Store (hy sinh tính năng dán trực tiếp), hoặc phát hành WhisperPad thông qua phân phối trực tiếp. Tôi quyết định rằng tôi không thể hy sinh khả năng tiếp cận của App Store. Vì vậy, tôi sẽ xây dựng một phiên bản tuân thủ quy tắc của họ và đưa nó lên đó, đồng thời tiến hành phân phối trực tiếp để cung cấp phiên bản đầy đủ mà tôi originally định xây dựng.

Điểm mấu chốt ở đây là ràng buộc. Theo như tôi biết, nguyên tắc của Apple nhằm mục đích quản lý các ứng dụng tự chèn văn bản vào chính chúng cho mục đích hỗ trợ người khuyết tật, thay vì vào các ứng dụng khác. Đó là giả định của tôi, vì tôi chưa bao giờ nhận được một lời giải thích hoàn toàn rõ ràng. (Dù sao, nếu bạn hiểu nguyên tắc này tốt hơn và có thể sửa chữa cho tôi, hãy liên hệ — tôi muốn nghe). Dù bằng cách nào, một ứng dụng can thiệp vào mọi ứng dụng khác trên hệ thống của bạn là điều cần phải cẩn trọng, và tôi có thể thấy WhisperPad nằm ở một vị trí khó xử liên quan đến ranh giới đó.

Vì vậy, tôi đã chia WhisperPad thành hai phiên bản.

Phiên bản trên Mac App Store không tự động dán. Nó đặt văn bản đã phiên âm của bạn vào bộ nhớ tạm, và bạn nhấn Command-V để đặt nó vào. Điều này làm luồng chính từ khoảng bốn bước tăng lên sáu bước. Nghe có vẻ không nhiều, và với hầu hết mọi người thì thực sự là không. Mục tiêu thiết kế toàn bộ của ứng dụng là loại bỏ các chuyển động của tay cho những người cần tiết kiệm chúng, vì vậy việc tăng 50% số bước là đáng kể. Đó là một phiên bản thỏa hiệp của ý tưởng. Nhưng nó là một ứng dụng thực sự, hữu ích, và nó nằm trên cửa hàng nơi những người có hoặc không có nhu cầu hỗ trợ có thể tình cờ tìm thấy nó. App Store làm cho nó dễ được khám phá.

Tầm nhìn ban đầu, phiên bản dán trực tiếp vào nơi con trỏ của bạn, tôi đã tự phát hành — bên ngoài App Store.

Thách thức khi phát hành trực tiếp

Phát hành phần mềm bên ngoài App Store có nghĩa là xây dựng lại những thứ mà cửa hàng thường làm cho bạn. Cũng có một rào cản tin tưởng mới. Bạn đang yêu cầu mọi người tin tưởng bạn để xử lý thẻ tín dụng của họ trên trang web của chính bạn.

Đối với thanh toán, tôi đã chọn Paddle, sau một số nghiên cứu về các tùy chọn. Để cập nhật, tôi đang sử dụng Sparkle, khung công tác lâu đời để giữ cho các ứng dụng Mac được cập nhật bên ngoài cửa hàng. Cấp phép được xử lý với các khóa cấp phép được kiểm tra đối với một máy chủ nhỏ. Không có gì trong số này là lạ mũi, đó là con đường đã được mòn mỏi cho phần mềm Mac độc lập, nhưng tất cả đều mới đối với tôi, và làm đúng nó mất công việc thực sự. Về mặt thực tế, tôi đã phân nhánh ứng dụng thành các mục tiêu xây dựng riêng biệt: một cấu hình cho App Store, một cho phát hành trực tiếp. Tôi đã hoàn thành việc kết nối đường ống phát hành trực tiếp vào sáng ngày 27 tháng 5, ngay buổi sáng tôi bắt đầu viết bài này.

Bài học rút ra

Điều ban đầu trông giống như một trở ngại đã biến thành một ràng buộc thúc đẩy tôi xây dựng một sản phẩm được tổ chức tốt hơn. Bây giờ tôi hiểu cấu hình xây dựng của chính mình, đường dẫn cập nhật và quy trình thanh toán của mình tốt hơn nhiều so với tháng 3, vì cái "không" của Apple đã buộc tôi phải học tất cả những điều đó. Các nguyên tắc của Apple tồn tại vì những lý do có thể bảo vệ được, ngay cả khi tôi ước ứng dụng cụ thể của mình đã nằm ở phía bên kia của ranh giới.

Khi một nền tảng nói không với bạn, bạn thường có nhiều lựa chọn hơn là cảm nhận trong khoảnh khắc đó. Lựa chọn hiếm khi là "tuân thủ hoặc bỏ cuộc". Nó thường là "tuân thủ ở đây, và làm điều đầy đủ hơn ở nơi khác". Việc phát hành hai phiên bản, mỗi phiên bản phục vụ kênh của nó tốt nhất có thể, không phải là một thất bại. Nó chỉ là mảnh việc tiếp theo.

WhisperPad hiện có trên Mac App Store, với gói miễn phí 120 phút mỗi tháng để bạn có thể tìm hiểu xem nó có phù hợp với cách làm việc của bạn hay không trước khi trả tiền. Phiên bản trực tiếp, với tính năng tự động dán đầy đủ, có sẵn tại mitmllc.com/whisperpad. Nếu bạn muốn nói chuyện với tôi về điều này, tôi là Rene Zelaya, và bạn có thể liên hệ với tôi tại [email protected].

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗