2013-05-13 73 views
3

,我們正在開發一個應用程序使用包含在應用程序包的二進制文件。如何檢測iOS應用程序已被重新安裝(在Xcode)或升級(從蘋果商店裏)

由於此文件需要處理,並在某些情況下,重新編寫,應用程序將此文件複製到庫/ Application Support目錄在第一次發射,或當它在應用程序支持失蹤。然後,應用程序每次啓動時都會從應用程序支持中加載此文件並使用其中包含的數據。

隨着應用程序支持目錄在每一個應用程序被保留安裝/升級,我們需要刪除該目錄下的上述二進制文件的應用程序安裝或升級的時候,爲了要重新複製它從應用程序包確保二進制文件結構與最新版本的應用程序兼容。

我們需要做的是,在以下兩種情況下: - 在發展過程中,我們每次重建和XCode的 安裝的應用程序 - 一旦活,每次用戶升級從AppStore的應用程序

有什麼方法來檢測該應用程序已安裝或設備上重新安裝?

回答

5

的(可能)的清潔,確保更新使用您的Info.plist文件變量的方法,如rmaddy說但這並不能解決精確地知道它是否需要或過度殺傷的問題。

我誠實地不知道蘋果是否會讓它通過自己的驗證,但你也許可以存儲並檢查可執行文件的最後修改日期。如果比特定日期早,則更新。這似乎有點複雜,有這樣一個粗版本控制機制。你不能在你的二進制文件中包含一個版本號嗎?

要檢查日期:

NSString *exePath = [[NSBundle mainBundle] executablePath]; 
NSDictionary *exeAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:exePath error:nil]; 
NSString *lastModDate = [exeAttrs objectForKey:@"NSFileModificationDate"]; 
+0

非常感謝。我認爲克魯格的解決方案對我來說更好。我們不希望添加新的參數,在plist中,因爲在每一個有意義的重建,我們必須記住,即使在發展去改變它。使用krug的解決方案,我們可以將lastModDate存儲在用戶默認值中,並檢查它是否等於每次應用啓動時的可執行修改時間。如果它們不同,我們可以從應用程序支持目錄中刪除二進制文件,並從主包中重新複製。非常感謝 – Gianluca 2013-05-13 18:05:30

1

一種通用的方法是在你的Info.plist了「集結號」。每次構建時(或者每次二進制文件更改並需要再次處理時),都需要更新此編號。

然後,當應用程序啓動時,它讀取來自Info.plist的這個號碼。該應用程序還獲取它在NSUserDefaults中存儲的最後一個已知值。如果從Info.plist的數量較新(或沒有價值但在NSUserDefaults),那麼你知道你必須處理的文件。然後將最新的號碼存儲在NSUserDefaults。這將確保下次運行應用程序時,不會再次處理該文件(除非是新構建或更新)。

+0

不會爲我:應用程序版本號由詹金斯自動遞增,但每一個現在,然後我需要安裝一個手動創建的版本。內部版本號會更少(默認爲1),或者與上次安裝的版本相同。否則,我會推薦這種方法。 – JOM 2013-09-10 11:31:33

0

執行應用商店大小寫的最簡單方法是將應用程序版本存儲在NSUserDefaults中,當應用程序版本不等於保存在NSUserDefaults中的值時,您知道需要重新複製該文件。

對於情況下,從Xcode的安裝時,你可以使用類似下面的

#ifdef DEBUG 
    // Force the file to be recopied 
#else 
    // Check if the app version changed before recopying the file 
#endif 
相關問題