获得使用 ScriptingBridge 的权限

Get permission to use ScriptingBridge

我尝试在 Swift 中使用 ScriptingBridge。如果我从终端编译我的应用程序和 运行 应用程序,但从 运行 将它从 Xcode 或从 Finder 打开它不起作用,这工作得很好。更详细地说,这是我的代码:

@objc protocol MailMessage {
    @objc optional var id: Int { get }
    @objc optional var dateSent: Date { get }
    @objc optional var sender: String { get }
    @objc optional var source: String { get }
}
extension SBObject: MailMessage {}

@objc protocol MailApplication {
    @objc optional var selection: SBElementArray { get }
    @objc optional func extractNameFrom(_ x: String) -> String
    @objc optional func extractAddressFrom(_ x: String) -> String
}

extension SBApplication: MailApplication {}
if let mail: MailApplication = SBApplication(bundleIdentifier: "com.apple.mail") {

    if let selection = mail.selection as? [MailMessage] {
        // sort to get the newest message first
        let sorted = selection.sorted { [=11=].id! > .id! }
        let message = sorted[0]

        // print the name of the sender
        if let sender = message.sender {
            let name = mail.extractNameFrom!(sender)
            print(name)
        }
    }
}

我从终端成功打印了发件人的姓名。从Xcode开始,mail.selection为零。

但是:

print(mail)

给我:

<SBScriptableApplication @0x600000c91b00: application "Mail" (689)>

所以我进行了更多测试,并在我的协议中添加了两件事:

@objc protocol MailApplication {
    @objc func activate()
    @objc var delegate: SBApplicationDelegate? { get set }
    ...

现在我做了以下事情:

if let mail: MailApplication = SBApplication(bundleIdentifier: "com.apple.mail") {
    mail.delegate = self
    mail.activate()
    ...
func eventDidFail(_ event: UnsafePointer<AppleEvent>, withError error: Error) -> Any? {
    print(error)
}

首先:mail.activate() 打开邮件应用程序。

但是:访问 SBObject 不起作用,因为我收到以下错误:

Error Domain=NSOSStatusErrorDomain Code=-1743 "(null)" UserInfo={ErrorNumber=-1743}

我在谷歌上搜索了错误 1743,这意味着我的应用程序没有自动化权限。所以我尝试通过两种方式将其添加到Xcode中:

不幸的是,none 它们都有效。在 macOS 设置中,我无法将任何应用程序添加到自动化部分。

有什么想法吗?

在 macOS 10.14+ 中,您必须添加密钥

Privacy - AppleEvents Sending Usage Description

在 Info.plist 中又名 NSAppleEventsUsageDescription。字符串值显示给用户