Mac OS:直接从 Swift 中的目录访问内容

Tal*_*han 3 macos xcode swift swift-playground

我是 mac OS 开发的新手,所以请原谅我的任何基本问题,但相信我,我已经做了很多研究,但仍然有点卡住。

所以我试图访问当前用户的桌面内容。

在操场上很容易,只需使用

let homeURL = FileManager.default.homeDirectoryForCurrentUser
let desktopURL = homeURL.appendingPathComponent("Desktop/")
let contents = try fileManager.contentsOfDirectory(atPath:desktopURL.path)
Run Code Online (Sandbox Code Playgroud)

它显示桌面上的所有内容。但是当我在一个项目中运行类似的代码时。

let homeURL = FileManager.default.homeDirectoryForCurrentUser
Run Code Online (Sandbox Code Playgroud)

它返回我的应用程序的容器。

file:///Users/myUserName/Library/Containers/AppIdentifier/Data/

并且 let contents = try fileManager.contentsOfDirectory(atPath: desktopURL.path)不会返回任何内容。

好吧,我然后我用

删除最后一个路径组件

同时获取主路径以获取我的 URL 直到我的用户名

let homeURL = FileManager.default.homeDirectoryForCurrentUser.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
Run Code Online (Sandbox Code Playgroud)

当我调试它时,它返回

file:///Users/myUserName

如我所愿。但是当我运行代码时,内容变量仍然为零。

下一次尝试:

我在互联网上搜索以检查获取目录路径的替代方法。所以我遇到了

NSOpen面板

我从 Panel 获取文件夹的 URL 并使用该 URL 检查其中的内容。它工作正常

这是代码

let homeURL = FileManager.default.homeDirectoryForCurrentUser
let desktopURL = homeURL.appendingPathComponent("Desktop/")
let contents = try fileManager.contentsOfDirectory(atPath:desktopURL.path)
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我不能直接访问内容。我已经尝试了很多次。在项目中,我无法enter code here直接从(某种)硬编码 URL 获取内容。

如果需要任何其他信息,请告诉我。

vad*_*ian 5

显然,该应用程序是沙盒的,默认情况下是启用的。

如果App Sandbox启用,您只能以编程方式访问应用程序容器中的目录。这是有意的限制。访问常用主文件夹中标准目录之一的唯一方法是com.apple.security.files.user-selected.read-write授权和NSOpen-/SavePanel.

请阅读应用沙盒设计指南

如果您不打算在 App Store 中发布应用程序并且您不需要沙箱,请禁用它。