Swift 命令行工具未收到 DistributedNotificationCenter 通知
Swift Command Line Tool Not Receiving DistributedNotificationCenter Notifications
我正在尝试创建一个非常基本的 Swift 命令行应用程序,当 macOS UI 更改 to/from light/dark 模式时,它使用 WebSocket 向另一个应用程序发出信号.
出于某种原因,命令行工具未收到来自 DistributedNotificationCenter
的 任何 通知,尤其是 AppleInterfaceThemeChangedNotification
。但是,运行 applicationDidFinishLaunching
上 Cocoa UI 应用程序中完全相同的代码工作得很好。
我发现了一个 old Obj-C CLI project on Github 用于打印每条通知,但它也没有任何作用。这让我怀疑苹果可能改变了什么,但我似乎无法在网上找到任何关于它的信息。我需要设置某些 Xcode 项目设置吗?
// main.swift
import Foundation
class DarkModeObserver {
func observe() {
print("Observing")
DistributedNotificationCenter.default.addObserver(
forName: Notification.Name("AppleInterfaceThemeChangedNotification"),
object: nil,
queue: nil,
using: self.interfaceModeChanged(notification:)
)
}
func interfaceModeChanged(notification: Notification) {
print("Notification", notification)
}
}
let observer = DarkModeObserver.init()
observer.observe()
RunLoop.main.run()
我设法让 iTunes 通知正常工作,所以只是主题更改通知不起作用。鉴于此,我怀疑 Apple 只向 UI/NSApplication 应用程序发送通知。因此,将上面的最后 3 行替换为以下作品:
let app = NSApplication.shared
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
let observer = DarkModeObserver.init()
observer.observe()
}
}
let delegate = AppDelegate()
app.delegate = delegate
app.run()
我正在尝试创建一个非常基本的 Swift 命令行应用程序,当 macOS UI 更改 to/from light/dark 模式时,它使用 WebSocket 向另一个应用程序发出信号.
出于某种原因,命令行工具未收到来自 DistributedNotificationCenter
的 任何 通知,尤其是 AppleInterfaceThemeChangedNotification
。但是,运行 applicationDidFinishLaunching
上 Cocoa UI 应用程序中完全相同的代码工作得很好。
我发现了一个 old Obj-C CLI project on Github 用于打印每条通知,但它也没有任何作用。这让我怀疑苹果可能改变了什么,但我似乎无法在网上找到任何关于它的信息。我需要设置某些 Xcode 项目设置吗?
// main.swift
import Foundation
class DarkModeObserver {
func observe() {
print("Observing")
DistributedNotificationCenter.default.addObserver(
forName: Notification.Name("AppleInterfaceThemeChangedNotification"),
object: nil,
queue: nil,
using: self.interfaceModeChanged(notification:)
)
}
func interfaceModeChanged(notification: Notification) {
print("Notification", notification)
}
}
let observer = DarkModeObserver.init()
observer.observe()
RunLoop.main.run()
我设法让 iTunes 通知正常工作,所以只是主题更改通知不起作用。鉴于此,我怀疑 Apple 只向 UI/NSApplication 应用程序发送通知。因此,将上面的最后 3 行替换为以下作品:
let app = NSApplication.shared
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
let observer = DarkModeObserver.init()
observer.observe()
}
}
let delegate = AppDelegate()
app.delegate = delegate
app.run()