我爲此使用了一個簡單的網站。我在網站上有一個版本號(或日期)的文本文件。我的代碼只是下載文件,用數據庫中的版本字段檢查版本或日期。如果它較新,它會激活下載按鈕。
下載按鈕下載一個壓縮文件(不必是郵編),把它們提取出來並與新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
正如我上面顯示,我只是使用一個Web服務器和留在我的網站的更新文件。
我認爲最好有自己的網絡服務器。你可以在互聯網上買到便宜的。你可以使用免費的,但你必須考慮速度,帶寬,可用性等
你可以使用校驗和來驗證文件的完整性。爲了確保文件是正確的,你可以做像檢查文件大小,內容等檢查。在我的情況下,我沒有做任何事情,因爲我已經硬編碼的文件URL。這取決於你的數據有多敏感。我的感覺很像公共事物。
爲了確保只有您的應用程序請求的數據,你可以使用一些簡單的身份驗證。也許讓應用程序使用用戶名和/或密碼/散列進行發佈請求,並讓Web服務器檢查它們即可。我會在服務器中使用一個小型的PHP文件,因爲大多數便宜的虛擬主機提供商都支持php。我會在Web服務器的PHP文件中硬編碼用戶名和密碼/散列。如果你真的很認真,你可能想看看諸如非對稱密碼學之類的認證機制。
這是一個很難的部分。即使您在應用程序中對下載網址進行了硬編碼,人們仍然可以通過更改DNS或執行各種操作,使虛假網絡服務器發送文件/數據。在一天結束的時候,你只會讓事情變得更難闖入,而不是100%安全。
請查看:http://themainthread.com/blog/2014/03/replacing-a-core-data-store.html –