在Swift中,有没有一种简单的方法可以让一个macOS应用将消息发送到同一mac(localhost)上的另一个macOS应用。我有两个macOS应用程序,其中一个是菜单应用程序。在某些情况下,标准macOS应用程序需要向菜单应用程序发送通知(单程票,开火和忘记通知)。
答案 0 :(得分:0)
如何实现此目标有许多不同的选择。每个都有自己的优点和缺点。
最简单的方法是使用Foundation的DistributedNotificationCenter
发送通知。就像常规的NotificationCenter
一样,但是跨过程边界。
在接收方,您可以像这样注册观察者:
DistributedNotificationCenter.default().addObserver(forName: NSNotification.Name("com.mycompany.MyNotification"), object: nil, queue: nil) { notification in
print(notification)
}
在发送方,您将发布如下通知:
DistributedNotificationCenter.default().post(name: NSNotification.Name("com.mycompany.MyNotification"), object: nil, userInfo: ["data": "to send"])
这不是很安全-任何进程都可以发送和接收这些通知。因此,如果它们包含私有数据,则不应使用此方法。这也意味着您应该使用唯一的通知名称。在此处以一个反向的DNS名称(例如com.mycompany.
)开始是个好主意。
如果您的应用已被沙箱化,则存在另一个限制,即您无法发送userInfo
字典。