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

Swift中如何获取其他应用的NSDockTile对象?

解答你的Cocoa DockTile问题

首先直接说结论:你没办法把NSRunningApplication转换成NSApplication,也不能通过其他应用的Bundle ID创建对应的NSApplication实例——原因很简单,NSApplication是当前你自己的应用的单例对象,每个应用进程里只会有一个属于它自己的NSApplication,其他应用的NSApplication运行在它们自己的进程空间里,受操作系统进程隔离保护,你的代码根本没法直接访问到。

不过好消息是,你完全没必要这么做!要获取其他运行中应用的DockTile,直接从NSRunningApplication实例里拿就可以了——它本身就有一个dockTile属性:

// 举个例子,获取Safari的DockTile
if let safariApp = NSWorkspace.shared.runningApplications.first(where: {
    $0.bundleIdentifier == "com.apple.Safari"
}) {
    let safariDockTile = safariApp.dockTile
    // 这里就可以对这个DockTile进行操作了,比如设置自定义内容
    safariDockTile.display() // 记得调用display()让更改生效
}

需要提醒你几点:

  • 操作其他应用的DockTile可能需要辅助功能权限,如果你的应用没有这个权限,有些操作可能会失效或者被系统阻止。你可以在系统偏好设置的“安全性与隐私”里给你的应用开启权限。
  • 不是所有的NSRunningApplication都有DockTile——比如后台运行的无UI应用,它们可能没有Dock图标,自然也没有DockTile,所以使用前最好先判断safariApp.activationPolicy是不是.regular(常规有UI的应用)。
  • 作为Cocoa新手,建议多熟悉NSWorkspace和NSRunningApplication的相关API,这两个类是管理系统中运行应用的核心工具。

内容的提问来源于stack exchange,提问作者Smitty-Werben-Jager-Manjenson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:07