macOS 已經更新到 26 了, 但對於第三方輸入法的支持一直沒有任何變化,最新的 Xcode 26 破壞了之前我一直用的方法——直接把編譯路徑改到 /圖書館/輸入 方法 現在這麼做 xcode 會報錯,因為項目依賴的 framework 不會再寫到這個目錄了。
只有去掉所有更改編譯目錄的設置後編譯就可以成功。我猜測大概是因為新版的 SPM 不再遵循 Xcode 項目輸出目錄設置了……總之,已經用了好幾年的辦法不行了,得換新的。
新的 debug 方案
很多人說macOS 第三方輸入法是不能直接 attach 的,這樣會導致系統卡死。其實不會,自從上次蘋果更新了 macOS 第三方輸入法架構後就沒問題了。只是不要在 attach 的情況下切換到 Xcode 就行。所以恢復到傳統的編譯→複製app到 /圖書館/輸入 方法 →註銷系統→在系統終端裡查看 print 這種流程是萬萬無法接受的。
根據 Gemini 3 的建議,首先我一直用的辦法確實是不行了,回復到默認編譯路徑後,可以用 post script 殺掉當前進程並將編譯的 app 移動到輸入法目錄,這就解決了app位置問題。
值得注意的是,不能使用 Xcode 的 run script, 因為那是編譯的一部分,不論如何設置順序,Xcode 都會在鏈接和簽名之前執行,這樣你拷貝過去的 app 就是未完成的狀態, 就不能運行的。
解決辦法是編輯項目的 scheme, 添加腳本到 build 的 post-actions 裡:

注意要把 “Provide build settings from” 這個選成你的 target, 如果是默認的 none,則不會帶有項目的環境參數。這樣腳本就沒辦法找到 app 的路徑了:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# Type a script or drag a script file from your workspace to insert its path. # Configuration DESTINATION="/Library/Input Methods" APP_NAME="${FULL_PRODUCT_NAME}" SOURCE_APP="${BUILT_PRODUCTS_DIR}/${APP_NAME}" DEST_APP="${DESTINATION}/${APP_NAME}" PROCESS_NAME="${EXECUTABLE_NAME}" # 1. Kill the running process to release the file lock # (Ignores errors if process isn't running) pkill -f "$PROCESS_NAME" || true # 2. Ensure destination exists if [ ! -d "$DESTINATION" ]; then mkdir -p "$DESTINATION" fi # 3. Use rsync instead of cp # -a: Archive mode (preserves symlinks, permissions, times) # --delete: remove old files in destination that aren't in source rsync -a --delete "$SOURCE_APP/" "$DEST_APP/" # 4. Critical: Remove "Quarantine" attributes # macOS often marks copied apps as "damaged" or "unsafe" xattr -cr "$DEST_APP" # 5. Tell the system the app has been updated touch "$DEST_APP" |
接下來, 就是搞定 debug attach 的問題了。

同樣繼續修改 scheme,這次是 run 頁面,在可執行文件這裡,要選 other,然後手動定位到 /圖書館/輸入 方法 目錄下的 app 上,這樣在編譯後 xcode 就會自動從那裡啟動進程,代替系統啟動,所有 print 等debug 信息就還能正常顯示在終端。
我曾嘗試關閉 Xcode 自動執行,讓它等待我手動啟動。但這樣的結果就是系統啟動了輸入法,由於啟動身份不同,在 xcode 上 debug 出來的信息全都被 <私人的> 遮蓋了。
本文由 落格博客 原創撰寫:落格博客 » macOS 第三方輸入法debug 方法
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/4196.html