Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 允许的应用程序文件位置-带或不带沙盒_Macos_Cocoa_Sandbox - Fatal编程技术网

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
  • 我想知道是否有任何系统功能(例如,
    nshomeditory()
    )指向我可以写入的安全位置(OS X版本应该无关紧要)

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

      那么,如果我们只需要访问应用程序支持目录(如果它不存在,则创建它),不管我们是在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]
      )。希望这样我们就安全了。。。