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

2023-11-21

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

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

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

根据文档:

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

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

2. 共享钥匙串访问

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

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

我还发现这个仓库这显然使得处理钥匙串变得更容易:

3. 自定义粘贴板

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

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

以上文档摘自这个帖子

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


我希望获得有关在应用程序之间共享这些类型文件的最佳实践的任何信息。我认为这里省略了很多其他解决方案,因此如果有更好的替代方案,我希望提供一些相关信息。如果发生这种情况,我在这里列出的解决方案之一是解决此问题的好方法,我很想了解更多有关您与他们合作的经验的信息,以及我对他们的担忧是否有效,或者无需担心。

提前谢谢。一如既往,写得好的答案会获得投票;)


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

请参阅“与您的包含应用程序共享数据"

另请参阅“将应用程序添加到应用程序组":

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Xcode 错误 - 架构 x86_64 的未定义符号?

    我正在运行 Swift 4 和 Xcode 9 beta 我收到此错误 但我不知道如何解决它 我什至不知道这是什么意思 Undefined symbols for architecture x86 64 T0So22AVCapturePho
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • 将自定义图像设置为 UIBarButtonItem 但它不显示任何图像

    我想将自定义图像设置为 UIBarButtonItem 但它只显示周围的矩形框并且不显示实际图像 func setupBrowserToolbar let browser UIToolbar frame CGRect x 0 y 20 wi
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • Swift:如何减少 didupdatelocations 调用

    我想出了一些代码来打印我所在位置的地址和邮政编码 这是在 didupdatelocation 函数中完成的 我遇到的唯一问题是 didupdatelocation 函数每秒都会更新该地址 因为这电池效率非常低 所以我一直在寻找使用间隔的方法
  • 检测 AVAudioPlayer 中的播放结束

    我有几个短的 mp3 声音 我将它们存储在数组中 并希望连续播放它们 有什么方法可以检测 AVAudioPlayer 何时停止播放 以便我可以调用完成处理程序并播放下一个声音 我知道有一个委托 但我正在使用 Playground 和 SKS
  • 在真实设备上展示测试广告

    这是我的代码 let request GADRequest request testDevices kGADSimulatorID XXXX2F32d69CCA859FFB559D0FEA3CF6483D08A6 adView load r
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 列表不符合 Encodable

    因此 我正在使用领域 并且两个模型之间有以下关系 A unit has many tests Unit model class Unit Object Decodable objc dynamic var id String let tes
  • 如何自动缩放mapView以显示叠加层

    我可以在 mapView 上绘制多边形 但是我需要找到多边形并手动缩放它 有没有办法自动执行此过程 例如调整中心多边形 我浏览过互联网并阅读了一些相关文章 其中大多数都是基于折线和点的 任何形式的帮助将不胜感激 因为我正在寻找解决方案一段时
  • 无法将“SDWebImageActivityIndi​​cator”类型的值分配给“ST_SDWebImageIndicator”类型?

    I have multiple flavours targets in my Xcode project I am also using SDWebImage in my app Everything was working fine un
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • 如何快速更改按钮图像?

    我正在开发一个有按钮的应用程序 该按钮没有文本 图像或背景 所以我想做的就是在viewDidLoad函数中给它一个图像 这就是我所拥有的 IBOutlet var tapButton UIButton override func viewD
  • 我们可以从 LinkPresentation 框架中的 LPLinkView 中提取图像吗?

    我想在我的应用程序中呈现丰富的链接 并将这些数据发送到我的服务器 我需要访问视图内的图像LPLinkView https developer apple com documentation linkpresentation lplinkvi
  • Swift getnameinfo IPv6 结果不可靠

    我有以下扩展sockaddr extension sockaddr Indicates if this is an IPv4 address var isIPv4 Bool return sa family UInt8 AF INET In
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self

随机推荐

  • 未标记 AcceptVerbs、HttpGet 或 HttpPost 的控制器操作的默认行为是什么?

    如果我创建一个控制器操作并且不使用它来装饰它AcceptVerbs HttpPost or HttpGet 默认行为是什么 该操作是否允许任何访问方法或默认为GET 它可以通过任何动词访问
  • java中equals方法的实现

    这是我对 Coor 类的 equals 类的实现 它只包含 2 个整数 x 和 y 这是实现该方法的正确方法吗 public boolean equals Object obj if obj null obj getClass this g
  • Python3 Tkinter 字体不工作

    我将 python 3 3 与 tkinter 一起使用 并且安装了 python3 tk 包 在大多数文档中 使用旧的 import tkFont 它不再起作用 这应该有效 from tkinter import font appHigh
  • C++ 中的虚拟网络摄像头

    我想编写一个新的虚拟网络摄像头驱动程序 例如它将采用 AVI 或实时流作为屏幕并将其作为网络摄像头源进行流式传输 我真的不会有网络摄像头 我想添加一个可以传输桌面屏幕的虚拟网络摄像头 我应该在内核模式下编写一个网络摄像头来做到这一点 如果是
  • 遍历并修改dict结构的树状列表

    我有一个如下所示的结构 id 4 children None id 2 children id 1 children id 6 children None id 5 children None id 7 children id 3 chil
  • 拳击会导致性能问题吗?

    我正在开发一个项目 其中我们正在生成一种编译为 java 的语言 我们使用的框架 xtext 在其生成的代码中大量使用了装箱 具体来说 如果您有如下声明 int i 1 int j 2 int k i j 然后编译后的代码如下所示 Inte
  • ESLint:创建下一个应用程序时选项无效

    我正在创建一个新的 Next js 应用程序 当我跑步时yarn create next app我开始在 Visual Studio Code 中编写 javascript 代码 每次我输入数字时 ESlint 扩展都会返回一个错误 当然
  • 如何在 Grails 中更新外部配置文件而不重建 war 文件

    如何更新外部配置文件 例如 config ex groovy config ex properties 而不在 Grails 中重建 war 文件 重新启动应用程序服务器将应用外部配置文件中的新更新 如果我理解得很好的话 你想在战争之外外部
  • 反向 Java Graphics2D 缩放和旋转坐标

    我使用Java中的Graphics2D来缩放和旋转我绘制的图片 我现在希望能够在单击图片中的某个点时知道原始坐标是什么 因此 鉴于旋转和缩放的坐标 我想计算原始坐标 有没有一种简单的方法可以做到这一点 如果您保留一份副本AffineTran
  • Python 中 module.__init__() 最多接受 2 个参数错误

    我有 3 个文件 factory imagenet py imdb py 和 imagenet py factory imagenet py 有 import datasets imagenet 它还有一个函数调用为 datasets im
  • maven命令中-D表示什么?

    谁能解释一下 D 在 maven 命令中表示什么 mvn clean install DskipTests 您定义了一个可由Maven 插件 or 在 pom 内部使用 gt mvn help usage mvn options Optio
  • 为什么 `cat <(cat)` 会产生 EIO?

    我有一个程序可以同时读取两个输入文件 我想让这个程序从标准输入读取 我想我会用这样的东西 program1 lt cat lt program2 但我刚刚发现 cat lt cat produces mmap2 NULL 139264 PR
  • 通过 Heroku 上托管的 Rails 上传和解压缩文件到 S3?

    我希望能够将包含许多图像的 zip 文件上传到我的 Rails 应用程序 然后我希望 Rails 解压该文件并将其中的图像附加到我的照片模型中回形针 以便它们最终存储在我的 Amazon S3 帐户中 通过 Paperclip 配置 我想在
  • 从 Twitter 抓取用户位置

    我正在尝试从 Twitter 中获取用户名的纬度和经度 用户名列表是一个 csv 文件 一个输入文件中包含 50 多个名称 以下是我迄今为止所做的两次尝试 他们似乎都没有工作 欢迎对任何一个程序进行更正或采用全新的方法 我有清单User n
  • CoWaitForMultipleHandles API 的行为与文档不符

    这是由另一个问题我正在看着 阅读起来可能会有点长 请耐心等待 显然 CoWaitForMultipleHandles does not按照 MSDN 上记录的方式进行操作 下面的代码 基于原始问题 是一个控制台应用程序 它使用测试 Win3
  • Spring Boot RSocketRequester 处理服务器重启

    我有一个关于 Springs RSocketRequester 的问题 我有一个 rsocket 服务器和客户端 客户端连接到该服务器并请求 MessageMapping端点 它按预期工作 但是如果我重新启动服务器怎么办 如何从客户端自动重
  • 保持 GPS 服务正常运行并优化电池寿命

    我必须构建一个应用程序 其中 GPS 跟踪器运行大约一天 我知道 SO 中有类似的问题 但我还没有找到一些问题的答案 我需要每 10 分钟修复一次 GPS 所以我认为最好的方法是启动定位服务 进行修复 或超时 并停止服务 使用removeU
  • iOS (iPad) 上的 iframe 内容裁剪问题

    我正在寻找correct确保在 ipad iOS5 上的 iframe 中滚动后动态显示的内容可见的方法 哦 Iframe 和 iPad 你真是个了不起的老栗子 我知道 iPad 将 iframe 扩展到其内容的整个高度 几乎就像使用 HT
  • 使用 AFNetworking 2.0 上传图像

    我不明白为什么这这么难 网上所有的教程和文章似乎都在谈论 1 0 api 这是相当无用的 我尝试了几种不同的方法并得到了不同的结果 我究竟做错了什么 上传任务 这似乎没有使用多部分表单 wtf NSMutableURLRequest req
  • 在 Swift/iOS 中的应用程序之间共享文件数据[重复]

    这个问题在这里已经有答案了 我一直在研究如何在应用程序之间安全地共享数据 在我深入研究使用错误方法的实现之前 我想获得一些有关处理此问题的正确方法的信息 仅仅因为你可以做某事并不一定意味着你应该做某事 用户案例 我正在开发一套语言学习应用程