excel - 如何授予 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?
解决方案
如果您不出售该应用程序并仅将其用于您自己,最好停用沙盒。您的应用程序仍将通过右键单击它 > 打开来运行。
如果您已经启用了沙箱,那么您的应用程序结构中必须已经有一个 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 在更改方面提供的速度。
推荐阅读
- php - PHP - 对嵌套数组执行解析规则
- c# - 二维数组数组边界外的索引
- spring-boot - 如何在不更改其他属性的情况下从 Spring Data 更新 Page 对象内部的内容
- python - 'int' 对象在 for in range 循环中不可调用
- asp.net-mvc - datepicker - 如何在 onChangeMonthYear 中设置正确的选择
- lua - 需要在本地表中声明本地函数或变量?
- git - 致命:协议错误:错误的行长度:这在詹金斯
- android - 如何根据日/夜模式更改自定义通知的背景颜色
- excel - 保护工作表阻止宏工作
- java - 从广播组获取和返回文本