首页 > 解决方案 > 有没有办法使用 FileManager 和 NSBundle 来获取支持 /Applications 目录中给定类型文件的所有应用程序?

问题描述

我正在创建一个命令行工具,该工具将从用户那里获取输入以搜索支持特定文件扩展名的特定应用程序。例如,如果我输入 mp4,它可能会显示 QuickTime。我正在寻找特定的 FileManager 操作来在 Swift 中实现这一点。

标签: swiftxcodemacos

解决方案


我想你正在寻找NSWorkspace.urlForApplication(toOpen:). 如果您双击一个文件,它会找到将打开的应用程序,并返回其 URL。由于它需要一个文件才能工作,因此您需要先在某个地方创建一个具有所需扩展名的临时空文件,然后调用此方法。

let tempFileURL = FileManager.default.temporaryDirectory.appendingPathComponent("foo.mp4")
FileManager.default.createFile(atPath: tempFileURL.path, contents: nil, attributes: nil)
// this gives me the URL for QuickTime Player:
// file:///System/Applications/QuickTime%20Player.app/
let url = NSWorkspace.shared.urlForApplication(toOpen: tempFileURL)

推荐阅读