问题
We are developing an application for the Mac App Store using Qt 5.2.0.Framework on MacOSX 10.9.
Here is a simple AppleScript that creates a Microsoft Excel workbook and saves to any location.
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
The above script is saved as Untitled.scpt
in /Library/ApplicationScript/
.
Inside the application, we use the Cocoa framework to execute the AppleScript.
This AppleScript works in a non-sandboxed application. It fails in a sandboxed application.
My question is: How do you use an AppleScript in a sandboxed application? Or is there an alternative to this?
Kindly tell me the solution, because my project is being delayed by this.
Thanks
回答1:
There two issues with your code:
Excel probably doesn't yet support
com.apple.security.scripting-targets
, so you would needcom.apple.security.temporary-exception.apple-events
(see here how to find out if it supports it and here how to work with the temporary exception by adding an array of bundle-identifiers you want to target. You had that in the old screenshot of this question.)The entitlement of scripting-targets as well as for
com.apple.security.temporary-exception.apple-events
is an array of bundle-identifiers. You would see it in Xcode like this:A Mac App Store app must not install anything in shared locations like
/Library/ApplicationScript
(see App Store Review Guidelines Section 2.15). You need to store the Script inside your Container and run it from there.
回答2:
You need to add the com.apple.security.scripting-targets sandboxing entitlement to script other apps from within the sandbox.
回答3:
To work with Apple Script from your app you have to add the bundle identifiers of the app you want to send or receive events from in the entitlements file.
Here is the syntax:
<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>
You can have one or multiples app bundle identifiers in that array. Now, these apps can receive your apple events commands.
Example:
<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>
来源:https://stackoverflow.com/questions/21924932/how-to-run-an-applescript-from-a-sandboxed-application-on-a-mac-os-x