如何在Mac(OS X)上的沙盒应用程序中运行AppleScript

时间:2014-02-21 03:51:28

标签: cocoa applescript mac-app-store appstore-sandbox entitlements

我们正在使用Mac OSX 10.9上的Qt 5.2.0.Framework为Mac App Store开发应用程序。

这是一个简单的AppleScript,可以创建Microsoft Excel工作簿并保存到任何位置。

tell application "Microsoft Excel"
    set myworkbook to make new workbook
    set fname to POSIX file "/Private/var/root/Download/ExcelFile" as text
    save workbook as myworkbook filename fname
end tell

以上脚本在Untitled.scpt中保存为/Library/ApplicationScript/

在应用程序内部,我们使用Cocoa框架来执行AppleScript。

此AppleScript适用于非沙盒应用程序。它在沙盒应用程序中失败。

我的问题是:如何在沙盒应用程序中使用AppleScript?或者有替代方案吗?

请告诉我解决方案,因为我的项目因此而被推迟。

由于

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:9)

您的代码有两个问题:

  • Excel可能还不支持com.apple.security.scripting-targets,因此您需要com.apple.security.temporary-exception.apple-events(请参阅here如何确定是否支持com.apple.security.temporary-exception.apple-events how to work with the temporary exception通过添加一个你想要定位的bundle-identifier数组。你可以在这个问题的旧屏幕截图中找到它。)

  • 脚本目标和/Library/ApplicationScript的权利是一个包标识符数组。你会在Xcode中看到它:com.apple.security.temporary-exception.apple-events

  • Mac App Store应用不得在{{1}}等共享位置安装任何内容(请参阅App Store Review Guidelines第2.15节)。您需要将Script存储在Container中并从那里运行它。

答案 1 :(得分:2)

您需要add the com.apple.security.scripting-targets sandboxing entitlement从沙箱中编写其他应用的脚本。

答案 2 :(得分:0)

要在应用程序中使用Apple Script,必须在权利文件中添加要发送或接收事件的应用程序的捆绑标识符。

语法如下:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
    <string>{bundle identifier of app 1}</string>
    <string>{bundle identifier of app 2}</string>
</array>

该阵列中可以有一个或多个应用程序捆绑包标识符。现在,这些应用程序可以接收您的apple events命令。

示例:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
    <string>com.apple.finder</string>
    <string>com.apple.systemevents</string>
    <string>com.microsoft.excel</string>
</array>