通知不会在 macOS Big Sur 11.6 上触发 userNotificationCenter
Notification does not trigger userNotificationCenter on macOS Big Sur 11.6
当我 运行 应用程序使用终止参数时(使用“产品”/“方案”/“编辑方案...”/“运行”/“参数”/“参数在启动时传递”设置"), 一条通知出现在 macOS 通知中心并且应用终止。
#testapp application did finish launching
#testapp terminate mode enabled
#testapp terminating…
到目前为止,一切顺利……符合预期。
当我点击通知时,应用程序启动但未触发 userNotificationCenter
(我在控制台应用程序中没有看到 #testapp notification triggered
,但我看到了以下内容)。
#testapp application did finish launching
#testapp terminating…
不正常吧?我该如何解决这个问题?
我开始认为这是版本 11.6 中的 Big Sur 错误。
在 Big Sur 版本 11.4 (M1) 和 11.5 (Intel) 上一切正常。
感谢您的帮助!
//
// AppDelegate.swift
// Test
//
// Created by Sun Knudsen on 2021-10-22.
//
import Cocoa
import UserNotifications
@main
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {
func showNotification(){
let content = UNMutableNotificationContent()
content.body = "Hello"
let request = UNNotificationRequest(
identifier: UUID().uuidString,
content: content,
trigger: nil
)
UNUserNotificationCenter.current().add(request)
}
func terminate() -> Void {
DispatchQueue.main.async {
NSApp.terminate(self)
}
}
func applicationDidFinishLaunching(_ notification: Notification) {
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (allowed, error) in
NSLog("#testapp application did finish launching")
if CommandLine.arguments.indices.contains(1) && CommandLine.arguments[1] == "terminate" {
NSLog("#testapp terminate mode enabled")
self.showNotification()
self.terminate()
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.terminate()
}
}
}
}
func applicationWillTerminate(_ aNotification: Notification) {
NSLog("#testapp terminating…")
}
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
NSLog("#testapp notification triggered")
self.terminate()
completionHandler()
}
}
测试应用程序在 GitHub https://github.com/sunknudsen/test-app 可用。
此问题是由 macOS Big Sur 11.6 中的错误引起的。
在 macOS Big Sur 11.6.1 或 macOS Monterey 中一切正常。
当我 运行 应用程序使用终止参数时(使用“产品”/“方案”/“编辑方案...”/“运行”/“参数”/“参数在启动时传递”设置"), 一条通知出现在 macOS 通知中心并且应用终止。
#testapp application did finish launching
#testapp terminate mode enabled
#testapp terminating…
到目前为止,一切顺利……符合预期。
当我点击通知时,应用程序启动但未触发 userNotificationCenter
(我在控制台应用程序中没有看到 #testapp notification triggered
,但我看到了以下内容)。
#testapp application did finish launching
#testapp terminating…
不正常吧?我该如何解决这个问题?
我开始认为这是版本 11.6 中的 Big Sur 错误。
在 Big Sur 版本 11.4 (M1) 和 11.5 (Intel) 上一切正常。
感谢您的帮助!
//
// AppDelegate.swift
// Test
//
// Created by Sun Knudsen on 2021-10-22.
//
import Cocoa
import UserNotifications
@main
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {
func showNotification(){
let content = UNMutableNotificationContent()
content.body = "Hello"
let request = UNNotificationRequest(
identifier: UUID().uuidString,
content: content,
trigger: nil
)
UNUserNotificationCenter.current().add(request)
}
func terminate() -> Void {
DispatchQueue.main.async {
NSApp.terminate(self)
}
}
func applicationDidFinishLaunching(_ notification: Notification) {
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (allowed, error) in
NSLog("#testapp application did finish launching")
if CommandLine.arguments.indices.contains(1) && CommandLine.arguments[1] == "terminate" {
NSLog("#testapp terminate mode enabled")
self.showNotification()
self.terminate()
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.terminate()
}
}
}
}
func applicationWillTerminate(_ aNotification: Notification) {
NSLog("#testapp terminating…")
}
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
NSLog("#testapp notification triggered")
self.terminate()
completionHandler()
}
}
测试应用程序在 GitHub https://github.com/sunknudsen/test-app 可用。
此问题是由 macOS Big Sur 11.6 中的错误引起的。
在 macOS Big Sur 11.6.1 或 macOS Monterey 中一切正常。