# 小技巧:怎樣給 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.
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.