有没有办法在 iOS 中的应用程序安装和卸载之间保留应用程序数据

Posted

技术标签:

【中文标题】有没有办法在 iOS 中的应用程序安装和卸载之间保留应用程序数据【英文标题】:Is there a way to persist application data between application installs and uninstalls in iOS 【发布时间】:2012-04-13 09:09:17 【问题描述】:

我正在开发一个需要在启动时执行昂贵计算的应用程序。因此,应用程序第一次运行时,应用程序会进行计算并将结果存储在文件中。

如果用户决定卸载应用程序并稍后重新安装,则必须再次进行计算,我希望避免重新计算。请注意,我不是在谈论应用程序的更新,而是在谈论卸载/重新安装。

我想知道是否有一种方法可以保留仅对我的应用程序可访问但可以在卸载后继续存在的数据。

解决方案可以在设备内部(使用文件/首选项/...)或基于服务器。例如,一种可能的解决方案是将设备 ID 与结果一起发送到服务器并将其存储在那里,但由于设备 ID 在 ios 5 中已被弃用,因此不再是有效的解决方案。

感谢您的回答。

詹姆

【问题讨论】:

【参考方案1】:

你没有说有多少数据,但以下是选项:

iCloud 钥匙扣 Dropbox

唯一的“通用”选项是钥匙串,所有设备都将拥有并且无法禁用,尽管您受限于可以使用的空间量。

就我个人而言,我什么也不做。如果用户删除应用程序,我认为在重新安装时必须重新计算内容是公平的游戏。

【讨论】:

什么都不做是许多人忘记的有效选择。仅仅因为你什么都不做并不意味着你没有考虑过这个问题,它只是意味着没有什么是解决你所面临问题的最佳或最可行的解决方案。我喜欢不建议任何解决方案。非常节省时间。 UIPasteboard,可以替代 感谢您的回答。我同意你的观点,什么都不做是一个有效的选择,在很多情况下甚至是最好的,我在我的问题中没有写的是计算的成本也可以是经济的,所以必须计算两次初始数据是两次钱贵【参考方案2】:

迄今为止,我实现这一目标的方法是使用钥匙串。基本上任何符合 NSCoding 的东西都可以存储在钥匙串中。即使仅从“良好的个人实践”的角度来看,谨慎使用钥匙串也是一个好主意。毕竟,一旦它在钥匙串中,它就在那里,直到您专门删除它,并且大概只有您的应用程序会知道用于访问您存储的数据的密钥。

可以在 Keith Harrison 的 Use Your Loaf 博客 here 上找到实现将数据结构存储到钥匙串中的东西的一个非常好的起点。

总之,这是我所知道的唯一一种透明的方法,可以保证卸载后数据的持久性。其他选项,例如 3rd 方存储库 (Dropbox) 或 iCloud,确实依赖于一定程度的用户参与。

【讨论】:

谢谢,我去看看你推荐的博客。【参考方案3】:

请记住,Apple 希望这样:删除应用程序意味着删除此应用程序的所有数据。我更喜欢 iCloud 来保存少量数据。

【讨论】:

【参考方案4】:

让用户连接到他们的 DropBox 帐户,您就可以在那里保存数据 - 他们的 API 使用起来非常简单,您不必担心 Apple 将来会如何决定实施数据持久性。

【讨论】:

谢谢,我看到的唯一问题是我的应用程序的功能取决于用户在 Dropbox 上拥有帐户这一事实,不是吗?【参考方案5】:

除了钥匙串和 iCloud 之外的一个选项是 Apple 的 UIPasteboard。 Here 是类引用。有些人认为它不可靠,所以这取决于数据保留对您来说有多重要,我猜。

【讨论】:

以上是关于有没有办法在 iOS 中的应用程序安装和卸载之间保留应用程序数据的主要内容,如果未能解决你的问题,请参考以下文章

iOS 钥匙串中的项目能否在应用程序卸载和重新安装后继续存在?

ubuntu使用snap安装及卸载phpstorm

有没有办法在 iOS 和 WatchOS 应用之间共享 Firebase Auth 登录?

有没有办法通过 iOS/swift 中的蓝牙以编程方式连接 android 和 IOS 设备?

iOS-安装卸载brew的方法

iOS重新安装应用程序不清除徽章