Wow i asked this question a long time ago, and still no answers.
Tell you the truth, i ended up using a DTS token for this one.
Turns out that NSURLSession background configuration don't support cashing at all, no matter what task you use.
Its a design decision by apple that's badly documented.
Heres part of the DTS replay that i received:
I’m responding to your question about the relationship between NSURLSession background sessions and NSURLCache. You wrote:
Then i add a NSURLCache object to my configuration the NSURLSession mechanism disregards it completely.
Indeed. That is expected behavior, as things currently stand NSURLSession background sessions /never/ cache. There’s a bunch of reasons for this:
It’s infeasible to fully support the URLCache
property. Specifically, we can’t allow you to use a custom subclass of NSURLCache because that would require us to load your code into a system daemon (remember that the actual work here is done by the NSURLSession daemon while your app is suspended, or perhaps even terminated).
Even if we limited you to just instances of the standard NSURLCache class, things still get tricky because we would want the disk space used by that cache to be charged to your app. That’s hard to orchestrate given that security barriers between your app and the NSURLSession daemon.
There’s a philosophical disconnect here. NSURLSession background sessions were intended to be used for a small number of large transfers, while NSURLCache is only really useful when you’re doing a large number of small transfers.
Note: Running lots of small transfers through an NSURLSession background session is likely to cause problems for other reasons. For more info on this, read the following DevForums posts:
- NSURLSession’s Resume Rate Limiter
https://forums.developer.apple.com/message/42352#42352
- Moving to Fewer, Larger Transfers
https://forums.developer.apple.com/thread/14853
If you’d like the NSURLSession engineers to reconsider this caching design decision, you should feel free to file a bug requested that this be supported. Make sure you explain your use case in detail.
https://developer.apple.com/bug-reporting/
Your bug may be returned as ‘behaves correctly’, but it doesn’t hurt to ask.
On the subject of bugs, I presume you looked through the NSURLSession documentation and didn’t find this gotcha documented. If so, I’d appreciate you filing a bug against the documentation that you looked at requesting that it include information about this issue.