【问题标题】:What happens to previous app installs when running an app on a device from Xcode?从 Xcode 在设备上运行应用程序时,以前的应用程序安装会发生什么情况?
【发布时间】:2018-07-26 09:43:53
【问题描述】:

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

【问题讨论】:

    标签: ios xcode debugging


    【解决方案1】:

    这是预期的行为。从 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,则操作系统会在您之前使用时直接映射。

    【讨论】:

    • 感谢您的回复。我了解每次运行应用程序时沙盒都会发生变化,并且我使用您引用的代码来确定 Documents 目录的路径。我想知道的是,当我停止应用程序并再次运行它时,我之前创建的数据会发生什么?从 Xcode 运行我的应用程序是否会导致应用程序的前一个实例被卸载,从而删除前一个沙箱中的“旧”数据?我假设是这种情况,否则,如果我运行应用程序足够多,我可能会填满似乎不会发生的文件系统。
    • 如果您从 Xcode 覆盖应用程序,旧数据仍然存在,您可以访问它。如果您从设备或模拟器中卸载应用程序,然后从 Xcode 安装应用程序,则数据将被擦除。因为你卸载了应用程序。
    • Xcode 重命名目录,以便保留现有数据并且不会占用额外的磁盘空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多