gpt4 book ai didi

macos - 如何在沙箱中使用硬编码文件路径名

转载 作者:行者123 更新时间:2023-12-03 17:20:51 25 4
gpt4 key购买 nike

好的,是的,我现在知道您不能在沙箱中使用硬编码路径。到目前为止我还没有接触过沙箱,所以我从来没有遇到过它。

我有一个 Coredata 应用程序 (Mac OSx),并且使用了默认保存代码和默认路径位置 (user/...../applicationsupport/... 粗略地说,这在沙箱中是 Not Acceptable 。

如果不需要用户每次启动程序时都手动打开数据文件,是否有其他方法可以处理这个问题?

如果有任何意见/建议,我将不胜感激。

谢谢你

最佳答案

沙盒并不意味着没有用户选择就无法访问文件和文件夹。正如 App Sandbox in Depth article 中所说您仍然可以访问容器目录。

为了获取 Application Support 目录的路径,无论是否使用沙盒,都应该使用相同的代码。

+ (NSString *)executableName
{
NSString *executableName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleExecutable"];
if(!executableName || executableName.length==0)
return nil;
return executableName;
}

- (NSString *)findOrCreateDirectory:(NSSearchPathDirectory)searchPathDirectory
inDomain:(NSSearchPathDomainMask)domainMask
appendPathComponent:(NSString *)appendComponent
error:(NSError **)errorOut
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(searchPathDirectory,domainMask,YES);
if ([paths count]==0)
return nil;
NSString *resolvedPath = [paths objectAtIndex:0];
if (appendComponent)
resolvedPath = [resolvedPath stringByAppendingPathComponent:appendComponent];
NSError *error;
BOOL success = [self createDirectoryAtPath:resolvedPath withIntermediateDirectories:YES attributes:nil error:&error];
if (!success)
{
if (errorOut)
*errorOut = error;
return nil;
}
return resolvedPath;
}

- (NSString *)applicationSupportDirectory
{
NSError *error;
NSString *result = [self findOrCreateDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask
appendPathComponent:[self executableName] error:&error];
if (error)
return nil;
return result;
}

关于macos - 如何在沙箱中使用硬编码文件路径名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28205089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com