AppleScript导出app运行时辅助访问权限失效且勾选自动取消
AppleScript导出独立App后辅助功能权限自动失效问题说明
根本原因
- 未经过开发者签名的自制App会触发macOS Gatekeeper安全校验:系统会为每个有权限的App绑定唯一的签名标识,未签名的App每次运行时系统都会判定为新的未知程序,之前授予的辅助功能权限会被自动清除。
- 若你多次修改脚本后重新导出覆盖原有App,App的内容哈希发生变化,也会导致系统识别身份失败,自动撤销已授予的权限。
- 你当前脚本中使用
System Events模拟点击Safari菜单的操作属于GUI控制类操作,强制要求程序具备辅助功能权限,只要权限校验不通过就会抛出-1719错误。
可行解决方案
方案一:为导出的App签名,固定身份标识
打开终端执行以下命令,为你的App进行本地自签名,签名后系统就能识别为同一程序,权限不会自动丢失:codesign --force --deep --sign - /Applications/你的App名称.app
执行完成后重新在系统设置的辅助功能列表里勾选你的App,后续运行就不会再重置权限了。
方案二:修改脚本逻辑,完全规避权限要求
模拟点击的方式对权限要求高,你可以直接通过Safari的原生API设置User Agent,不需要调用System Events,也就不需要辅助功能权限,修改后的参考代码如下:
tell application "Safari" activate -- 定义Chrome的User Agent字符串,可根据需要修改版本号 set chromeUA to "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" tell front window set current tab to (make new tab with properties {URL:"https://geoguessr.com"}) -- 为当前标签页设置自定义UA,也可以根据需要修改为全局生效 do JavaScript "Object.defineProperty(navigator, 'userAgent', {value: '" & chromeUA & "', writable: false});" in current tab end tell end tell
这个版本的脚本导出后不需要任何特殊权限就可以正常运行。
方案三:改用脚本/快捷指令运行
不要将脚本导出为独立App,直接保存为.scpt格式的脚本文件,给「脚本编辑器」授予辅助功能权限,后续直接运行脚本文件即可,权限不会丢失。也可以将脚本导入「快捷指令」运行,只需要给「快捷指令」授权一次即可。
内容的提问来源于stack exchange,提问作者IceGod
相关产品推荐
相关产品推荐

