Objective c 在iOS应用程序之间同步数据的好解决方案是什么?

Objective c 在iOS应用程序之间同步数据的好解决方案是什么?,objective-c,ios,core-data,data-synchronization,Objective C,Ios,Core Data,Data Synchronization,我正在开发一个应用程序,它的数据管理是通过核心数据实现的,我正在研究如何实现一个功能,以便在两个不同的设备之间(甚至最终在iDevices和Mac之间)同步数据 到目前为止,我还没有发现任何有趣或有用的东西,所以我请求您提供一个好的起点、指南或模型。你有没有意识到这样的事情 更新 我已经开始悬赏这个问题了。在iOS上,同步可能是一项困难的任务,但是,现在有很多应用程序提供了设备到设备的同步功能。我的问题是:他们是如何做到这一点的?最好的方法是什么?有哪些不同的解决方案 更新2 这个问题现在肯定已

我正在开发一个应用程序,它的数据管理是通过核心数据实现的,我正在研究如何实现一个功能,以便在两个不同的设备之间(甚至最终在iDevices和Mac之间)同步数据

到目前为止,我还没有发现任何有趣或有用的东西,所以我请求您提供一个好的起点、指南或模型。你有没有意识到这样的事情

更新 我已经开始悬赏这个问题了。在iOS上,同步可能是一项困难的任务,但是,现在有很多应用程序提供了设备到设备的同步功能。我的问题是:他们是如何做到这一点的?最好的方法是什么?有哪些不同的解决方案

更新2
这个问题现在肯定已经过时了,因为iCloud已经在一年前发布了。我想让它保持活力,因为它可以提供关于设备间移动数据同步的有趣见解。

同步数据是出了名的棘手。简单化的解决方案比没有解决方案更糟糕

关于这件事的好的精神指导,去看看他们即将推出的云同步功能在做什么。我希望他们能发布一个同步API,开发者可以通过它来实现同步服务。但是,即使他们自己保持沉默,他们也很好地展示了真正完成任务所需要的那种自我反省。

“Couchbase for iOS”可能会满足您的需要

根据自述文件:

跨设备提供数据并提供云计算 备份用户数据。不同于其他 云解决方案,数据托管在 该设备由Couchbase Mobile提供,因此 即使网络已关闭或速度较慢 (飞机、地铁、后院) 应用程序对用户做出响应

What this means for you:

You can embed the rock solid distributed database, Mobile
Couchbase,在您的iOS设备上。 您的iOS应用程序可以使用ApacheCouchDB经过验证的同步 技术
如果您我将从开始,看看这是否满足您的需要。原则上,它可以让你在所有苹果设备和服务之间同步

如果你想自己做,这可以是一个很好的,但很有挑战性的练习。我不知道有哪一个第三方框架能够促进苹果公司的“iDevices”之间的P2P连接,下面的框架除外。如果你不想重新发明轮子,你可以沿着这些路线做一些研究。我的回答基于我通过应用服务器实现同步服务的(很少)经验——原则必须与P2P方法大致相同

第一步是设计一个同步数据的协议。您可能需要自己回答的问题:

  • 我需要了解什么
  • 我希望同步核心数据模型的哪一部分?我是否应该更改当前模型以便于同步
  • 我将使用什么序列化/反序列化机制
  • 我如何能够跨多个设备唯一地标识实体
  • 我将如何版本我的数据?我如何知道哪些实体需要同步
  • 我是否需要能够还原同步操作
  • 我将如何跟踪同步进度以及如何处理失败和异常情况?我将如何通知用户这些信息
  • 我更喜欢“增量”(部分模型)还是“全局”(一次同步整个模型)
  • 用户需要多久在设备之间同步一次
  • 是否有任何安全考虑?我需要加密吗
  • 等等
这仅仅是表面现象。在前进的过程中,你肯定会发现更多的事情需要考虑

接下来,确定设备之间的连接方式。您似乎更喜欢无线解决方案,即P2P解决方案。为此,我将从以下工具开始:

  • (此框架具有用于通过蓝牙在设备之间建立连接的API)
  • Bonjour(苹果网络设备发现协议-参见)+BSD套接字
根据前面讨论的设计决策,选择您觉得最合适的工具。我帮不了你,因为我对他们两个都没有经验。正如莫斐斯所说:

我只能带你去开门。你是 必须穿过它的那个

对不起,小幽默:)

最后,决定一个实现同步机制的解决方案。例如,您可以选择客户机-服务器模式(一个设备将侦听连接,另一个设备将启动连接)

更相关的文件:


我希望这能为您提供一条开始之路。

现在有很多应用程序都有“设备间同步”功能。我只是想知道他们是怎么做到的。《事情》的作者可能会找到一个更好的解决方案,但他们怎么知道呢?我想他只是警告你,从所有关于“云”的传言中,你可能会发现一个更高层次的复杂性。它就像日期和时间编程一样,乍一看很简单,但当你试图自定义的时候,它会变得异常复杂。我不期望有特别的复杂程度。我认为同步是一项困难的任务,即使从哲学上讲:)我不是在寻找一个简单的解决方案。我正在寻找一个解决方案。顺便说一句,我不想同步“在云中”(目前)。我只想在设备之间同步。稍后,我将考虑云、雨等。设备之间具有“同步”功能的应用程序通常要么是简单的数据传输,要么是暴力-在你开始寻找解决方案之前,有很多问题需要询问和回答。Tris显然很有希望。。。但我将不得不将我现有的核心数据数据库迁移到这个新数据库,这有点可怕……Couchbase的问题是,它提供了一种“在云中”同步数据的方法,而不是直接在设备之间同步数据的p2p方法…@ma
What this means for you:

You can embed the rock solid distributed database, Mobile