AppKit 应用该如何监测系统 GateKeeper 需要向用户请求某本地 URL 的访问权限?

257 天前
 ShikiSuen

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. 不太想用任何「会把 Xcode 专案搞得必须只能用签名者的 Developer Program ID 才能编译」的方法。
  2. 输入法有做沙盒处理。这恐怕是业界迄今为止唯一一款做了沙盒的 macOS 中文输入法。
767 次点击
所在节点    iDev
3 条回复
ShikiSuen
257 天前
这个问题我暂时计划这样处理:在程序刚启动的时候,就检查是否可能会需要存取 iCloud Drive 、且提前解决存取权限问题。在使用者批准存取权限之前,拒绝执行 AppDelegate 。
ShikiSuen
257 天前
或者,在使用者批准存取权限之前,让 IMKInputController 的建构子检查这个工作,只要权限不够就返回 nil 。
ShikiSuen
257 天前
这招还真有用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/968958

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX