从Xcode在设备上运行应用程序时,以前的应用程序安装会发生什么?

时间:2018-02-15 15:18:53

标签: ios xcode debugging

我对iOS开发有些新意,我确信这可能是一个基本问题,但我一直想知道每次在Xcode的物理设备上运行应用程序时会发生什么。假设我的应用程序拍照并将其保存到Documents目录中。我第一次运行应用程序时,我拍了一张照片并将其作为JPEG保存到Documents目录中。保存文件的路径是:

/var/mobile/Containers/Data/Application/86D12E64-92BA-405D-98C7-E2C3502DE39C/Documents/picture.jpg

现在我在我的应用程序中发现了一个错误,所以我将其从Xcode中删除。我修复了错误并再次运行应用程序。我重复上面的步骤,这次我将图片保存到Documents目录,路径是:

/var/mobile/Containers/Data/Application/4A85B3CF-C578-4733-8AEC-19DEFA3796DE/Documents/picture.jpg

根据我的理解,/ Application /和/ Documents之间的路径部分代表“app id”,因此每次从Xcode运行应用程序时,这似乎都会发生变化,这并不奇怪。但是,之前我从Xcode运行应用程序时,设备文件系统上的数据会发生什么变化? Xcode是否卸载以前的应用程序安装并有效地从文件系统中删除该目录?感谢您解释可能是一个愚蠢的问题!

1 个答案:

答案 0 :(得分:0)

这是预期的行为。 iOS 8以后,出于安全原因,每次重新启动应用时,应用程序沙箱的URL都会更改。因此,您永远不应该存储目录的绝对URL。您应该每次都使用File API访问路径,如下所示:

let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL: URL = directoryURL.appendingPathComponent("picture.jpg")

每次启动(虚拟)都会更改实际的URL,但如果您使用API​​,则在以前使用时,OS会直接映射。