Macos 允许的应用程序文件位置-带或不带沙盒
好的,我的问题很简单,但我肯定找不到一个简单的答案。所以,如果你能帮忙,我会很高兴的 我想要什么:Macos 允许的应用程序文件位置-带或不带沙盒,macos,cocoa,sandbox,Macos,Cocoa,Sandbox,好的,我的问题很简单,但我肯定找不到一个简单的答案。所以,如果你能帮忙,我会很高兴的 我想要什么: // NSFileManager+Paths.h #import <Foundation/Foundation.h> @interface NSFileManager (Paths) + (NSString*)applicationSupportDirectory; @end // NSFileManager+Paths.m #import "NSFileManager+P
// 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
一个我的应用程序可以自由写入一些数据的地方(10.6版-没有沙盒-或10.7版及更高版本,有沙盒)
简单地说:
// 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
- 我想知道是否有任何系统功能(例如,
)指向我可以写入的安全位置(OS X版本应该无关紧要)nshomeditory()
- 好的,我在这里,回答我自己的问题
那么,如果我们只需要访问应用程序支持目录(如果它不存在,则创建它),不管我们是在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条注释,以获得更优雅的解决方案。这里有一个问题,您完全正确:这将返回到应用程序支持目录的路径。当您使用沙盒时,这并不是什么大问题,但当您不使用沙盒时,将随机文件直接存放到~/Library/Application Support中是不礼貌的。您应该在应用程序支持中创建一个目录,并返回该目录的路径。在这里这样做比在代码中需要访问“应用程序支持”文件夹中某个内容的任何地方都要好。@PeterHosey是的,你说得对。这正是我最终要做的:附加一个固定路径组件(我的bundle id:
[[NSBundle mainBundle]bundleIdentifier]
)。希望这样我们就安全了。。。