2014-04-24 33 views
0

我有一個帶有靜態(用戶不可編輯)的coredata文件的iOS 7應用程序。偶爾需要更新這個文件。如更新地址簿中的食譜或電話號碼中的食譜。iOS更新來自遠程源的核心數據文件

應用程序本身(二進制文件)保持不變。

我從來沒有做過這樣的事情。我正在尋找一個起點(一個指南或谷歌搜索條件)的學習,而不是具體的解決方案。

  1. 我應該使用哪種框架呢?
  2. 我需要自己的網絡服務器嗎?
  3. 如何確保應用程序接收到正確的數據文件?
  4. 同樣,如何確保只有我的應用程序請求數據?
  5. 我該如何處理安全問題?我怎麼知道這是我發送更新?

也許我必須發送通知給應用程序,告訴它從某處下載數據?我應該從應用程序中的服務器地址下載數據嗎?

回答

2

我爲此使用了一個簡單的網站。我在網站上有一個版本號(或日期)的文本文件。我的代碼只是下載文件,用數據庫中的版本字段檢查版本或日期。如果它較新,它會激活下載按鈕。

下載按鈕下載一個壓縮文件(不必是郵編),把它們提取出來並與新onen替換現有的核心數據文件。到目前爲止,它一直沒有任何問題(自2012年以來)。

儘管推薦的方法是逐個刪除核心數據庫中的所有數據,並使用遠程源更新數據,但我正在使用我的方法來簡單地替換核心數據庫的sqlite文件和相關文件。這裏的代碼片段: -

//removing the core data files 

NSString *finalPath = [NSHomeDirectory() 
        stringByAppendingPathComponent:@"Documents/NTTimeTable.sqlite"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 
finalPath = [NSHomeDirectory() 
       stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/NTTimeTable.mom"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 
finalPath = [NSHomeDirectory() 
       stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/NTTimeTable.omo"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 
finalPath = [NSHomeDirectory() 
       stringByAppendingPathComponent:@"Documents/NTTimeTable.momd/VersionInfo.plist"]; 
[[NSFileManager defaultManager] removeItemAtPath:finalPath error:nil]; 


// Unzipping downloaded file 
finalPath = [NSHomeDirectory() 
      stringByAppendingPathComponent:@"Documents"]; 
[SSZipArchive unzipFileAtPath:tempFilePath toDestination:finalPath]; 
[[NSFileManager defaultManager] removeItemAtPath:tempFilePath error:nil];  

讓我知道如果你需要更多的信息。請注意,我已將核心數據庫文件移至Documents目錄,因爲我沒有權限在原始位置進行替換。

Q/A

  1. 正如我上面顯示,我只是使用一個Web服務器和留在我的網站的更新文件。

  2. 我認爲最好有自己的網絡服務器。你可以在互聯網上買到便宜的。你可以使用免費的,但你必須考慮速度,帶寬,可用性等

  3. 你可以使用校驗和來驗證文件的完整性。爲了確保文件是正確的,你可以做像檢查文件大小,內容等檢查。在我的情況下,我沒有做任何事情,因爲我已經硬編碼的文件URL。這取決於你的數據有多敏感。我的感覺很像公共事物。

  4. 爲了確保只有您的應用程序請求的數據,你可以使用一些簡單的身份驗證。也許讓應用程序使用用戶名和/或密碼/散列進行發佈請求,並讓Web服務器檢查它們即可。我會在服務器中使用一個小型的PHP文件,因爲大多數便宜的虛擬主機提供商都支持php。我會在Web服務器的PHP文件中硬編碼用戶名和密碼/散列。如果你真的很認真,你可能想看看諸如非對稱密碼學之類的認證機制。

  5. 這是一個很難的部分。即使您在應用程序中對下載網址進行了硬編碼,人們仍然可以通過更改DNS或執行各種操作,使虛假網絡服務器發送文件/數據。在一天結束的時候,你只會讓事情變得更難闖入,而不是100%安全。

+0

請查看:http://themainthread.com/blog/2014/03/replacing-a-core-data-store.html –