首页 > 解决方案 > 如何授予 Applescript 应用程序的权利

问题描述

我在 Omnis 工作室中创建了一个应用程序,我希望用户能够按下按钮打开 Microsoft Excel,然后粘贴剪贴板中的内容。为此,我让我的应用程序调用 AppleScript 应用程序

tell application "Microsoft Excel"
  activate
  make new workbook
  paste special on worksheet active sheet
end tell

但是,每当我的应用程序调用该脚本时,它就会遇到苹果沙盒的问题,说它无法将事件发送到 Microsoft Excel。

我在网上读到,为了访问在 Mac OS 中发送事件,您需要有一个与您的应用程序关联的 entitlements.plist 文件。如何将 entitlements.plist 文件添加到我的 Applescript 应用程序,以便在它运行时能够将事件发送到 Microsoft Excel?

标签: excelmacosapplescriptsandbox

解决方案


如果您不出售该应用程序并仅将其用于您自己,最好停用沙盒。您的应用程序仍将通过右键单击它 > 打开来运行。

如果您已经启用了沙箱,那么您的应用程序结构中必须已经有一个 YOURAPPNAME.entitlements 文件(不是在已编译的应用程序中,而是在您的源代码中),因为必须在该文件中启用沙箱。

我不知道 Omnis 工作室,您可以尝试使用 XCode,它支持从头开始的权利文件——即使您必须使用 applescript Objective-c 而不是普通的 applescript。

如果您设法找到该文件,则需要向其添加新的键/值,以便处理 Excel:

key: "com.apple.security.temporary-exception.apple-events"
value (type array): 
    Item 0 > "com.microsoft.excel"

但请注意 - 如果您想留在沙盒中,从 OSX 10.14 开始,Apple 推出了一项名为“安全完整性保护”(SIP)的新安全策略,用户还需要允许您的应用程序自动化其他应用程序,请查看此线程:“因为它不受 SIP 保护” - OSX Mojave 中的 Apple 事件错误

要从 10.14 开始绕过这个,您还必须在 info.plist 文件中添加一个新行

key: NSAppleEventsUsageDescription
value: [Some description why you need to use AppleEvents]

我不知道第三方编辑是否会跟随 Apple 在更改方面提供的速度。


推荐阅读