【问题标题】:Get user desktop path in Swift 4.0 and Xcode 9.0在 Swift 4.0 和 Xcode 9.0 中获取用户桌面路径
【发布时间】:2017-10-02 19:15:53
【问题描述】:

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

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/

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

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

【问题讨论】:

    标签: swift4 xcode9


    【解决方案1】:

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

    What your app can do inside a sandbox。如果您这样做是为了好玩,不打算通过 Mac App Store 分发它,或者想要传统意义上的“计算机应用程序”,请完全关闭 sanboxing。这一直是 Mac App Store 的痛点,也是许多开发者离开商店的原因。

    【讨论】:

    • 感谢您的快速答复。这确实是沙盒。由于我没有通过应用商店分发我的应用,因此这对我来说不是问题。遗憾的是,这在发布后就不是很明显了。
    【解决方案2】:

    在 Swift 4.0 上试试这个

    var desktopPath = (NSSearchPathForDirectoriesInDomains(.desktopDirectory, .userDomainMask, true) as [String]).first
    

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2018-07-22
      • 2019-02-11
      • 2010-10-12
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多