swift - macOS, swift : Find current user's Applications directory (not the global "/Applications" directory)

标签 swift macos

在 macOS 上,Swift 如何获取当前用户的 Applications 目录的名称?

换句话说,不是全局“/Applications”目录,而是仅供当前用户使用的目录,例如“/Users/eric/Applications”或者“/Users/eric/”库/容器/com.eric.MyApp/数据/应用程序”

以下代码:

import Cocoa

class ViewController: NSViewController {
    override func viewDidLoad() {
        let listOfSearchPathDirectory: [FileManager.SearchPathDirectory] = [
            .applicationDirectory,
            .allApplicationsDirectory
        ]

        let listOfSearchPathDomainMask = [
            FileManager.SearchPathDomainMask.userDomainMask
        ]

        let fileManager = FileManager.default

        for searchPathDirectory in listOfSearchPathDirectory {
            print("    A [\(searchPathDirectory.rawValue)]")

            for searchPathDomainMask in listOfSearchPathDomainMask {
                for url in fileManager.urls(for: searchPathDirectory, in: searchPathDomainMask) {
                    print("        B [\(url)]")
                }
            }
        }
    }
}

生成这样的输出:

A [1]
    B [file:///Users/eric/Library/Containers/com.eric.MyApp/Data/Applications/]
A [100]
    B [file:///Users/eric/Library/Containers/com.eric.MyApp/Data/Applications/]
    B [file:///Users/eric/Library/Containers/com.eric.MyApp/Data/Applications/Utilities/]
    B [file:///Users/eric/Library/Containers/com.eric.MyApp/Data/Developer/Applications/]
    B [file:///Users/eric/Library/Containers/com.eric.MyApp/Data/Applications/Demos/]

其中包括我认为正确的值:

file:///Users/eric/Library/Containers/com.eric.MyApp/Data/Applications/

但是当我运行应用程序时,该目录不存在。

事实上,如果我通过在终端应用程序中键入以下内容来列出其父目录的内容:

ls -l /Users/eric/Library/Containers/com.eric.MyApp/Data 

我得到以下信息,但这不包括预期的目录“Applications”:

> lrwxr-xr-x   1 eric  staff   19 22 Jun 11:37 Desktop -> ../../../../Desktop
> drwx------   3 eric  staff   96 22 Jun 11:37 Documents
> lrwxr-xr-x   1 eric  staff   21 22 Jun 11:37 Downloads -> ../../../../Downloads
> drwx------  30 eric  staff  960 22 Jun 11:37 Library
> lrwxr-xr-x   1 eric  staff   18 22 Jun 11:37 Movies -> ../../../../Movies
> lrwxr-xr-x   1 eric  staff   17 22 Jun 11:37 Music -> ../../../../Music
> lrwxr-xr-x   1 eric  staff   20 22 Jun 11:37 Pictures -> ../../../../Pictures

我希望也能看到这样的一行:

> lrwxr-xr-x   1 eric  staff   19 22 Jun 11:37 Applications -> ../../../../Applications

有人知道我如何告诉代码我希望这个本地应用程序目录存在吗?

非常感谢

最佳答案

你得到目录

do {
    let userApplicationDirectory = try FileManager.default.url(for: .applicationDirectory, 
                                                                in: .userDomainMask, 
                                                    appropriateFor: nil, 
                                                            create: true)
    print(userApplicationDirectory)
} catch { print(error)}

如果目录丢失,将创建它。

如果应用程序被沙盒化,它指向容器中的.../Data/Applications,否则指向~/Applications

关于swift - macOS, swift : Find current user's Applications directory (not the global "/Applications" directory),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50988933/

相关文章:

c - 如何在 Mac 上使用 Xcode 用 C 语言设置 I/O 重定向?

c# - 在 mac 上用 c# 启动一个外部进程

ios - 使用 CoreLocation 提高点击按钮时获取最近地址的准确度

ios - 如何在 Swift 中保存从 UIImagePickerController 中选取的图像?

assembly - x86 32 位汇编问题

swift - 关闭 NSWindow 后 WKWebView 不回收

macos - NSTableView 上不存在的多个单元格

arrays - Swift - json 嵌套数组不返回值

ios - 如何在不使用委托(delegate)的情况下快速从辅助 View Controller 调用主 ViewController 中定义的函数?

ios - iOS 中的 GPS 导航