2013-02-12 36 views
0

好吧,我的问题很简单,但我绝对找不到一个简单的答案。所以,如果你能帮忙,我会很高兴。允许的应用文件位置 - 有或没有沙盒

我想要什么:

的地方(无论是在10.6 - 无沙箱 - 或10.7及更高版本,与沙盒),其中我的应用程序可以自由地写一些数据。

几句话:

  • 我想知道是否有任何系统的功能(例如NSHomeDirectory()),它指向一个安全的位置,我写信给(OS X版本不应该的问题) 。

回答

0

好的,在这里,我回答了我自己的问题。

那么,如果我们只需要访问应用程序支持目录(并创建它,如果它不存在),无论我们在10.6(没有沙箱启用)或10.7 +?

这里的通用解决方案(我自己写了NSFileManager为一类,但即使是一个简单的函数或宏可以做...)

接口:

// NSFileManager+Paths.h 

#import <Foundation/Foundation.h> 

@interface NSFileManager (Paths) 

+ (NSString*)applicationSupportDirectory; 

@end 

执行:

// NSFileManager+Paths.m 

#import "NSFileManager+Paths.h" 

@implementation NSFileManager (Paths) 

+ (NSString*)applicationSupportDirectory 
{ 
    NSError *error; 
    return [[[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error] path]; 
} 

@end 

很简单,呵呵?


提示:请各位看看下面的修复 2个评论这个回答一个更优雅的解决方案。

+0

这里有一个问题,那就是你完全正确:这将返回到应用程序支持目录的路径。当你被沙箱化时,这不是什么大问题,但是当你没有时,将随机文件直接存入〜/ Library/Application Support是不礼貌的。您应该在Application Support中创建一个目录并返回该目录的路径。最好在这里执行,而不是在代码中的任何地方,您需要在应用程序支持中访问文件夹中的某些内容。 – 2013-02-12 06:46:35

+1

@PeterHosey是的,你说得对。而这正是我最终做的:附加一个固定路径组件(我的bundle id:'[[NSBundle mainBundle] bundleIdentifier]')。希望我们这样安全...... – 2013-02-12 06:48:49