Я пытаюсь использовать 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 я не могу добавить какое-либо приложение в часть автоматизации.
Есть идеи?