获得使用 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
。字符串值显示给用户
我尝试在 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
。字符串值显示给用户