2012-10-18 6 views
7

Ich baue eine interne iOS-Anwendung (also wird es nie im App Store sein), und ich muss ein Verzeichnis von Inhalten zwischen einem Server und jedem der synchronisiert halten die Instanzen der iOS-Anwendung. Dies wäre einfach genug, wenn ich diesen Inhalt jedes Mal löschen und erneut herunterladen möchte, aber ich würde eher etwas ähnliches wie rsync verwenden, um nur die Elemente herunterzuladen, die sich geändert haben.Verzeichnis der Dateien zwischen Server und iOS-Anwendung synchronisieren

Ich habe keine gute Möglichkeit gefunden, rsync zu verwenden. Ich erwog, hier Objective-Git als Möglichkeit zu betrachten, aber auf den ersten Blick sah es so aus, als würde es immer noch eine Menge Unterstützung für Remote-Repositories geben, die noch nicht unterstützt wird.

Als letzte Anmerkung, während dies nicht im App Store sein wird, werde ich nicht Jailbreak diese Geräte und ich würde lieber nicht auf private APIs verlassen (obwohl, wenn es eine elegante Lösung war, die private APIs verwendet Ich könnte darüber nachdenken).

Gedanken?

ZUSÄTZLICHE ANMERKUNG: Dies muss eine isolierte Lösung sein. Ich werde mich nicht auf externe Dienste verlassen (wie Dropbox, Box.net, etc ...). Dies muss nur zwischen dem Gerät und dem Server (der sich in einem lokalen Netzwerk mit dem Gerät befindet) funktionieren.

+0

Ich schätze das Feedback, aber um ehrlich zu sein, Ihre Antwort trifft hier nicht wirklich zu. HTTP + REST ist keine Lösung - es ist nur eine Möglichkeit, eine Lösung zu implementieren. Um ehrlich zu sein - sowohl Rsync als auch Objective-Git würden das Problem perfekt lösen, wenn sie nur dann vollständig funktionsfähig wären, wenn sie für iOS kompiliert würden. Beide haben derzeit Einschränkungen, die dies verhindern. Es gibt viele mögliche Lösungen, von denen einige HTTP verwenden und andere nicht. Am Ende geht es mir vor allem darum, etwas zu finden, das funktioniert. – dtuckernet

+0

In diesem Fall verwende ich die Unternehmensverteilung. Sie können mehr darüber hier erfahren: https://developer.apple.com/programs/ios/enterprise/ – dtuckernet

+0

Überprüfen Sie dies, http://StackOverflow.com/Questions/10774924/rsync-directories-vs-files – iDev

Antwort

3

Verwenden Sie HTTP, um den Inhalt jedes Ordners auf dem Server aufzulisten. Vergleichen Sie den Zeitpunkt der letzten Änderung jeder Datei mit denen auf dem Gerät und identifizieren Sie die hinzugefügten/entfernten Dateien. Erhalten Sie hinzugefügte und geänderte Dateien, entfernen Sie gelöschte Dateien.

+0

Ich schätze die Hinweise auf den Ansatz, aber das ist nicht wirklich eine Lösung (nur ein generischer Ansatz). Viele Lösungen haben "Änderungsupdates" in das eine oder andere implementiert - und es ist sinnvoll, eines davon zu verwenden, anstatt es von Grund auf neu zu schreiben. – dtuckernet

0

Warum nicht einfach eine RESTful-Schnittstelle einrichten und dies über HTTP tun; Auf diese Weise können Sie die Änderungszeitpunkte leicht abfragen, um festzustellen, ob Client- oder Serverdateien aktualisiert werden müssen. Sie können auch verfolgen, welche Dateien auf dem Client synchronisiert wurden, damit Sie leicht wissen, welche Dateien hinzugefügt oder gelöscht werden sollen. Dies kann mit einer einfachen .sync-Datei oder mit einem plist/sqlite/etc. erfolgen.

+0

HTTP enthält bereits alle Informationen zum Synchronisieren eines Verzeichnisses. Es ist kein eigener REST-Dienst erforderlich. – miho

0

Wenn Sie über FTP nachdenken, gibt es einige ziemlich fortgeschrittene Client-Bibliotheken. Die iOS Chilkat bundle enthält beispielsweise eine FTP-Client-Bibliothek, die die Synchronisierung in beide Richtungen unterstützt. Es ist nicht kostenlos, aber es ist ziemlich billig - und Sie erhalten eine Menge anderer Sachen, die wahrscheinlich eines Tages nützlich sein werden. Hier ist ein Beispiel für iOS alle Ergänzungen nach unten ziehen und Änderungen (Modus 2):

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

Eine Einschränkung - allein aus dem Beispiel zu urteilen, ist es nicht Löschungen zu synchronisieren erscheint. Wenn dies eine Voraussetzung ist, können Sie dies nach einer Synchronisierung ohne viel Aufwand selbst tun.

1

Es klingt, als ob Sie vielleicht nach einer Bibliothek fragen, die das schon tut, aber wenn Sie keine finden, ist es offensichtlich mäßig einfach, dies von Grund auf mit stat (2) auf dem Server zu schreiben oder ein höheres Äquivalent auf den iOS-Geräten. Lassen Sie das iPhone einen Baum von Dateien mit ihrem Änderungsdatum an den Server senden und erhalten Sie eine Liste von Einfüge-/Lösch-/Aktualisierungsvorgängen, die Sie mit der URL (oder was auch immer) für jede einzelne durchführen, so dass Sie sie inkrementell auf einem Hintergrund-Thread ausführen können. Haben die Informationen vom Server für neue/aktualisierte Dateien das Mod-Datum, das der Server hat, so können Sie es auf dem iOS-Gerät gleich einstellen und senden, wenn Sie den Server nach dem Status jeder Datei fragen (Art des Hacks mit das Dateisystem, um das zu speichern, aber es funktioniert).

+0

dtuckernet machte es ziemlich klar, dass er nach bestehenden Lösungen suchte, aber das Kopfgeld ging an einen anderen generischen Ansatz. – slypete

0

acrosync (siehe https://acrosync.com/library.html) scheint eine gute Passform angesichts der ersten Frage, aber ich habe es selbst noch nicht verwendet.

+0

Hat jemand das versucht ??? Es sieht vielversprechend aus, aber ich habe Angst vor der Implementierung und möglichen Einschränkungen ... –

Verwandte Themen