macOS Mojave,Automator:“不被授权向系统事件发送Apple事件。”

58

我升级到了Mojave后,无法再使用之前一直在使用的自动化服务,并显示如下警告。 enter image description here

  • 在“安全与隐私”中,我已经勾选了AppleScript Editor。

你是否看出我的代码存在问题,还是新版本macOS的问题?

脚本

on run {input, parameters}
set pathList to {}
repeat with itemNum from 1 to count of input
    tell application "System Events"
        copy POSIX path of (container of (item itemNum of input)) to end of pathList
    end tell
end repeat
return pathList
end run

在此输入图片描述

在此输入图片描述

14个回答

47

这绝对是Mojave新安全框架的一部分,在 终端 中尝试

osascript -e 'tell application "Finder"' -e 'set _b to bounds of window of desktop' -e 'end tell'

您有可能会收到:

36:42: execution error: Not authorized to send Apple events to Finder. (-1743)
在第一次执行时,Finder会打开一个对话框通知您terminal正在请求发送事件到Finder的权限。如果您同意,terminal将会被添加到“系统偏好设置 > 安全性与隐私 > 自动化”页面中:

enter image description here
目前我看到的有两个问题:

  • 脚本行为请求权限的实现似乎有漏洞; 我运行了其他请求向Safari和Finder发送事件的脚本,Finder没有提示授权,只是返回了一个错误。
  • 简化自动化需要某种机制来先授予权限; 例如,使用Ansible和AppleScript时无法预加载授权。

其他人已经写了更详细的信息:


希望在Mojave发布之前解决这个问题,因为它会严重影响macOS的自动化能力。

谢谢,乔。我现在更清楚地看到了我遇到的问题。 - Travelholics
基本测试让我相信,在10.14 Beta 8 (18A371a)中,被提示允许AppleScript事件的预期功能正在工作。但这仍然没有回答关于是否可以为自动化目的预授权AppleScript应用程序的问题。 - Joe
1
当通过launchd运行调用subprocess.run(['/usr/bin/osascript', my_script_path])的Python脚本时,对我不起作用。 我没有得到提示... - Louis M
1
这帮助我解决了应用中心 app.rpl() 不工作的问题,我按照这些步骤并在 Visual Studio 的终端上检查。 - Pxaml
@pxaml 我也能够重现你描述的App Center app.Repl()的行为。 - user62171
感谢您提供这么详细的解释!您回答中的第一个命令成功地提示我通过iTerm2授予Finder权限。然而,当尝试使用另一个应用程序时,提示框没有出现。因此,该应用程序未出现在“安全性与隐私”→“隐私”→“自动化”→“iTerm”下。手动将某些应用程序加入白名单不可能,尤其是当拒绝显示授予权限的提示框时,这让人非常恼火。 - leifericf

30

我遇到了打开gitk时出现的同样的错误。

启动脚本中的错误:执行错误:未被授权将Apple事件发送到System Events。 (-1743)


解决方法

前往设置 -> 安全性与隐私 -> 隐私 -> 自动化 -> 隐私选项卡并勾选System Events复选框。

进入图像描述


没有任何设置更改对我起作用。编辑gitk文件并删除有问题的if块是我的解决方案 - 错误输出显示(file "/usr/local/bin/gitk" line 12261),所以我只需编辑该文件即可。现在启动gitk时不再将其置于前台,但除此之外它工作正常。 - billrichards
我试图从Expo CLI启动iOS模拟器,但它失败并显示了错误消息。这个方法解决了问题! - Brad Parks
1
我在升级到Big Sur(11.0)后遇到了这个问题。这些脚本在Catalina(10.15)上是正常的,但在新的操作系统上突然停止工作。我在想旧问题(来自Mojave,10.14)是否可能会随着新操作系统的推出而重新引入。@Abdullah 在这种情况下修复已经奏效。谢谢Abdullah。 - AFK
有人知道如何“强制”一个应用程序出现在这个GUI下面的iTerm 2吗?只有Finder显示,当我尝试在iTerm 2中使用osascript针对其他应用程序(而不是Finder)时,我会收到错误提示说权限未经授权。问题在于该应用程序不显示在此GUI中,并且授权弹出窗口也不显示,因此似乎无法授予所需的授权。我正在运行macOS Monterey 12.1。 - leifericf

18

我运行苹果脚本 .app 应用程序时遇到了类似的错误。我收到了以下错误信息:

Not authorized to send Apple events to Finder. (-1743)
一个解决方法是从.scpt或.applescript源代码导出(文件>导出)或保存(文件>另存为,按住Option键显示另存为),生成一个新的.app应用程序,这在我的情况下成功运行。初始启动需要批准(以及一些后续启动),并且该应用程序将作为“设置->安全性与隐私->隐私->自动化”下的一个条目添加。

1
接受的解决方案对我没有用,但这个变通方法有效。感谢您发布这个! - Tom Loredo
这个解决方法对我很有效,用于在Mojave上运行的旧应用程序,需要使用AppleScript启动。 - cloudxix

16

我已经使用以下步骤解决了相同的问题。 打开属性列表并添加以下键。

<key>NSAppleEventsUsageDescription</key>
<string>Please give access to Export details to Outlook</string>

当您的应用程序第一次执行脚本时,将会弹出一个确认弹窗以允许或拒绝。如果您点击“允许”,它将会执行该脚本。


此解决方案将无法帮助 Automator(因为它应该已经拥有此密钥)- 但是,如果您自己的应用程序需要苹果事件访问,则需要使用此新密钥(自10.14起)https://developer.apple.com/documentation/bundleresources/information_property_list/nsappleeventsusagedescription - bmiller
1
运行得非常顺利。 - Jason Elwood
为我解决了一个相关的问题,正试图为我的应用程序进行设置。请注意,在Ventura 13.4.1中,我不得不在辅助功能下启用它,而不是像Abdullah的答案中所示的自动化选项。 - Chris McElroy
为我解决了一个相关的问题,我正在尝试为自己的应用程序设置这个。请注意,我不得不在辅助功能下启用它,而不是像Abdullah的答案中所示的自动化(在Ventura 13.4.1中)。 - undefined

11

我通过终端执行以下命令进行重置,解决了这个问题:

tccutil reset AppleEvents; tccutil reset SystemPolicyAllFiles


注:该命令为IT技术相关内容,并涉及终端操作。

谢谢!这是唯一解决我的问题的方法。我已经在安全/隐私偏好设置中授予权限,但仍然出现错误。这在iTerm中有效,而不仅仅是在终端中。 - Mike Funk
3
tccutil: Failed to reset AppleEvents - Sridhar Sarnobat
对我来说没用 - Sridhar Sarnobat
对我来说没用 - undefined

9

以下是我解决问题的方法。我进入了“系统偏好设置”>“安全性与隐私”>“辅助功能”(左侧选项)>(输入系统密码)>点击Automator(或您想启用的应用程序),就完成了。


2
这个方法是可行的,但有一点不同:系统偏好设置 > 安全性与隐私 > 自动化 > 在您想要启用的应用程序下勾选“系统事件” > 输入系统密码。 - Ali Nem
1
我支持@AliNem的评论。我有一个Automator工作流程,它指示System Events在Finder中进行按键操作。在“系统偏好设置”>“安全性与隐私”>“辅助功能”中,我必须先启用Accessibility中的Automator,然后在Automation中的Finder下勾选“System Events”,最后返回并在Accessibility中启用Finder。我每次尝试在每个步骤之间运行工作流程时都会收到新的错误,直到我完成了所有3个权限更改。 - zozo

5
更新:升级到最新的公共测试版(截至2018年8月4日)后,该问题对我来说得到了解决。在此之前,Mojave所有公共测试版都存在此问题。
原始回复:

我想告诉你,我和另一个朋友都遇到了完全相同的问题,使用不同于您的Applescript的Automator工作流程。我们发现这个问题无论是手动激活(Finder -> Services -> 点击项目)还是通过键盘快捷键激活时,都会出现。

更奇怪的是,当在Automator内测试时,工作流表现得非常好。

我已经通过反馈助手提交了一个错误报告,并建议任何看到这个问题的人也这样做!毕竟,“油腻的轮子总是转得更快”...

Automator - 权限错误。“Run AppleScript”操作遇到错误:“未被授权向System Events发送Apple事件。”

Automator工作流在Automator内进行良好表现


嗯...我明白你可能遇到了和我一样的问题,因为我所有通过自动化程序创建的服务都无法使用警告框。我想我应该等待并观察。 - Travelholics
对这个问题点个赞。我可以在脚本编辑器中正常运行脚本,但一旦将其变成快速操作或应用程序并尝试启动它,就会失败。 - Kush
1
Beta 4可以通过复制粘贴到一个新脚本并重新保存来“修复”。 Beta 5不再适用,错误回来了。 - Tetsujin

3

我在Catalina上的Terminal.app中使用简单的测试脚本osascript -e 'tell application "Finder" to display notification "some stuff"'时遇到了这个错误。

我没有得到弹出窗口,并且在设置->安全性和隐私->隐私->自动化->隐私中也没有找到任何有用的选项(无论是自动化还是完全磁盘访问)。我也没有通过tccutil reset AppleEvents; tccutil reset SystemPolicyAllFiles解决问题(除了不幸地失去了所有相关的首选项)。

对我而言,问题在于我是在tmux中运行命令。一旦从tmux中分离出来,在终端中运行相同的命令,会提示我进行相关权限对话框。允许后重新附加到我的tmux会话,我仍然无法在tmux中运行该命令(但可以在终端外部运行)。此时,我杀掉了我的tmux会话,启动了一个新的会话,之后就能够在终端中的tmux中运行此命令。


2
在我的情况下,我必须执行以下步骤:

设置与隐私 > 隐私 > 完全磁盘访问权限(在左侧面板中)并添加Automator

我之前也尝试过将Automator添加到辅助功能中,正如其他答案所建议的那样(这最初对我没有起作用),因此也许我们需要在两个地方都添加Automator。

screenshot showing the new Full Disk Access option


2
如果在尝试运行您的苹果脚本时没有出现这样的情况,而且您的隐私设置中的自动化部分也没有看到iTerm,那么最简单的方法可能会有所帮助:只需重新启动您的Mac ;) 免责声明:我遇到这种情况的另一个原因可能是用户切换。

enter image description here


万岁!谢谢。 - CharlesW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接