2011-05-19 197 views
1

当您通过Mac App Store分发应用程序时,是否有任何限制保存文件?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); 
    } 
} 

回答

2

如果您定位到Mac App Store,则无法将文件写入应用程序包目录。该包应该是不可变的。

考虑用NSUserDefaults保存您的配置,或者,如果您确实需要单独的文件,officially recommended location是(〜)/ Library/Application Support。马特加拉格尔写了一篇不错的文章,名为​​3210,其中他提供了一个解决方案,使用标准NSApplicationSupportDirectory后跟可执行文件名称。

+0

谢谢! NSUserDefaults运行良好! – vance 2011-05-19 05:02:31

+0

Mac App Store的确和它无关。无论如何,应用程序包应该被禁止写入。应用程序包不应该自行修改。 – 2011-05-19 13:13:03

+0

@Joshua我同意他们不应该。但是,从技术上讲,可以修改应用程序包,并且一些非MAS应用程序会根据自启动服务不支持运行时文档类型注册后安装的应用程序插件动态注册文档类型。 – 2011-05-19 21:38:42

1

一般来说,你应该假设你的应用程序的资产是只读的。这通常是真实的,而不仅仅是应用商店。

如果要将用户设置另存为属性列表,请使用NSUserDefaults而不是修改应用程序内的文件。这将“只是做正确的事情”,这是为了保存偏好~/Library/Preferences