# 小技巧:怎樣給 App 的功能做 fail-safe 機制 威注音輸入法自從 2.0.0 版開始支援 IMK 選字窗(截至 3.5.3 版為止)。為了讓 IMK 選字窗在 macOS 10.14 開始的系統內正常工作,威注音使用了 bridging-header 強制曝露了 InputMethodKit 內部的四個非公開 API。 雖然目前威注音輸入法的 IMK 選字窗功能可以在目前的 macOS 13 系統下正常使用,但今後的 macOS 就很難講了,因為 Apple 可能已經意識到 IMK 選字窗本身千瘡百孔的狀態。 但這樣一來,這些迄今為止尚未被 Apple 官方公開的 API 可能會有變動、導致這些 API 可能無法正常使用。屆時呢,如果威注音輸入法在升級系統之前有啟用 IMK 選字窗的話,則威注音在這樣的未來的新版系統內使用 IMK 選字窗時會崩潰。 本文就來討論:怎樣讓這個功能在首次崩潰之後、讓輸入法自動偵測到這種崩潰、且屆時自動停用這個功能。 > 威注音輸入法自 3.3.9 版開始引入該機制。 這個邏輯很簡單: 1. 先設定一個 `UserDefaults` 開關,用來記錄「是否有該錯誤發生」。這個 `Bool` 開關的預設值為 `false`。 2. 要執行任何用到特殊 API 的部分的時候,先在執行過程運作之前將這個開關打開,然後執行這個過程,之後再把這個開關關閉。 3. 在軟體的 AppDelelgate 的 [applicationDidFinishLaunching()](https://developer.apple.com/documentation/appkit/nsapplicationdelegate/1428385-applicationdidfinishlaunching) 環節檢查這個開關是否有開啟。如果有開啟的話,不但自動關掉這個開關,而且連帶關掉用到這個 API 的功能開關。此時,要不要再通知使用者,就由你自己決定。 以上。 $ EOF.