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

Posted

技术标签:

【中文标题】在 Swift/iOS 中的应用程序之间共享文件数据 [重复]【英文标题】:Sharing File Data Between Applications in Swift/iOS [duplicate] 【发布时间】:2016-02-09 18:05:43 【问题描述】:

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

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

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

根据documentation:

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

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

2。共享钥匙串访问

允许您将数据安全地存储到共享钥匙串中,作为应用程序套件的一部分的其他应用程序可以访问该钥匙串。所有共享钥匙串访问权限的应用程序都必须使用相同的应用程序 ID 前缀。有关共享钥匙串访问的示例。

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

我还发现this repo 显然使处理钥匙串更容易:

3.自定义粘贴板

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

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

以上文档来自this post

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


如果能提供有关在应用之间共享这些类型文件的最佳做法的信息,我将不胜感激。我假设我在这里省略了很多其他解决方案,所以如果有更好的选择,我会喜欢它的一些信息。如果发生这种情况,我在此处列出的解决方案之一是解决此问题的好方法.

提前谢谢。与往常一样,写得好的答案会获得高票;)

【问题讨论】:

引用的帖子完美。谢谢,抱歉重复了。 【参考方案1】:

我认为最好的方法是通过设置应用组来实现数据共享。这是 Apple 推荐的用于在应用程序和扩展程序之间共享数据的解决方案,我相信它通常适用于在应用程序之间共享数据。

参见“Sharing Data with Your Containing App”部分

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

【讨论】:

以上是关于在 Swift/iOS 中的应用程序之间共享文件数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

查找目录中的文件数

如何计算每个目录中的文件数?

如何将字节从 Swift (iOS) 传递到 Kotlin 通用模块?

如何使用 python 以编程方式计算存档中的文件数

如何使用 Python 计算目录中的文件数

使用聚合查找最新批次中的文件数