我要發佈我的應用程序的新版本。以前的版本使用了一些在較新版本中更改並需要處理的文件。我希望在用戶更新應用程序時自動刪除舊文件,否則應用程序會看到它們並處理它們(由於文件格式發生變化而導致錯誤)。 有沒有這樣的選擇?是否發佈新版本的應用程序刪除舊版本的文件?
謝謝。
我要發佈我的應用程序的新版本。以前的版本使用了一些在較新版本中更改並需要處理的文件。我希望在用戶更新應用程序時自動刪除舊文件,否則應用程序會看到它們並處理它們(由於文件格式發生變化而導致錯誤)。 有沒有這樣的選擇?是否發佈新版本的應用程序刪除舊版本的文件?
謝謝。
由於您正在處理這些文件,因此一種選擇是以某種方式將格式版本放入文件或文件夾路徑中。將該版本烘焙成應用中的一個常量。
應用程序可以通過將常量追加到獲取這些文件的路徑中,或者查看文件的數據以獲取格式版本並正確處理它(刪除,重新下載等)。 )。
另一個好處是,如果您發佈您的應用程序並且格式版本不會更改(可能 - 您只是修復了錯誤),則不必刪除並重新下載這些文件。您也不必更改任何內容或更新任何例程 - 只是不要更改文件格式常量,也不會更改文件。如果您更改文件的格式,請更新該常量並且它可以正常工作。
我喜歡這種方法,但我傾向於將數據版本作爲變量放在數據文件本身中,這樣我只需要搜索一個文件名。 – TigerCoding
@Javy:使用應用程序版本的缺點是您的版本總是在變化 - 只有在文件格式版本發生變化時纔會重新下載,而不是應用程序版本。 – bryanmac
我不關注。版本保持不變(捆綁版本)。在啓動時進行檢查以確保版本相同,如果不一致,則在運行主應用程序之前,它會轉到例程以處理數據的更新。例程(方法)在代碼的更新版本中編碼,並知道如何處理版本更改(重新下載,轉換現有的等)。或者我錯過了你的觀點? – TigerCoding
請參考我的問題的答案。 Points to note for Future upgrade of App without new install in iPhone?
我也在尋找這個答案,並找到了答案。它只替換應用程序文件。但我們的文檔文件夾沒有被取代我們所有的數據將保持按照我們的邏輯。
它總是一個很好的做法,從代碼中的包讓你的應用程序的版本,並根據需要進行必要的修改:
NSString* versionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
然後,你可以比較這串(或浮動字符串的版本)來確定對數據所做的更改。您可能會刪除舊數據(如您的情況),或者提取一些舊數據並創建新數據(通常的方式),或者應用程序可能根本不需要任何更改。
需要注意的是,您可能會上傳/發佈應用程序的多個版本,並且某些用戶可能沒有下載更新的版本。因此,最好有方法根據版本字符串更新數據,而不是期望它成爲數據的最後一個版本。
使用appVersion的缺點是appVersion的變化比您的文件格式發生變化(例如錯誤修復)。這會導致用戶在修復二進制錯誤時不必要地重新下載文件。兩者不同,不需要耦合。 – bryanmac
但是如果這是一個簡單的錯誤修復,代碼可以告訴它不要下載。如果(版本== 2.02)//不下載/更改數據,則只更新數據版本號 – TigerCoding
您不應該確定數據是否需要根據附加數據(如版本和構建大型開關塊)進行更新。讓數據定義它是否需要更新。如果數據具有文件格式版本(或按照文件格式版本存儲在路徑中),那麼這就是事實,以及是否需要更新。 – bryanmac
我也想指出,算法基本上是這樣的:1)如果文件不存在,請下載它們2)處理文件。問題是我無法替換舊文件,因爲我需要從互聯網上下載它們。那麼我該如何繼續? –