AppleScript应用程序无法获得辅助功能

时间:2014-05-14 08:40:24

标签: macos permissions applescript

我在自己的AppleScript应用程序和安全性和安全性方面的辅助功能方面遇到了问题。隐私"

我已经写了一个名为" open cubase"我已授予访问权限。我使用了Apple关于如何防止重复重新授权的建议(http://support.apple.com/kb/HT5914)。但现在即使在“辅助功能”列表中列出并选择了应用程序,它也表示它没有辅助访问权限。

screenshot

当我使用

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/Tcc.db 'SELECT * FROM access WHERE client LIKE "%%"'

要检查发生了什么,我可以看到:

kTCCServiceAccessibility|com.atonus.open-cubase|0|1|0|??

为什么??结束了?有谁知道如何解决这个问题?

我使用的是OSX 10.9.2。

1 个答案:

答案 0 :(得分:2)

更新,基于OP的反馈:

  • OP的问题是使用property语句,这些语句通常会导致基于AppleScript的应用程序在属性值时自行修改应用程序包的嵌入式Contents/Resources/Scripts/main.scpt脚本文件在运行时更改。
  • 然而,Apple在http://support.apple.com/kb/HT5914的解决方法
    • 专门用于解决因应用程序的给定版本的自我修改问题而无需重新授权的问题。
    • 并不意味着更新应用程序(更改其源代码或资源)而无需重新授权。

出于安全原因,没有办法根据应用包的ID对应用授予一次性授权,然后无论其如何更改(例如,通过更新)都保持授权

您有两种选择:

  • 要么:重新授权应用每次更新
    • 更新您的应用后,转到代表您的应用的列表项旁边的System Preferences > Security & Privacy > Privacy > Accessibility切换复选标记(如果您的应用不存在,拖动那里)。
    • 注意:Apple的解决方法到位 - 出于安全原因这不是一个好主意,除非你真的需要使用持久保存其值的property语句 - 重新签名应用程序 - 尚未验证。
  • 或:使用解决方法 - 出于安全原因不推荐
    • 让您的应用成为不变的包装,从应用包外的位置加载运行时的真实脚本代码 - 这样, app保持不变,即使在运行时加载的脚本文件发生更改,也不需要重新授权。
    • 示例:说出您的真实脚本代码 - 涉及需要辅助访问的代码 - 存储为~/Desktop.test.scpt;您的包装器应用程序一旦获得授权,就可以使用run script file ((path to home folder as text) & "Desktop:test.scpt")
    • 调用该脚本

我没有具体的解释,只有推荐

  • 不要在基于AppleScript的应用程序中使用属性(例如property FNAME : "Input.txt":AppleScript 持续存在这些自动(在运行之间保留它们的值),但该功能实现得很笨拙(持久化的值被写入*.scpt文件本身 - 这就是导致重复授权问题的原因)和脆弱(如果您修改应用程序并保存(应用程序核心的*.scpt文件,以前的持久值丢失)。

  • 如果您远离酒店,重复授权的问题就会消失(除非您更新申请)。您可以滚动自己的持久性,例如,通过AppleScript对.plist(属性列表)文件的支持(请参阅System Events字典)。

    • 您也不需要链接支持文章(http://support.apple.com/kb/HT5914)中描述的解决方法,这也是一个优点,因为解决方法是基于打开安全漏洞。

至于你的具体问题:

  • ??是{无效 - 表示来自csreq数据库的TCC.db columnn值,本身并不是问题; OSX在幕后管理该专栏;它包含以特定当前形式标识应用程序的各种指纹(类似于MD5哈希,但我不知道实际使用的是什么),以便能够在以后检测到篡改。

  • 但是,我怀疑您可能正在查看错误的数据库条目

    • 我对您的软件包ID为com.atonus.open-cubase感到困惑:如果您的应用是基于AppleScript的*.app软件包,其软件包ID将具有固定前缀com.apple.ScriptEditor.id.,例如,com.apple.ScriptEditor.id.open-cubase。您是否通过捆绑包的Info.plist文件手动修改了捆绑包ID,或者我遗漏了什么?

    • 当操作系统确定篡改/授权应用程序中的更改时:

      • 它会将allowed列值重置为0,即撤销授权
      • 它会将csreq列值重置为NULL
    • 因此,在您看到... is not allowed assistive access对话框之后,数据库条目应报告为kTCCServiceAccessibility|com.atonus.open-cubase|0|0|1| - 请注意更改的布尔标志和缺少最后的??