I have a simple Swift-based macOS app that creates and executes an Apple Script:
let unreadEmailsScript = """
tell application "Mail"
get unread count of inbox
end tell
"""
if let scriptObject = NSAppleScript(source: unreadEmailsScript) {
var errorDict: NSDictionary? = nil
scriptObject.executeAndReturnError(&errorDict)
if let error = errorDict {
print(error)
}
}
I've added the following to my project's entitlements:
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>com.apple.Mail</string>
</array>
When I execute this on the latest version (18A389) of Mojave the code prints:
{
NSAppleScriptErrorAppName = Mail;
NSAppleScriptErrorBriefMessage = "Not authorized to send Apple events to Mail.";
NSAppleScriptErrorMessage = "Not authorized to send Apple events to Mail.";
NSAppleScriptErrorNumber = "-1743";
NSAppleScriptErrorRange = "NSRange: {33, 12}";
}
The system doesn't prompt me for authorization at app launch.
What is the correct way to send Apple Events to Mail via a Swift app under Mojave?
TIA
In case anyone else runs into this problem... what solved it for me was this the following. I added
<key>NSAppleEventsUsageDescription</key>
<string>Please give Unread Mail access to Mail via Apple Script.</string>
to my app's plist.
Now, upon first launch, the system prompts the user for permission. If permission is granted the app's Apple Script works correctly.