如何在 iPhone 和另一台计算机之间同步应用程序数据?
Posted
技术标签:
【中文标题】如何在 iPhone 和另一台计算机之间同步应用程序数据?【英文标题】:How do I sync application data between an iPhone and another computer? 【发布时间】:2008-10-09 02:13:07 【问题描述】:我正在开发一个 iPhone 应用程序,该应用程序允许查看和编辑我希望与桌面应用程序保持同步的数据。我在 SDK 中看不到任何直接处理数据同步的内容,也找不到任何可以让我“挂钩”到 iTunes 同步过程的内容。
我可以做一些笨拙的事情,比如将数据隐藏在照片或地址簿条目中,但这似乎是个坏主意。我可以使用 WebDAV 或 HTTP 来获取/发送数据到服务器,但这会使应用程序更加复杂。
我想我希望这会成为 iPhone 应用程序的常见用例(在桌面和 iPhone 之间同步任意应用程序数据),并且 SDK 中会有一组 API 涵盖这一点。也许有,我就是找不到。
【问题讨论】:
【参考方案1】:两种流行的方法是:
直接通过 WiFi 与桌面应用同步(使用 Bonjour 等来发现 iPhone/桌面应用端点,正如其他人在此处建议的那样)。
另一种选择是与共享文件位置同步 - FTP、MobileMe、WebDAV、另一台服务器上的网络服务等。因此 iPhone 和桌面应用程序将读取/写入共享位置,以便对方可以看到更新。
正如其他人所说,目前没有 Apple 提供的方法(使用 iTunes 或其他方式),也没有迹象表明在不久的将来会发生类似的事情,除非它与 iPhone 未来对第三方的支持捆绑在一起推送更新。 (我真的怀疑会是这样,但你永远不知道。)
【讨论】:
【参考方案2】:看看:
http://sourceforge.net/projects/syncdocs/
【讨论】:
看起来不错。我希望有人会推出类似的东西,而不是为每个推出的应用重新发明***。【参考方案3】:我自己没有尝试过,但我认为Bonjour 提供了与其他机器上的服务连接的能力,你可能会找到一些答案
【讨论】:
【参考方案4】:这是一个常见问题,但遗憾的是 SDK 没有解决。
由于 iPhone 支持 Bonjour 服务发布和发现,您可以轻松地在手机上发布服务并在桌面上监听,找到时连接。 (或者您可以在桌面上发布服务并从手机连接,无论哪种方式都没有关系。)Bonjour for MacO OS X 上的所有文档都适用于 iPhone 操作系统。
请注意,Bonjour 只是宣传一项服务;一旦你找到它,你仍然必须使用套接字来连接和传输数据。
基本上,没有简单的方法可以做到这一点,但是有足够的工具可以让用户轻松地进行同步体验。
【讨论】:
【参考方案5】:Bonjour Sync 的示例: http://cocoa-nut.de/?p=27
【讨论】:
【参考方案6】:只是为了更新这个答案 - 自提出问题以来,Apple 已添加对将文件同步到 iTunes 的支持(并允许用户通过 iTunes 的“应用程序”选项卡访问它们)。
为此,您必须在应用程序的 Info.plist 文件中将 UIFileSharingEnabled 键设置为 YES。然后,您可以使用标准文件 IO API 将文件保存到应用的 Documents 目录中。
这里有更多信息:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StandardBehaviors/StandardBehaviors.html#//apple_ref/doc/uid/TP40007072-CH4-SW6
这包括您应该实现的行为(即确保您还支持阅读添加到您的 Documents 目录中的文档 - 尽管我见过很多不这样做的应用程序)。
【讨论】:
是的,iOS 5 还支持 iCloud。如果您的应用程序使用核心数据,那么实现可以通过 iPhone 应用程序、桌面应用程序访问的云存储将相对简单或网络应用程序。【参考方案7】:我还在开发一个需要共享数据的应用程序,我发现获取信息进出 iPhone 的唯一合理/非黑客方式是通过 NSURLConnection。
(个人意见)我不认为 Apple 会为同步过程提供挂钩。(/个人意见)
【讨论】:
以上是关于如何在 iPhone 和另一台计算机之间同步应用程序数据?的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 RFCOMM 蓝牙协议在 iOS 设备和另一台设备之间共享数据吗?
如何在一台机器上使用资源(.txt 文件)和另一台机器上的脚本在 ssh 上运行 shell 脚本?
如何在 Ruby 和另一种语言之间共享文本文件(或互斥体/信号量)?