|
@@ -173,3 +173,102 @@ extension AppDelegate {
|
|
TSAppUpdateManager.checkAppConfig()
|
|
TSAppUpdateManager.checkAppConfig()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+import Kingfisher
|
|
|
|
+extension AppDelegate {
|
|
|
|
+
|
|
|
|
+ func handleKingfisher(){
|
|
|
|
+
|
|
|
|
+ moveCacheSmoothly()
|
|
|
|
+
|
|
|
|
+ var diskStorage = ImageCache.default.diskStorage
|
|
|
|
+
|
|
|
|
+ let cache1 = ImageCache(memoryStorage: ImageCache.default.memoryStorage, diskStorage: ImageCache.default.diskStorage)
|
|
|
|
+
|
|
|
|
+ let cache = try! ImageCache(
|
|
|
|
+ name: "longtorage",
|
|
|
|
+ cacheDirectoryURL: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask ).first!
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ cache.diskStorage.config.expiration = .never // 永不过期
|
|
|
|
+ cache.diskStorage.config.sizeLimit = 0 // 无大小限制
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 1. 创建自定义磁盘存储配置
|
|
|
|
+ let diskStorageConfig: DiskStorage.Config = {
|
|
|
|
+ var config = DiskStorage.Config(
|
|
|
|
+ name: "longtorage", // 缓存名称
|
|
|
|
+ sizeLimit: 0, // 不限制大小
|
|
|
|
+ directory: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask ).first!
|
|
|
|
+ )
|
|
|
|
+ return config
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ // 2. 创建内存存储配置
|
|
|
|
+ let memoryStorageConfig: MemoryStorage.Config = {
|
|
|
|
+ var config = MemoryStorage.Config(totalCostLimit: 100 * 1024 * 1024) // 100MB内存限制
|
|
|
|
+ config.countLimit = 50 // 最多缓存50张图片
|
|
|
|
+ config.expiration = .seconds(3600) // 1小时后过期
|
|
|
|
+ return config
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ // 3. 创建自定义ImageCache实例
|
|
|
|
+ let customCache: ImageCache = {
|
|
|
|
+ let diskStorage = try! DiskStorage(config: diskStorageConfig)
|
|
|
|
+ let memoryStorage = MemoryStorage(config: memoryStorageConfig)
|
|
|
|
+
|
|
|
|
+ return ImageCache(
|
|
|
|
+ memoryStorage: memoryStorage,
|
|
|
|
+ diskStorage: diskStorage
|
|
|
|
+ )
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ // 4. 设置为默认缓存
|
|
|
|
+ ImageCache.default = customCache
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ KingfisherManager.shared.cache = cache
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ func moveCacheSmoothly(){
|
|
|
|
+ // 1. 获取旧文件路径的图片
|
|
|
|
+ let fileManager = FileManager.default
|
|
|
|
+ guard let cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else {
|
|
|
|
+ dePrint("Cache Kingfisher 没有缓存,不用迁移")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ let permanent_image_cache = "com.onevcat.Kingfisher.ImageCache.default"
|
|
|
|
+ let srcURL = cachesURL.appendingPathComponent(permanent_image_cache)
|
|
|
|
+ guard fileManager.fileExists(atPath: srcURL.path) else { return }
|
|
|
|
+
|
|
|
|
+ //把srcURL 移动到新的 documentURL
|
|
|
|
+ guard let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
|
|
|
|
+ let dstURL = documentURL.appendingPathComponent(permanent_image_cache)
|
|
|
|
+
|
|
|
|
+ // 4. 处理目标已存在的情况
|
|
|
|
+ if fileManager.fileExists(atPath: dstURL.path) {
|
|
|
|
+ do {
|
|
|
|
+ // 先删除目标文件夹(如果需要合并则改为遍历子文件)
|
|
|
|
+ try fileManager.removeItem(at: dstURL)
|
|
|
|
+ dePrint("已清理旧缓存目录")
|
|
|
|
+ } catch {
|
|
|
|
+ dePrint("清理旧缓存失败: \(error.localizedDescription)")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ do {
|
|
|
|
+ dePrint("srcURL=\(srcURL)")
|
|
|
|
+ dePrint("dstURL=\(dstURL)")
|
|
|
|
+ try fileManager.moveItem(at: srcURL, to: dstURL)// 移动文件
|
|
|
|
+ } catch {
|
|
|
|
+ debugPrint("尝试移动文件失败: \(error.localizedDescription)")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dePrint("移动 Cache Kingfisher 到 library 流程结束")
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|