Refresh cached image in AlamofireImage?

1.3k views Asked by At

Is it possible to automatically remove cached image and download newer if image was updated on server? I have tried AlamofireImage and STXImageCache but they both download an image only once and do not update it. I try like that:

private let downloader = ImageDownloader()

func downloadImage(path: String?, completion: @escaping (UIImage?) -> ()) {
    guard let path = path else { return }
    let urlRequest = URLRequest(url: URL(string: path)!)

    downloader.download(urlRequest) { response in
        completion(response.result.value)
    }
}

Manual update is not so good also, because if I don't know if an image was updated on server I have to forget about image caching at all.

1

There are 1 answers

1
Simon Moshenko On BEST ANSWER

Looks like none of available pods are able to refresh cached images, or any other cached content, when the content is changed on server. It is technically possible due to Content-Control technology, but apple does not seem to provide this possibility https://developer.apple.com/documentation/foundation/nsurlrequest.cachepolicy/1414422-reloadrevalidatingcachedata

reloadRevalidatingCacheData Specifies that the existing cache data may be used provided the origin source confirms its validity, otherwise the URL is loaded from the origin source. This constant is unimplemented and shouldn’t be used.

Your best move would be to ask server developer to generate unique URL addresses to any image that will change(avatar, backgrounds, icons etc), or if server developer is not available you should just get rid of the caching in places where there is such a problem and use casual download.

In any case you can use my gist for downloading images cached and not cached here https://gist.github.com/sam-moshenko/562ec61431c4a0ebeb68899b4d1b4d26 (Just don't forget to install pod 'AlamofireImage')