2011-05-19 208 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