在基于macOS Swift的应用程序中运行时,Apple Script失败

时间:2018-09-20 19:55:34

标签: swift applescript nsapplescript

解决方案: 我需要做两件事来解决我的问题:

1)将以下内容添加到我的应用的权利文件中:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
  <string>com.apple.Mail</string>
</array>

2)将以下内容添加到我的应用的plist中:

<key>NSAppleEventsUsageDescription</key>
<string>Please allow "your message here"</string>

这适用于Mojave 10.14(18A389)


我有一个基于Swift的基本macOS应用。我想使用Apple Script来确定Mail.app中未读电子邮件的数量。我创建了一个小的Apple Script,并在Script Debugger中对其进行了测试(工作正常)。

当我从我的应用程序中运行相同的脚本时,尽管该脚本失败,表明该邮件应用程序未运行(即使已运行):

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)
   }
 }

输出:

{
    NSAppleScriptErrorAppName = Mail;
    NSAppleScriptErrorBriefMessage = "Application isn't running.";
    NSAppleScriptErrorMessage = "Mail got an error: Application isn't running.";
    NSAppleScriptErrorNumber = "-600";
    NSAppleScriptErrorRange = "NSRange: {33, 12}";
}

我以前从未在应用程序内执行过Apple Script。此错误是由于权限问题引起的吗?

1 个答案:

答案 0 :(得分:0)

是的,这是一个权限问题。

您的应用已沙箱化,您必须指定适当的权利。将此添加到您的应用的权利文件中:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
    <string>com.apple.Mail</string>
</array>