Macos Mac OSX获取与强制退出应用程序类似的应用程序列表
我想知道是否有一种方法可以获得类似于强制退出应用程序列表的应用程序列表 我不知道到目前为止我写的东西是否能让我得到这样的信息Macos Mac OSX获取与强制退出应用程序类似的应用程序列表,macos,Macos,我想知道是否有一种方法可以获得类似于强制退出应用程序列表的应用程序列表 我不知道到目前为止我写的东西是否能让我得到这样的信息 extension ViewController: NSTableViewDelegate { fileprivate enum CellIdentifiers { static let NameCell = "cell" } func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTa
extension ViewController: NSTableViewDelegate {
fileprivate enum CellIdentifiers {
static let NameCell = "cell"
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
var appName: String = ""
var appIcon: NSImage?
appName = applications[row].localizedName!
appIcon = applications[row].icon
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "applicationCell"), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = appName
cell.imageView?.image = appIcon ?? nil
print("created")
return cell
}
return nil
}
当我调试时,我会得到所有进程,但我只希望得到一个应用程序列表。这是我得到的结果的一个例子:
我们可以看到有应用程序,但也有所有进程(我不希望有)。您的代码没有解释从哪里获得
应用程序[]
数组,但我假设它是一个NSRunningApplication
对象数组,这些对象是通过runningApplications()
获得的
如果您只需要“常规”应用程序,即用户启动并出现在dock中的应用程序,您可能需要进行一些挖掘
首先,检查应用程序是否有bundleURL
。常规应用程序总是在一个捆绑包中,没有捆绑包的任何进程都可以忽略
然后可以使用NSBundle
读取捆绑包的Info.plist
文件(请参见infoDictionary
)。使用此词典,您可以判断它是否是常规应用程序(CFBundlePackageType
isAPPL
)。该测试将从列表中排除服务、插件等
您还可以通过查看它是否将LSUIElement
属性设置为1
来判断它是否是“后台”应用程序(未出现在dock中的应用程序)
这应该将列表缩小到用户通常会与之交互的那些应用。如何获得另一个应用程序的捆绑包(如第4段所述),您可以根据其URL为任何捆绑包/包创建捆绑包对象。请参阅
Bundle(url:)