2012-10-18 58 views
7

我正在構建一個內部iOS應用程序(所以 - 它永遠不會在應用程序商店中),並且我需要保持服務器和每個應用程序之間的內容同步目錄iOS應用程序的實例。如果我只是想每次都刪除並重新下載這些內容,這很容易,但我寧願使用類似於rsync的內容來下載已更改的元素。同步服務器和iOS應用程序之間的文件目錄

我還沒有找到任何利用rsync的好方法。我認爲在這裏考慮Objective-Git是一種可能性,但是快速瀏覽一下,看起來仍然有很多對遠程存儲庫的支持尚未得到支持。

作爲最後一點,雖然這不會在應用商店,但我不會越獄這些設備,我寧願不依賴任何私人API(儘管如果有一個優雅的解決方案,利用私有API的我可能會考慮它)。

想法?

補充說明:這需要是一個孤立的解決方案。我不會依賴外部服務(如Dropbox,Box.net等)。這需要在設備和服務器之間獨立工作(與設備在本地網絡上)。

+0

我很欣賞這個反饋,但說實話你的答案在這裏並不適用。 HTTP + REST不是解決方案 - 它只是解決方案可以實現的一種方式。說實話 - 如果rsync和Objective-Git在針對iOS編譯時功能完全正常,它們將完美解決問題。目前都有限制,防止這種情況發生。有很多可能的解決方案 - 有些使用HTTP,有些則不使用。最後,我主要關心的是找到一些可行的方法。 – dtuckernet

+0

在這種情況下,我正在使用企業分佈。你可以在這裏瞭解更多關於它:https://developer.apple.com/programs/ios/enterprise/ – dtuckernet

+0

檢查此,http://stackoverflow.com/questions/10774924/rsync-directories-vs-files – iDev

回答

3

使用HTTP列出服務器上每個文件夾的內容。 比較每個文件的最後修改時間與設備上的修改時間,並確定添加/刪除的文件。 獲取已添加和修改的文件,刪除已刪除的文件。

+0

我很欣賞這種方法的建議,但這不是一個真正的解決方案(只是一種通用的方法)。許多解決方案已在其中一個或另一箇中實施「更新更新」 - 並且如果可能的話,利用其中的一個而不是從頭開始編寫它是有意義的。 – dtuckernet

0

爲什麼不建立一個RESTful接口並通過HTTP來完成;這樣您可以輕鬆地查詢修改時間,以確定是否需要更新客戶端或服務器文件。您可能還想跟蹤客戶端上的哪些文件已同步,因此您可以輕鬆知道要添加或刪除哪些文件。這可以通過一個簡單的.sync文件或使用plist/sqlite /等來完成。

+0

HTTP已經包含了用於同步目錄的所有內容,因此不需要自己的REST服務。 – miho

0

如果您考慮FTP,可以使用一些相當先進的客戶端庫。例如,iOS Chilkat bundle包括支持雙向同步的FTP客戶端庫。它不是免費的,但價格相當便宜 - 而且你會得到大量其他可能會有用的東西。這裏的iOS的拉低所有添加和變更(模式2)的例子:

http://www.example-code.com/ios/ftp_syncLocalTree.asp

一個警告 - 從單純例子來看,它似乎並沒有同步刪除。如果這是一項要求,您可以在同步後立即完成,而不需要太多努力。

1

這聽起來像你可能要求一個已經這樣做的庫,但是如果你沒有找到一個,它顯然適度地很容易從服務器上使用stat(2)從頭開始寫這個或iOS設備上的更高級別等效項。讓iPhone將修改日期的文件樹發送到服務器,並獲取插入/刪除/更新操作列表,以處理每個文件的url(或其他),以便您可以在後臺線程上遞增執行它們。從服務器獲取新/更新文件的信息包括服務器的mod日期,以便您可以在iOS設備上將其設置爲相同,並在向服務器詢問每個文件的狀態時發送該日期(使用某種黑客技術文件系統來存儲,但它的工作原理)。

+0

dtuckernet很清楚他正在尋找現有的解決方案,但賞金去了另一種通用的方法。 – slypete

0

acrosync(見https://acrosync.com/library.html)似乎是一個很好的適合給出最初的問題,但我還沒有使用它自己呢。

+0

有沒有人試過這個?它看起來很有希望,但我害怕實施和可能的警告...... –

相關問題