找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 179|回复: 0

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

[复制链接]

310

主题

0

回帖

956

积分

管理员

积分
956
发表于 2023-11-29 15:01:16 | 显示全部楼层 |阅读模式
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.:

不太想用任何「会把 Xcode 专案搞得必须只能用签名者的 Developer Program ID 才能编译」的方法。
输入法有做沙盒处理。这恐怕是业界迄今为止唯一一款做了沙盒的 macOS 中文输入法。


这个问题我暂时计划这样处理:在程序刚启动的时候,就检查是否可能会需要存取 iCloud Drive 、且提前解决存取权限问题。在使用者批准存取权限之前,拒绝执行 AppDelegate 。
或者,在使用者批准存取权限之前,让 IMKInputController 的建构子检查这个工作,只要权限不够就返回 nil 。
这招还真有用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|鲜于璜碑

GMT+8, 2024-9-8 12:00 , Processed in 0.085637 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表