Applescript &引用;一些脚本;Mavericks上不允许出现辅助访问错误

Applescript &引用;一些脚本;Mavericks上不允许出现辅助访问错误,applescript,Applescript,我有一个脚本,用于在多监视器设置上布局窗口。 升级到Mavericks后,我遇到一个错误: Organize Windows is not allowed assistive access. 在检查Apple支持后,我发现: 我按照上面描述的步骤,在applet上签名,但没有多大成功。错误仍然存在 首先,只有当脚本作为应用程序导出并放置在/Applications中时,才会出现第二个提示,例如,如果我将其放置在文档中(也像应用程序一样捆绑),它不会弹出 当所有小程序出现时,它们在系统首选项中显

我有一个脚本,用于在多监视器设置上布局窗口。 升级到Mavericks后,我遇到一个错误:

Organize Windows is not allowed assistive access.
在检查Apple支持后,我发现: 我按照上面描述的步骤,在applet上签名,但没有多大成功。错误仍然存在

首先,只有当脚本作为应用程序导出并放置在/Applications中时,才会出现第二个提示,例如,如果我将其放置在文档中(也像应用程序一样捆绑),它不会弹出

当所有小程序出现时,它们在系统首选项中显示为“applet”(这很奇怪,因为它们有一个标识符)

有人成功运行过这种脚本吗?有没有办法全局禁用安全检查?(我想不会,但值得一问)

下面是脚本,它只启动几个应用程序并将它们放在屏幕上:

#Query desktop area
tell application "Finder"
    set displayAreaDimensions to bounds of window of desktop
    set widthOfDisplayArea to item 3 of displayAreaDimensions
    set heightOfDisplayArea to item 4 of displayAreaDimensions
end tell

tell application "System Events" to tell process "Dock"
    set dockPosition to position in list 1
    set dockDimensions to size in list 1
    set heightOfDock to item 2 of dockDimensions
    set positionOfDock to item 2 of dockPosition
end tell

# Space between windows
set padding to 7

# This assumes that the Apple Cinema Display 27" is to the right
# of the Macbook Pro
set idea_w to 1600
set idea_h to 1440
set idea_base_x to 1680

set iterm_w to 2560 - idea_w - padding
set iterm_h to 1000
set iterm_base_x to idea_base_x + idea_w + padding

#If we're in a single monitor configuration
if widthOfDisplayArea is 1680 and heightOfDisplayArea is 1050 then
    # Override sizes
    set idea_base_x to 0
    set iterm_base_x to 0
    set idea_w to widthOfDisplayArea
    set idea_h to (heightOfDisplayArea - heightOfDock)
    set iterm_w to 1024
    set iterm_h to (heightOfDisplayArea - heightOfDock)
end if

checkRunning("IntelliJ IDEA 11", 10)
checkRunning("iTerm", 0)

placeWindow("IntelliJ IDEA", idea_base_x, 0, idea_w, idea_h)
placeWindow("iTerm", iterm_base_x, 0, iterm_w, iterm_h)

#Helper to launch as necessary
on checkRunning(theName, theDelay)
    if application theName is not running then
        tell application theName to activate
        delay theDelay
    end if
end checkRunning

on placeWindow(theProcess, x, y, w, h)
    tell application "System Events" to tell process theProcess
        set allWindows to (every window)
        repeat with aWindow in allWindows
            set position of aWindow to {x, y}
            set size of aWindow to {w, h}
        end repeat
    end tell
end placeWindow

我写了一个脚本应用程序来处理一个小的音频故障,我遇到了完全相同的问题。我将它设置为启动时启动,允许它进入辅助访问,并按照您在Apple Support上找到的方式进行签名,但每次启动时它都会给我这个错误


对我来说,最终解决的办法是将脚本代码复制并粘贴到一个新的脚本文件中,再次将其保存为一个应用程序,但使用不同的名称,并对其进行签名,所有这些都是在我运行它之前完成的。当我最终运行它时,它问我是否允许它进入辅助访问,我确实这样做了,然后我像以前一样将它设置为启动。我刚刚重新启动,它运行起来没有任何问题。

红色五号的回答很好,但还有几件事需要注意

无论何时编辑脚本以编辑辅助访问功能的使用,签名和重新允许辅助访问仅适用于脚本中已存在的辅助访问功能的使用。新使用的辅助访问功能将产生“XYZ不允许辅助访问”错误。此时,将脚本内容复制到具有不同名称的新脚本似乎是使整个脚本能够使用辅助访问功能的唯一方法。其他不涉及辅助访问功能的编辑将需要重新允许辅助访问,并且您无需复制脚本。这使得调试辅助访问功能相当麻烦

同样值得注意的是,如果您将代码包装在一个try块中,您将不会看到“XYZ不允许辅助访问”错误,因此为了进行调试,您应该注释掉try/end try行


可能有一种方法可以避免这种需要,例如删除并重新应用代码的签名,但我没有费心去弄清楚。

尝试运行
sudo sqlite3/Library/Application\Support/com.apple.TCC/TCC.db“SELECT*FROM access”
来查找为不工作的脚本添加的辅助访问条目。您应该会看到类似于
kTCCServiceAccessibility | com.apple.ScriptEditor.id.| 1 | 1 | |
的行,一旦找到它,您就可以使用
sudo sqlite3/Library/Application\Support/com.apple.TCC/TCC.db“从客户端='com.apple.ScriptEditor.id.'的访问中删除”
。签署应用程序,运行它,希望它在不重命名的情况下工作。