2013-02-11 71 views
1

我一直在爲iPad開發企業分佈式應用程序約一年。當時我們已經發布了5個生產版本,從未遇到過任何問題。每當我們的用戶在舊版本上安裝新版本時,我們的核心數據遷移一直運行良好。直到我們將視頻錄製添加到應用程序。將應用程序更新到最新版本後文件不再可讀

我們一直在覈心數據外部管理數據類型中存儲'媒體'。直到我們開始允許用戶創建大型視頻時,這一切都運行良好。於是我們發現核心數據遷移垃圾超過〜5mb的任何文件。此時我們推出了自己的文件管理方案。這個結果非常好,我們自己寫了我們自己的文件從Core Data手動遷移到我們自己的方案中。這是發佈沒有問題。

那麼,當推出我們的下一組功能時,突然出現一個問題。從Xcode構建時從來沒有任何問題......但是,在使用企業部署重新部署之後,寫入到以前版本中的文件系統的任何文件都突然無法讀取。如果設備插入XCode,則文件在管理器中清晰可見。但NSFileManager/NSFileHandle/NSData找不到這些文件。他們總是報告說,他們經歷:

error: { 
    NSFilePath = "/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5"; 
    NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be completed. No such file or directory\""; 
} 

就像我說的,我可以驗證該文件並不實際存在於使用Xcode組織者路徑。任何幫助將不勝感激。整天試圖弄清楚這件事,我一直把頭從桌子上撥開。

用於讀取看起來像代碼:

NSError *err = nil; 
NSData *data = [[NSData alloc] initWithContentsOfFile:self.thumbnail_url 
               options:NSDataReadingMappedIfSafe 
               error:&err]; 
if (err != nil) logger(@"error: %@",[err userInfo]); 

而寫:

NSError *error = nil; 
[thumbnail_ep_managed writeToFile:filePath options:NSDataWritingAtomic error:&error]; 
if(error != nil) 
{ 
    NSLog(@"error writing file to path: %@\nerror: %@",filePath,[[error userInfo]description]); 
} 

我很爲難

+0

如何驗證企業部署設備上的文件是否存在? – Mundi 2013-02-11 22:47:29

+0

我已經在Xcode Organizer中的應用程序菜單下說過,您可以檢查您擁有代碼簽名的應用程序包。 – 2013-02-18 21:15:48

回答

0

,我發現了一些打手的幫助下,解決方案在SomethingAwful。問題在於我存儲了完整路徑,如包含文檔目錄。這是iOS設備上的錯誤。您無法保證在升級後,捆綁包路徑仍然相同。

在升級應用程序時,有時會更改捆綁標識符(即安裝該應用程序的目錄的名稱)(這是散列)。因此,如果存儲完整路徑,並且升級可能會使存儲路徑煞車。解決方案是隻保留一個相對路徑,從文檔目錄開始。

然後,當您啓動應用程序時,緩存文檔目錄,並附加您的持久相對路徑。

所以從我原來的路徑:

/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5 

這部分可以改變:

3CFB07B3-D17F-45D7-A233-4E56930D794C 

所以我只能存儲:

ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5 

,抓住:

/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ 

部分應用程序啓動。

瞧,文件繼續工作。 :)

相關問題