2011-06-01 74 views
12

我們有一個應用程序目前在應用程序商店。它使用核心數據作爲其持久性機制。我們準備好了一個新版本,並且它有一些模式更改。具體而言,我們添加了1個新實體併爲現有實體添加了新屬性。從我的理解和閱讀來看,這是可能發生的最簡單的遷移之一。沒有字段刪除,也沒有要更改的關係。數據模型由5個實體組成,根本沒有關係。如何使用App Store測試核心數據遷移?

我們對數據模型進行了版本化,並創建了一個.xcmappingmodel來處理遷移。我們通過添加下列選項來創建PersistentStoreCoordinator處理遷移:

  1. 刪除所有測試:

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil]; 
    

    目前,我們已經使用以下過程中的團隊的幾名成員成功測試從設備和iTunes版本的應用程序

  2. 轉到應用商店並下載最新版本
  3. 對應用程序進行一些更改,證明遷移成功
  4. 將新的二進制(具有相同的包標識符簽名)到iTunes和同步
  5. 負載設備上的新的版本,驗證在以前的版本進行的更改仍然存在,並且該應用程序不崩潰

我的問題是這樣的: 有沒有更簡單/更好的方法來測試這個?我們擔心的是,一旦應用程序出門,就沒有其他方法可以確保我們的用戶獲得儘可能最好的體驗。

回答

5

我一直在使用Core Data作爲我的應用程序,升級了大約7次,從舊型號遷移到新型號。

每當我準備發佈下一個版本時,我總是使用Model Mapping來測試遷移。只要我將源模型的所有實體和屬性都作爲目標模型的實體和屬性,我就沒有經歷過任何問題。

使用自己的項目文件進行測試與測試發佈到客戶的測試相同,因此您不必擔心將舊模型遷移到新模型的測試是否有效。

換句話說,您的項目包的目標將被存檔和提交,與客戶下載的目標相同。

我非常自信,這是事實,因爲我已經完成了對不同版本的應用程序的測試,沒有任何問題。

+0

謝謝。我以爲是這樣。我只是想確保我們以正確的方式開展工作。 – 2011-06-01 13:44:13

+0

我很高興它有幫助 – petershine 2011-06-02 03:50:57

2

是的。

我希望你在源代碼管理系統中管理你的源代碼。如果沒有,儘快開始。 Xcode 4提供了內置的git,如果你沒有其他的,就使用那個。

如果您有舊的源代碼,請保留兩個不同的目錄,1.0版本(現在在商店中)和1.1版本。如果您可以操縱模擬器中會影響的數據,那就很理想。

你存儲的核心數據在應用程序文件,它現在就像/Users/bshirley/Library/Application\ Support/iPhone\ Simulator/4.3.2/Applications/6D18BD0E-70C1-41FB-9BE8-F736CAAA9FFC/Documents/MyApp.sqlite地方

您可以複製出來的目錄,將其添加爲新的應用程序資源,並執行轉換每次你新鮮安裝在SIM /設備上。您可以使用舊格式的任何新版本來測試不同的數據集。

+0

自從第1天起,我們一直在使用源代碼控制。我熟悉實際的db文件的位置以及我可以抓住它的位置。很多時候,我必須加載數據庫(使用base.app)以確保進行了更改,或者正確編寫了值。但是這種方法是否讓我們對應用商店中的當前版本進行有效的測試?此外,這種方法是否適合beta測試人員也能夠爲我們測試升級? – 2011-06-01 03:47:06

+0

就應用商店版本而言,這絕對是不錯的選擇。您不需要下載該版本 - 運行相同的版本,無論是SIM還是設備都可以。您必須確定哪些可能的測試用例,瞭解您的模型,您應該運行自動遷移來覆蓋您的基礎。就Beta測試人員而言,他們通常只會得到一次自動升級測試。要求他們刪除,下載,重建和再次升級可能不合需要。 – bshirley 2011-06-01 04:01:37

+0

正如你所提到的,你的遷移似乎很少,沒有太多應該影響它。我認爲最大的問題是處理對新屬性/實體的空引用。 – bshirley 2011-06-01 04:07:54