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
Cocoa Mac应用商店-can';不要保存文件_Cocoa_Nsbundle_Mac App Store_Writetofile - Fatal编程技术网

Cocoa Mac应用商店-can';不要保存文件

Cocoa Mac应用商店-can';不要保存文件,cocoa,nsbundle,mac-app-store,writetofile,Cocoa,Nsbundle,Mac App Store,Writetofile,在Mac app Store上分发应用程序时,在保存文件方面是否有任何限制 如果我从我的电脑上编译并运行我的应用程序,它可以正常工作-它会保存配置 但是,通过Mac App Store下载的版本未保存配置。我甚至没有看到配置文件。有人知道发生了什么吗 这是保存配置的代码: -(void)saveConfig:(id)plist { NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingString

在Mac app Store上分发应用程序时,在保存文件方面是否有任何限制

如果我从我的电脑上编译并运行我的应用程序,它可以正常工作-它会保存配置

但是,通过Mac App Store下载的版本未保存配置。我甚至没有看到配置文件。有人知道发生了什么吗

这是保存配置的代码:

-(void)saveConfig:(id)plist {

    NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingString: CONFIG_FILE_NAME];

    NSData *xmlData;
    NSString *error;

    xmlData = [NSPropertyListSerialization dataFromPropertyList: plist
        format: NSPropertyListXMLFormat_v1_0
        errorDescription: &error];
    if(xmlData)
    {
        if (![xmlData writeToFile:path atomically:YES])
            NSLog(@"Failed to write the config file onto the hard drive");
    }
    else
    {
        NSLog(error);
    }
}

通常,您应该假定应用程序的资产是只读的。这在总体上是正确的,不仅仅是应用商店


如果要将用户设置保存为属性列表,请使用
NSUserDefaults
,而不是修改应用程序中的文件。这将“做正确的事情”,即将首选项保存到
~/Library/preferences

如果您的目标是Mac应用商店,则无法将文件写入应用程序包目录。捆绑包应该是不可变的


考虑使用
NSUserDefaults
保存配置,或者,如果确实需要单独的文件,请使用is(~)/Library/Application Support。马特·加拉赫(Matt Gallagher)写了一篇很好的帖子,名为,在这篇文章中,他提供了一个解决方案,该解决方案使用标准的
NSApplicationSupportDirectory
,后跟可执行文件名。

Mac应用商店实际上与此无关。无论发生什么情况,应用程序包都应该是禁止编写的。应用程序包不应该自我修改。@Joshua我同意他们不应该这样做。但是,从技术上讲,可以修改应用程序包,一些非MAS应用程序可以这样做,以便根据启动服务不支持运行时文档类型注册后安装的应用程序插件动态注册文档类型。