ios - 当应用程序更新时,iOS 上的本地文件会发生什么变化?

标签 ios

我的 iOS 应用正在将本地文件写入:

/var/mobile/Containers/Data/Application/A.../Library/a.txt

当我的应用程序更新时,它会获得一个新的应用程序容器 ID 和文件夹:

/var/mobile/Containers/Data/Application/B...

我写入容器 ID A 的所有文件会怎样?

是否有“更新 Hook ”允许我将所有“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 时,我从应用程序委托(delegate)中的 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/

因此,如果您使用绝对路径访问文档目录中的任何文件,那么这不是一个好习惯。您可以只保存文件名(或文档目录后的相对路径),每当需要访问该文件名时,然后获取文件名并将其附加在文档目录路径后并访问该文件。

希望对您有所帮助。

关于ios - 当应用程序更新时,iOS 上的本地文件会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56199373/

相关文章:

ios - 如果 UIInterfaceOrientation 横向值相同,我应该如何确定横向 View 的方向?

ios - 如何修复 UICollectionViewFlowLayout Transition 未将样式应用于单元格?

ios - 你能在后台线程上用它自己的上下文预热着色器吗?

ios - 如何在 self.dismiss block 中推送 UIViewController?

ios - 类似于 Whatsapp 的已读状态的双复选标记

ios - Label 和 NSTimer 阴影设计

ios - UIPageViewController 与不同的 ViewControllers,正确的方式?

ios - 如何在 Lottie iOS 中使用 png 图像?

ios - 为什么 xcode 4.3 无法存档我的应​​用程序?

ios - 在 iOS 7 上集成 PushWoosh 未订阅 pushwoosh