2012-11-18 47 views
3

我已經發布了我的應用程序的1.0版本。 1.1版可能會包含某種遷移代碼。爲了說明起見,我們假設它會更新核心數據屬性 - 所有姓氏將被轉換爲大寫。我將在版本1.1中首次啓動時執行此代碼。如何應用多個應用更新?

我是否需要爲所有後續版本保留此代碼?如果用戶跳過1.0並且僅在1.2發佈時更新,那麼是否會自動應用1.1?或者我需要不斷檢查是否要永久更新所有版本中的姓氏?

回答

2

您不會發布更新,而是發佈新版本。如果有人從1.0更新到1.2並跳過1.1,那完全是這樣。 1.1將永遠不會被安裝或執行。

編輯:

這裏是一個非常簡單的方法來管理更新的建議。可能不是最優秀的,但它的工作原理。

NSString *lastVersion = [[NSUserDefaults standardUserDefaults] 
         stringForKey:@"LastVersion"]; 
NSString *currentVersion = [[NSBundle mainBundle] 
      objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 

if ([self version:lastVersion isSmallerThanVersion:@"1.1"]) { 
    // update from 1.0 to 1.1 here. 
} 
if ([self version:lastVersion isSmallerThanVersion:@"1.2"]) { 
    // update from 1.1 to 1.2 here. 
} 
if ([self version:lastVersion isSmallerThanVersion:@"1.3"]) { 
    // update from 1.2 to 1.3 here. 
} 

[[NSUserDefaults standardUserDefaults] 
    setObject:currentVersion forKey:@"LastVersion"]; 

在這個例子中你有4個版本(1.0,1.1,1.2,1.3)和1.3是最新版本。

您可以在每次啓動應用時運行此操作。由於更新應用程序也會終止它,因此可以假設這將在可能的更新後運行。

基本上你從用戶默認加載用戶在此設備上使用的最後一個版本。如果應用程序有史以來第一次啓動,則不會有已知的先前版本,也不會執行任何更新例程,並且當前版本(1.3)將保存爲上次使用的版本。

如果該應用程序與以前的版本(1.2)一起使用,則lastVersion將爲1.2,並且僅執行最後一個if塊。

如果應用程序用1.1版所使用的,但是跳過1.2,並更新至1.3,lastVersion將是1.1和最後兩個if塊被順序執行。所以首先你將數據從1.1更新到1.2,然後從1.2更新到1.3。

+0

感謝 - 所以版本500年到10年有假設用戶可以從任何版本1..499進行升級,並處理所有已知的核數據狀態在那時已經存在? –

+1

非常好,是的。但這並不困難。對於每個新版本,您只需實施一個更新程序。看我編輯。 – DrummerB

2

您應該保留遷移代碼適用於所有版本> 1.0