ios - 更新应用程序后,iOS 上的本地文件会发生什么情况?
问题描述
我的 iOS 应用程序正在将本地文件写入:
/var/mobile/Containers/Data/Application/A.../Library/a.txt
当我的应用更新时,它会获得一个新的应用容器 ID 和文件夹:
/var/mobile/Containers/Data/Application/B...
我写到容器 ID A 的所有文件会发生什么?
是否有一个“更新挂钩”可以让我将所有“A”容器文件复制到路径“B”?
新版本的应用程序(B)可以读取旧版本的文件(A)吗?
是否有关于更新期间文件系统发生的情况的任何文档?
安装 B 后是否可以从容器 A 中恢复文件?
解决方案
当您更新应用程序时,通过在 .plist 文件中更改其版本号,iOS 会为该应用程序创建一个具有不同十六进制名称的新目录,并将所有文件复制到新目录中。现在,如果您使用绝对路径从目录中获取文件的详细信息,那么这些路径将不正确,您将无法获取文件详细信息。
我刚刚在模拟器中试过这个。我创建了一个如下函数,它将返回文档目录路径 url
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentsDirectory = paths[0]
return documentsDirectory
}
当版本号为 1.0 时,我从应用程序委托中的 didFinishLaunchingWithOptions 调用此函数,并返回以下路径:
file:///Users/BhargavRathod/Library/Developer/CoreSimulator/Devices/3082611F-BCCA-4D17-B390-E0EF4CA454DA/data/Containers/Data/Application/72759097-38F3-4292-825E-1D2343219973/Documents/
当我将版本号更新为 1.1 时,它向我返回了新路径:
file:///Users/BhargavRathod/Library/Developer/CoreSimulator/Devices/3082611F-BCCA-4D17-B390-E0EF4CA454DA/data/Containers/Data/Application/72DC31E9-C32F-42CC-8449-F1946ADB1018/Documents/
因此,如果您使用绝对路径从文档目录访问任何文件,那么这不是一个好习惯。您可以只保存文件名(或文档目录之后的相对路径),每当需要访问该文件名时,然后获取文件名并将其附加到文档目录路径之后并访问该文件。
我希望这会对你有所帮助。
推荐阅读
- c++ - 比较 JSON::Value 变量中的数据,然后更新到文件
- delphi - 具有合并功能的组合和排列
- sharepoint - mailto:从项目中提取电子邮件地址
- mysql - 是否可以在没有两个子查询的情况下进行更短的查询
- c# - 如何忽略实体框架查询的条件?
- php - .htaccess 文件被 cPanel 覆盖并破坏站点
- c# - 使用 Async Await 会避免线程耗尽吗?
- sql-server - 在 SQL Server Management Studio 中使用 BULK INSERT 出现“传输级错误”
- visual-studio-code - 是否有用于从选定或剪贴板代码创建新文件的 VS Code 快捷方式?
- python-3.x - pandas.read_csv 仅在一列中返回不可读的文本