在iOS上的多个应用程序共享数据

我知道在这方面有不less线索,但似乎没有一个会满足我正在寻找的东西。 这是我的约束:

  • 而不是使用私有API /框架或无证的目录访问的黑客,因为这会导致应用被拒绝的风险
  • 能够跨不同的供应商/应用程序开发人员共享数据
  • 数据可以在应用程序的生命周期之外保存(即使在删除应用程序之后)

更新:我一般都试图远离使用第三方基于云的服务来实现目标,因为这会引入额外的外部依赖。 但是,如果我必须,我希望能够满足这个约束

  • 能够告诉哪个iOS设备与之通信。 它不应该唯一标识这个设备(我们都会遇到这个设备将进入那个邪恶的UDID讨论路线)。 但只要它可以区分不同的iOS设备应该没问题。

也许这篇由TextExpander作者撰写的博客文章将有助于:

Smile已经和WWDC的苹果工程师讨论了这个问题,提交了一个bug(#14168862),并检查了这个bug的状态。 我们还开发了一个解决方法,将TextExpander数据存储在一个新的地方。 提醒要求用户同意存储和检索数据。 完成的提醒通常不会在其界面中显示。 已完成提醒的底部会显示已久的提醒。

TextExpander touch 2.1(及更高版本)支持将共享代码片段数据存储在一个完整的提醒中。 我们制作了一个更新的SDK,并且让我们的开发人员公布了进度。 我们的最终SDK在苹果官方iOS 7发布结束的几个小时内就准备好了。

更新(22.11.2013)这可能不是最好的方法,因为TextExpander的团队最近在应用程序审查团队中遇到了问题 。

我也需要这个。 我使用Parse.com作为所有应用程序的后端 – 他们的免费套餐应该满足您的开发需求。

Parse的API可用于iOS,Android,Windows 8,OS X,JavaScript和.NET,所有数据都可以在任何平台(与Core Data和iCloud相反)上的云中使用。 他们还提供可以远程执行的代码“Cloud Code”,以便远程处理信息并将数据返回给您的应用程序。

你一定要检查Parse.com为您的应用程序的云存储。 根据我的经验,这确实完成了工作。

对于数据持久性,我想你可能想看一下FMDB (虽然如果你决定在本地保存数据,它会被你的应用程序删除,但它可能会帮助你)。 核心数据在许多情况下是一个矫枉过正的问题。

编辑: Parse.com有一个“安装”类,其中安装了你的应用程序的所有设备都被列出来(无论它们运行的​​是iOS还是Android),而不必input任何代码。

编辑:这只适用于具有相同供应商的应用程序。

您可以将密码保存到设备的钥匙串,然后从任何应用程序访问该密码。

使用SSKeychain库…

NSString *service = @"com.yourcompany.yourservice"; // read NSString *password = [SSKeychain passwordForService:service account:@"user"]; // write [SSKeychain setPassword:password forService:service account:@"user"]; 

密码string没有长度限制 ,所以将所有数据编码为一个string并保存在那里。 用户删除应用程序后,钥匙串条目将保留。

其中一种方法是使用THRIFT。 这是一个需要后台服务器(私有)的数据通信协议,THRIFT可以编译成多种语言/平台。 有一个元语言来描述数据,然后可以被节俭编译成多种语言。 一次写入数据定义,可以在很多平台上使用。

更多信息在。

http://thrift.apache.org/

对我来说(我有2个应用程序和一个窗口)最好的解决scheme是使用SSKeyChain ,不要忘记为你的应用程序添加Capabilities ,像这里

或者如果您不想使用第三方库,则可以使用NSUserDefaults并像这里一样设置组标识符,但是不要忘记在所有具有共享数据的应用程序的AppGroups部分的Capabilities中添加组标识符。