Получить разрешение на использование ScriptingBridge - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь использовать ScriptingBridge в Swift. Это работает довольно хорошо, если я компилирую свое приложение и запускаю приложение из терминала, но запуск его из 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 { $0.id! > $1.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() открывает приложение Mail.

Но: доступ к SBObject не работает, так как я получаю следующую ошибку:

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

Я погуглил ошибку 1743, и это означает, что мое приложение не имеет разрешения для автоматизации. Поэтому я попытался добавить его в Xcode двумя способами:

К сожалению, ни один из них не работает. В настройках macOS я не могу добавить какое-либо приложение в часть автоматизации.

Есть идеи?

1 Ответ

0 голосов
/ 03 мая 2020

В macOS 10.14+ вы должны добавить ключ

Privacy - AppleEvents Sending Usage Description

aka NSAppleEventsUsageDescription в Info.plist. Значение строки отображается пользователю

...