【问题标题】:why in xcode, home directory is showing as /Users/myname/Library/Containers/... and not the main folder?为什么在 xcode 中,主目录显示为 /Users/myname/Library/Containers/... 而不是主文件夹?
【发布时间】:2019-09-20 23:26:23
【问题描述】:

我搜索了很多,但找不到答案。 我刚开始使用 xcode,并且有一个非常简单的程序,名为“Image Test”。

---> 它有一个按钮和一个文本框。我想在 textField 中显示我的系统主目录路径。这是我的代码:

@IBOutlet weak var textField1: NSTextField!
@IBAction func Button1(_ sender: Any) {

    do{
        let home = try FileManager.default.homeDirectoryForCurrentUser
        textField1.stringValue = home.path
    }
    catch{}
}

它可以工作,但返回的路径如下: /Users/myname/Library/Containers/com.Image-Test/Data

我之前在 Xcode Playground 中测试过这段代码,它是正确的。它的代码相同,但没有抛出正确的路径。

【问题讨论】:

    标签: swift macos-mojave xcode10.1 home-directory


    【解决方案1】:

    这是因为沙盒。 documentation 声明:

    应用沙盒容器目录

    它位于用户主目录中的系统定义路径。在沙盒应用中,当您的应用调用 NSHomeDirectory 函数时会返回此路径。

    您可以通过删除应用沙盒功能来验证这一点(注意:我建议您应该为您的应用执行此操作)。

    PS:如果您打算将应用提交到 AppStore,则必须启用沙盒

    【讨论】:

    • 非常感谢。是的,它确实有效。我刚开始学习 xcode 和 swift 并进行测试。再次感谢
    • @Vandad 不客气。请记住,虽然在您学习时禁用沙盒可能看起来“方便”并且没问题,但它对于任何生产应用程序都非常重要。
    • 这是关于黑客攻击吗?如果沙盒被禁用,并且如果它在我的系统中工作,它会在另一个系统中工作吗?它会识别我系统上的主目录(或其他目录)吗?!
    • 这是关于安全性的。这背后的基本原理是,您的应用只能访问 用户 决定授予访问权限的任何资源,而不是整个系统。我相信它可以在另一个系统上运行,前提是用户给出明确的许可(不过我可能是错的;如果有人知道更多关于它的信息,我也很乐意知道)。您可以在我的答案中包含的文档链接中阅读更多内容。
    • 再次感谢。专门用于快速回答:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2012-08-03
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多