在 Swift 4.0 和 Xcode 9.0 中获取用户桌面路径

Kad*_*efi 6 swift4 xcode9

我正在尝试获取当前用户桌面的路径,但我得到了库中另一个位置的路径(请参阅代码)。

Playgrounds 中的相同代码给出了正确的答案。我在早期创建的 Xcode 项目版本中使用了相同的代码,这也给出了很好的结果。

测试在 MacOS High Sierra、Xcode 版本 9.0 (9A235) 和 Swift 4.0 下完成。

这是使用的代码:

public func userDesktop() -> String {
  let paths = NSSearchPathForDirectoriesInDomains(.desktopDirectory, .userDomainMask, true)
  let userDesktopDirectory = paths[0]
  return userDesktopDirectory
}

let myPath:String = userDesktop() + "/"
print(myPath)

let userDesktopDirectory:String = NSHomeDirectory() + "/" + "Desktop/"
print(userDesktopDirectory)

/* results in Playground */
/Users/kader/Desktop/
/Users/kader/Desktop/

/* Results from a project in Xcode 9.0 */
/Users/kader/Library/Containers/com.kader.testuserpath/Data/Desktop/
/Users/kader/Library/Containers/com.kader.testuserpath/Data/Desktop/
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题还是一个错误?

我很好奇是否有更多人遇到过同样的问题。

Cod*_*ent 5

我注意到 Xcode 9 中的 Cocoa Application 模板默认开启了 App Sandbox。启用此模式后,应用程序只能访问其自己的容器内的文件,就像 iOS 应用程序一样。您可以在项目设置的“功能”选项卡中将其关闭。Apple 文档中的屏幕截图:

能力

您的应用程序可以在沙箱中执行的操作。如果您这样做是为了好玩,无意通过 Mac App Store 分发它,或者想要一个传统意义上的“计算机应用程序”,请完全关闭沙盒。长期以来一直是 Mac App Store 的痛点,也是许多开发者离开商店的原因。