有没有一种方法可以强制ios系统清除部分(或全部)应用程序的缓存?

时间:2019-09-03 17:45:34

标签: ios nsurlsession nsfilemanager file-management nsurlsessiondatatask

我的应用程序正在下载一些支持数据并将其保存到“ Library / Caches”目录中。根据{{​​3}},

  

使用此目录来编写您的应用可以轻松重新创建的所有特定于应用的支持文件。您的应用通常负责管理该目录的内容,并根据需要添加和删除文件。   在iOS 2.2及更高版本中,iTunes或iCloud不会备份此目录的内容。此外,在完全恢复设备期间,系统会删除此目录中的文件。   在iOS 5.0及更高版本中,当系统磁盘空间非常低时,系统可能会删除Caches目录。运行应用程序时永远不会发生这种情况。但是,请注意,从备份还原并不一定是删除Caches目录的唯一条件。

因此,系统可能会清理此文件夹。我的应用程序的支持数据并不重要,因此无需将其放在“文档”或其他地方。但是我想检查一下“缓存”文件夹是否会突然清除。

当然,我可以使用NSFileManager检查文件是否存在..并使用文件或重新下载。但是这里存在一个窍门。 我的应用程序可以在后台从服务器下载一些文件。下载文件时,它存储在“ Caches / com.apple.nsurlsessiond / [APP_ID]”中,无法检查文件是否存在(因为此步骤中SDK完全管理了文件)。我将这种情况的错误处理添加到NSURLSession委托中,现在需要在“现实生活”中进行检查。

有没有办法直接或间接强制系统清除所有应用程序的“缓存”目录?

2 个答案:

答案 0 :(得分:0)

您可以通过

从“缓存”文件夹中删除所有文件。
    func removeNetworkCache() {
        let cachePath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0])
        let appId = Bundle.main.infoDictionary!["CFBundleIdentifier"] as! String

            do {
                let content = try FileManager.default.contentsOfDirectory(atPath: cachePath)
                for file in content{
                    let fullPath = "\(cachePath)/\(appId)/\(file)"
                    try FileManager.default.removeItem(atPath: fullPath)
                }
            } catch {
               print("ERROR DESCRIPTION: \(error)")
            }
    }

答案 1 :(得分:0)

您可以按照“通常的方式”进行操作,然后直接卸载应用程序,或者使用以下终端命令:xcrun simctl uninstall booted Your.app(如果您在相应的模拟器上运行)。