在Swift / iOS中共享应用程序之间的文件数据

时间:2016-02-09 18:05:44

标签: swift keychain ios-app-extension uipasteboard data-sharing

我一直在研究如何安全地在应用程序之间共享数据。在使用错误的方法深入研究实现之前,我想获得一些正确的处理方法的信息。只是因为你可以做某事并不一定意味着你应该做。

用户案例:我正在开发一套语言学习应用程序,这些应用程序具有包含数百个音频文件的共享音频文件,以及包含与语言相对应的重要数据的json文件。我更愿意允许用户在我们的套件中使用其他应用时不必重新下载语言包。

1。应用扩展程序 - 文档提供程序非UI变体

根据documentation

  

文件提供程序扩展使用打开和移动操作授予对主机应用程序沙箱外部文件的访问权限。此扩展(有时缩短到文件提供程序)还允许主机应用程序下载文件而不显示文档选择器视图控制器。此功能允许主机应用程序使用安全URL书签访问以前打开的文档,即使这些文件不再存储在设备上也是如此。

从表面上看,这似乎是一个非常可靠的解决方案。我主要担心的是最后几行,它表明应用程序可以下载不再存储在设备上的文件。我希望文件存储在设备本地,以防止不断下载。如果文档提供程序确实在本地存储文件并允许组中的各种应用程序访问文件,那么我认为这可行。

2。共享钥匙串访问

  

允许您将数据安全地存储到共享密钥链,以便属于一组应用程序的其他应用程序可以访问。共享密钥链访问权限的所有应用程序必须使用相同的应用程序ID前缀。有关共享密钥链访问的示例。

我看了一下这个文档,我认为这可能是最合适的。我对此解决方案的主要关注是上传的数据是否存在大小限制,以及是否允许使用mp3 / ogg / json文件类型。我在这个解决方案中发现的大多数示例/用途都指向共享字符串和小数据,我不确定它是否会处理像json或音频文件这样的大数据。

我还发现this repo显然更容易处理Keychain:

第3。自定义粘贴板

  

自定义粘贴板最适合在两个应用程序之间半私下共享自定义数据。使用唯一名称标识自定义粘贴板。它们可以将数据保留在创建它们的应用程序之外,允许粘贴板在应用程序终止后甚至在重新启动设备后保留数据。

     

在粘贴板上写入数据或从中读取数据时,必须指定粘贴板类型。粘贴板类型通常使用统一类型标识符(UTI)来标识进入粘贴板并从粘贴板检索的数据类型。有关其他信息,请参阅Apple的UIPasteboard类参考文档。

上述文档来自this post

我对此解决方案的主要关注点可能是它有点像黑客。从逻辑上讲,粘贴板似乎暂时保存数据并允许在应用程序之间共享,而我正在寻找的解决方案需要更多的永久解决方案。

我很感激有关在应用之间共享这些类型文件的最佳做法的任何信息。我假设有很多其他解决方案我在这里省略了,所以如果有更好的选择,我会喜欢它的一些信息。如果它发生了我在这里列出的解决方案之一是一个解决这个问题的好方法我希望有更多关于你与他们合作的经验的信息,如果我对他们的关注是有效的,或者没有什么可担心的。

提前谢谢。一如既往,写得很好的答案得到了投票;)

1 个答案:

答案 0 :(得分:1)

我认为最好的方法是通过设置应用组来启用数据共享。这是Apple建议的应用程序和扩展程序之间共享数据的解决方案,我相信一般情况下应用程序之间共享数据。

请参阅“Sharing Data with Your Containing App

部分

另见“Adding an App to an App Group”:

相关问题