我在自己的AppleScript应用程序和安全性和安全性方面的辅助功能方面遇到了问题。隐私"
我已经写了一个名为" open cubase"我已授予访问权限。我使用了Apple关于如何防止重复重新授权的建议(http://support.apple.com/kb/HT5914)。但现在即使在“辅助功能”列表中列出并选择了应用程序,它也表示它没有辅助访问权限。
当我使用
时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。
答案 0 :(得分:2)
更新,基于OP的反馈:
property
语句,这些语句通常会导致基于AppleScript的应用程序在属性值时自行修改应用程序包的嵌入式Contents/Resources/Scripts/main.scpt
脚本文件在运行时更改。出于安全原因,没有办法根据应用包的ID对应用授予一次性授权,然后无论其如何更改(例如,通过更新)都保持授权强>
您有两种选择:
System Preferences > Security & Privacy > Privacy > Accessibility
和切换复选标记(如果您的应用不存在,拖动那里)。property
语句 - 重新签名应用程序 - 尚未验证。~/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
字典)。
至于你的具体问题:
??
是{无效 - 表示来自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|
- 请注意更改的布尔标志和缺少最后的??
。