You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS 15点击Dock图标打开双窗口问题求助

macOS 15下applicationShouldHandleReopen导致重复打开窗口的问题解决

问题背景

  • 在macOS 15之前,关闭所有窗口后点击Dock图标,应用不会自动重新打开窗口,因此在AppDelegate中实现了applicationShouldHandleReopen方法,旧系统下可正常实现点击Dock图标重开窗口的功能。
  • 升级到macOS 15后出现异常:
    1. 点击Dock图标会打开两个窗口,而非预期的一个;
    2. 注释掉applicationShouldHandleReopen方法后,仅打开一个窗口,符合预期。

相关代码片段

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
    guard let window = NSApplication.shared.windows.first else { assertionFailure(); return false }
    if !flag {
        window.makeKeyAndOrderFront(nil)
    }
    return true
}

尝试过的无效操作

添加@available(macOS, introduced: 10.0, obsoleted: 15.0)标记该方法,意图让macOS 15忽略此方法,但结果是窗口完全无法启动。

解决方案

macOS 15对applicationShouldHandleReopen的行为逻辑做了调整:当方法返回true时,系统会自动执行默认的重开窗口操作,而原有代码中手动调用window.makeKeyAndOrderFront(nil),导致两次触发窗口打开,从而出现双窗口问题。

方案一:分版本处理逻辑

保留方法以兼容旧系统,针对macOS 15+版本不再手动操作窗口,交由系统默认逻辑处理:

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
    if #available(macOS 15.0, *) {
        // macOS 15+ 依赖系统默认行为,无需手动显示窗口
        return true
    } else {
        guard let window = NSApplication.shared.windows.first else { assertionFailure(); return false }
        if !flag {
            window.makeKeyAndOrderFront(nil)
        }
        return true
    }
}

方案二:标记方法并依赖系统默认行为

通过版本标记将方法标记为macOS 15+过时,同时确保系统默认行为正常工作:

@available(macOS, introduced: 10.0, deprecated: 15.0, message: "依赖系统默认行为处理窗口重开")
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
    guard let window = NSApplication.shared.windows.first else { assertionFailure(); return false }
    if !flag {
        window.makeKeyAndOrderFront(nil)
    }
    return true
}

注意:若采用此方案,需确认macOS 15+下应用的默认行为正常——即无可见窗口时点击Dock图标会自动打开窗口。若默认行为不生效,检查Info.plist中LSUIElement是否设为YES(该设置会禁用Dock图标触发的窗口恢复),同时确认窗口的恢复配置正确。

内容的提问来源于stack exchange,提问作者rizwana desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:46:11