【问题标题】:Getting path to users Library folder in OS X在 OS X 中获取用户库文件夹的路径
【发布时间】:2011-11-03 10:26:18
【问题描述】:

我需要打开一个以用户库文件夹作为目标文件夹的 NSSavePanel。通常我会通过在[NSSavePanel beginSheetForDirectory] 中输入~/Library/ 来做到这一点。

只要应用程序没有被沙盒化,它就可以正常工作。对于沙盒应用程序,这将导致NSSavePanel 尝试访问应用程序文档“框”内的文件夹。

我不能引用/Users/username/Library/,因为我在运行时不知道用户username。那么如何在 cocoa 中链接到这条路径呢?

【问题讨论】:

标签: macos cocoa sandbox nssavepanel appstore-sandbox


【解决方案1】:

我不确定沙盒如何适应这一点,但您可以使用以下命令找到用户的库目录:

NSArray* paths = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES );

【讨论】:

    【解决方案2】:

    不确定这是否适用于沙盒应用程序,但我现在就是这样做的。这将返回 /User/TheirUserName

    -(NSString *)homeDirectory
    {
        return NSHomeDirectory();
    }
    

    【讨论】:

    • NSHomeDirectory() 返回沙盒路径,至少在 10.7.4 上。然而,虽然这是获取 HOME 文件夹的正确方法,但这是获取 LIBRARY 文件夹的不正确方法。如果路径发生变化怎么办?请使用 JWWalker 的NSSearchPathForDirectoriesInDomains() 解决方案。尽可能迭代所有返回的元素。
    【解决方案3】:

    这取决于你想要达到的目标。

    • 如果您的应用程序需要该行为,那么您可以在将应用程序提交到 Mac App Store 时请求temporary exception entitlement。但迟早,您必须找到解决方案来消除此异常。
    • 如果您想访问以前存储在~/Library/ 文件夹中的数据,您可以定义migration strategy 将数据移回沙箱。

    【讨论】:

    • 我不需要任何提升的权利来实现这一点。在文件系统上进行读/写就足够了,因为我使用保存对话框进行实际保存。我已经对此进行了概念验证,并且知道这是可行的。我需要用户做的是在这个文件夹中保存一些文件。这就是为什么我需要实际的文件夹而不仅仅是访问它的内容。所以把数据带进我的沙箱也不好。所以我需要某种方式来读取用户的“用户名”,以便能够建立他的库文件夹的路径,比如:“~/user/[username]/Library/
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2010-11-22
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多