8

I am building an internal iOS application (so - it won't ever be in the app store), and I need to keep a directory of content synchronized between a server and each of the instances of the iOS application. This would be easy enough if I just wanted to delete and re-download this content each time, but I would rather use something similar to rsync to only download the elements that have changed.

I haven't found any good way to utilize rsync. I considered looking at Objective-Git as a possibility here, but at a quick glance it looked like there is still a lot of the support for remote repositories that isn't supported yet.

As a final note, while this won't be in the app store, I will not be jailbreaking these devices and I would prefer to not rely on any private API's (although if there was an elegant solution that utilized private API's I might consider it).

Thoughts?

ADDITIONAL NOTE: This needs to be an isolated solution. I won't be relying on outside services (like Dropbox, Box.net, etc...). This needs to work solely between the device and the server (which is on a local network with the device).

4

5 回答 5

3

使用 HTTP 列出服务器上每个文件夹的内容。将每个文件的最后修改时间与设备上的比较,并识别添加/删除的文件。获取添加和修改的文件,删除已删除的文件。

于 2012-10-22T10:20:22.863 回答
1

听起来您可能正在要求一个已经这样做的库,但是如果您没有找到一个库,那么使用服务器上的 stat(2) 和相同或更高版本从头开始编写它显然是相当容易的- iOS 设备上的等效级别。让 iPhone 将带有修改日期的文件树发送到服务器,并返回一个插入/删除/更新操作列表,以处理每个文件的 url(或其他),以便您可以在后台线程上逐步执行它们。让来自服务器的新/更新文件的信息包括服务器具有的 mod 日期,以便您可以在 iOS 设备上将其设置为相同,并在向服务器询问每个文件的状态时发送该日期(使用文件系统来存储它,但它可以工作)。

于 2012-10-28T00:01:51.293 回答
0

为什么不直接设置一个 RESTful 接口并通过 HTTP 来做呢?这样您就可以轻松地查询修改时间以确定是否需要更新客户端或服务器文件。您可能还想跟踪客户端上的哪些文件已同步,以便您可以轻松知道要添加或删除哪些文件。这可以通过一个简单的 .sync 文件或使用 plist / sqlite / 等来完成。

于 2012-10-25T20:11:43.030 回答
0

如果您考虑使用 FTP,可以使用一些非常先进的客户端库。

例如,iOS Chilkat 包包含一个支持双向同步的 FTP 客户端库。它不是免费的,但很便宜——而且你会得到一大堆其他东西,这些东西有一天可能会被证明是有用的。这是一个 iOS 拉下所有添加和更改的示例(模式 2):

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

一个警告 - 仅从示例来看,它似乎没有同步删除。如果这是一项要求,您可以在同步后立即自行完成,而无需付出太多努力。

于 2012-10-27T05:34:25.687 回答
0

考虑到最初的问题, acrosync(请参阅https://acrosync.com/library.html)似乎很合适,但是我自己还没有使用它。

于 2015-02-24T14:23:59.533 回答