我在Omnis工作室创建了一个应用程序,我希望用户能够按下按钮打开Microsoft Excel,然后粘贴剪贴板中的内容。要做到这一点,我的应用程序调用AppleScript应用程序在这里看到:
tell application "Microsoft Excel"
activate
make new workbook
paste special on worksheet active sheet
end tell
但是,每当我的应用程序调用该脚本时,它都会遇到Apple的沙盒问题,说它无法向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),用户还需要允许你的应用程序自动化其他应用程序,请查看此主题:"because it is not SIP-protected" - Apple event error in OSX Mojave
要从10.14开始绕过此开头,您还必须在info.plist文件中添加一个新行
key: NSAppleEventsUsageDescription
value: [Some description why you need to use AppleEvents]
我不知道第三方编辑是否会遵循Apple提供的变化速度。