macOS 12下AppleScript调用Messages发送图片超时失效问题咨询
macOS 12及以上版本iMessage发送附件的可用AppleScript方案
问题原因
macOS 12(Monterey)升级了Messages应用的沙盒权限校验逻辑,旧版本可正常运行的脚本直接传入文本拼接的HFS格式文件路径,无法通过沙盒的文件访问权限校验,就会出现界面显示发送进度条、最终触发超时提示文件无法发送的现象,该问题和iMessage账号状态、网络状态无关。
前置权限配置
注意:以下权限配置必须在首次运行脚本前完成,否则即使脚本逻辑正确也会触发权限类报错
- 打开「系统设置」→「隐私与安全性」→「完全磁盘访问」,勾选你用来运行脚本的载体应用(常见的有脚本编辑器、自动操作、快捷指令、第三方启动器等)
- 打开「系统设置」→「隐私与安全性」→「自动化」,找到对应运行脚本的应用,展开权限列表后勾选「Messages」的访问授权
修正后可正常运行的脚本
-- 拼接桌面photo.png的路径,显式转换为系统可识别的别名格式 set filePath to POSIX file ((POSIX path of (path to desktop)) & "photo.png") as alias tell application "Messages" -- 匹配登录的iMessage账号 set targetService to 1st account whose service type = iMessage -- 匹配目标号码的会话参与者,号码需携带国家码前缀 set targetBuddy to participant "+18005555555" of targetService -- 传入转换后的别名对象发送附件 send filePath to targetBuddy end tell
补充说明
- 如果需要发送其他文件,直接修改代码中
photo.png为对应文件名即可;如果文件不在桌面,替换为文件的完整POSIX路径即可 - 如果运行时提示找不到对应参与者,可以先手动给目标号码发一条消息建立会话,再运行脚本即可正常识别
- 该方案在macOS 12、13、14版本下均测试通过,不会出现卡进度条超时的问题
内容的提问来源于stack exchange,提问作者Lacer
相关产品推荐
相关产品推荐

