AppKit 应用该如何监测系统 GateKeeper 需要向用户请求某本地 URL 的访问权限?
我是威注音输入法的作者。威注音输入法到 3.5.3 版为止允许用户直接指定 iCloud Drive 目录下的某个目录、作为输入法自订辞典(几个 txt 文件)的目录。
但,如果这个用户就这样将系统升级到 macOS 14 的话,输入法会被系统提示「是否允许该输入法 app 访问您的 iCloud Drive 资料夹」。问题是这个「由输入法触发的」系统提示是在 main thread 上的,直接会让整个桌面失去响应(鼠标指针能移动,但整个桌面冻结+风火轮至少得有三四十秒,性急的用户肯定会强行断电重新开机)。
所以我想知道该怎样检测 app 是否需要向用户请求这种权限。如果是的话,我会让这个输入法直接用 Finder 打开 iCloud 的辞典目录、且紧接着强制将输入法辞典目录改为自身的沙盒内的目录,以规避这个用户体验危机。这样一来,在 macOS 14 系统下,当用户自己亲自再将辞典目录改到 iCloud Drive 目录下之后,就会被系统记住是用户的主动行为设定,理论上就不会触发该警告。
P.S.:
1
ShikiSuen OP 这个问题我暂时计划这样处理:在程序刚启动的时候,就检查是否可能会需要存取 iCloud Drive 、且提前解决存取权限问题。在使用者批准存取权限之前,拒绝执行 AppDelegate 。
|
2
ShikiSuen OP 或者,在使用者批准存取权限之前,让 IMKInputController 的建构子检查这个工作,只要权限不够就返回 nil 。
|
3
ShikiSuen OP 这招还真有用。
|