NSHomeDirectory()
正在重新調整我的沙箱根目錄,而不是我的主目錄。 [@"~" stringByExpandingTildeInPath]
正在做同樣的事情。如何在沙盒應用程序中的objective-c中獲取用戶主目錄?
這/Users/username/Library/Containers/appID/Data
是真實返回什麼。我如何獲得/Users/username/
?
NSHomeDirectory()
正在重新調整我的沙箱根目錄,而不是我的主目錄。 [@"~" stringByExpandingTildeInPath]
正在做同樣的事情。如何在沙盒應用程序中的objective-c中獲取用戶主目錄?
這/Users/username/Library/Containers/appID/Data
是真實返回什麼。我如何獲得/Users/username/
?
如果你想的路徑到用戶的真正的家目錄,你可以使用:
char *realHome = getpwuid(getuid())->pw_dir;
完整的示例:
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <assert.h>
NSString *RealHomeDirectory() {
struct passwd *pw = getpwuid(getuid());
assert(pw);
return [NSString stringWithUTF8String:pw->pw_dir];
}
這給你路徑到用戶的家,但不會自動給您訪問到該文件夾。正如在評論中指出,你可以使用這個路徑:
NSHomeDirectory()
從蘋果documentation:
訪問用戶數據
Mac OS X的路徑尋找API中,POSIX層上方,返回路徑 相對於所述容器,而不是相對於所述用戶的家 目錄。如果您的應用程序,你沙盤前,訪問地點在 用戶的實際home目錄(〜),並且使用的是可可或Core 基金會的API,那麼,您啓用沙箱後,你的尋路 代碼將自動使用你的應用程序的容器代替。
對於首批推出的沙盒應用程序,Mac OS X的自動 遷移你的應用程序的主選項文件。如果應用程序使用額外 支持文件,執行這些文件的一次性遷移到 容器,如「遷移的應用程序的沙箱。」
如果您使用的是POSIX命令,例如getpwuid要獲取用戶實際主目錄的路徑 ,請考慮使用Cocoa或核心基礎結構符號(如NSHomeDirectory函數)。通過使用 Cocoa或Core Foundation,您支持應用程序沙盒限制 以防止直接訪問用戶的主目錄。
如果您的應用需要訪問用戶的主目錄才能使用 功能,請讓Apple通過Apple bug reporting system瞭解您的需求。
這是荒謬的......但內容豐富。謝謝。 – Dakine83 2012-03-05 22:37:44
使用斯威夫特,你可以從沙盒應用程序訪問用戶的主目錄路徑是這樣的:
var userHomeDirectoryPath : String {
let pw = getpwuid(getuid())
let home = pw?.pointee.pw_dir
let homePath = FileManager.default.string(withFileSystemRepresentation: home!, length: Int(strlen(home)))
return homePath
}
我創造了這個如此lution基於這篇博文中的一個片段:http://zpasternack.org/accessing-the-real-home-folder-from-a-sandboxed-app/
其真正的優勢在於爲文件打開/保存對話框設置一個合理的默認值。現在,如果我將它設置爲NSHomeDirectory(),它不是非常用戶友好。大多數人甚至不知道庫文件夾是什麼。 – Justin808 2012-03-04 08:45:01
這是一個很好的使用,另一個是通過將它與'NSHomeDirectory()'返回的內容進行比較來測試你是否在沙箱中,並且我確信還有其他的... – CRD 2012-03-04 08:52:46
另一個是獲得對文件通過'com.apple.security.temporary-exception.files.home-relative-path。*'臨時授權 – Dov 2014-04-30 18:07:33