我的Mac应用程序是沙箱,我需要保存文件。我在哪里保存这个文件?我似乎无法在不使用开放式面板的情况下找到允许的具体位置。这就是我在iOS上的表现:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
Mac上的沙盒目录的等价物是什么?
答案 0 :(得分:24)
无论您的应用程序是否为沙盒,该代码段都可在Mac上运行。
在非沙盒的Mac应用中,path
会引用您家中的“文档”文件夹:例如/Users/username/Documents
。
在沙盒应用中,它指的是应用沙箱中的文件夹:例如/Users/username/Library/Containers/com.yourcompany.YourApp/Documents
有关详细信息,请参阅the docs。
答案 1 :(得分:9)
Apple的沙盒指南非常有用,找到here。
你基本上有一个专门用于你的应用的文件夹,正如业余程序员回答我的问题here所描述的那样。
〜/库/容器/ com.yourcompany.yourappname /
这是我到目前为止所做的,我稍后会改进它:
//Create App directory if not exists:
NSFileManager* fileManager = [[NSFileManager alloc] init];
NSString* bundleID = [[NSBundle mainBundle] bundleIdentifier];
NSArray* urlPaths = [fileManager URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask];
NSURL* appDirectory = [[urlPaths objectAtIndex:0] URLByAppendingPathComponent:bundleID isDirectory:YES];
//TODO: handle the error
if (![fileManager fileExistsAtPath:[appDirectory path]]) {
[fileManager createDirectoryAtURL:appDirectory withIntermediateDirectories:NO attributes:nil error:nil];
}
答案 2 :(得分:2)
将@Mazyod的答案转换为 Swift(5.1):
var appPath: URL? {
//Create App directory if not exists:
let fileManager = FileManager()
let urlPaths = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask)
if let bundleID = Bundle.main.bundleIdentifier, let appDirectory = urlPaths.first?.appendingPathComponent(bundleID,isDirectory: true) {
var objCTrue: ObjCBool = true
let path = appDirectory.path
if !fileManager.fileExists(atPath: path,isDirectory: &objCTrue) {
do {
try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil)
} catch {
return nil
}
}
return appDirectory
}
return nil
}
但是,目录已更改,由于路径为
,我不确定是否需要捆绑ID的附加重复。"/Users/**user name**/Library/Containers/**bundleID**/Data/Library/Application Support/**bundleID**".
但这似乎可行。
答案 3 :(得分:0)
更容易。对于macOS上的沙盒应用程序,功能NSHomeDirectory
为您提供了具有读写访问权限的路径,并可以保存所有文件。这将是一条这样的道路
/Users/username/Library/Containers/com.yourcompany.YourApp