Thanks - I've re-opened the bug.
On Fri, Sep 5, 2014 at 12:04 AM, Li, Jonathan <jonathan...@sap.com> wrote: > Hi, > > Due to bug https://issues.apache.org/jira/browse/CB-3071, the cached response > gets invalidated after each time restarting the iOS cordova app, the > suggested workaround is to use the open source SDURLCache project, however, > SDURLCache is not a good candidate to replace the iOS default NSURLCache, as > it does not follow the RFC 2616 specification very well, and cannot be used > in many projects that requires serious cache functions. > > The testing shows the issue of CB-3071 is related to the iOS cordova > useragaent logic. When each time the app restarts, the uiWebView will get a > new address, and this address is appended to the UIWebView's user agent > string, so the user agent is different for each running session. iOS will > automatically invalidate the cached response if it detects the user agent has > been changed, as user agent contains locale information, and if locale > setting is changed, the same url may get the different response from server > side. > > This can be verified by always appending a constant number to the user agent > string, in that case, the cached response can be loaded after the app > restarts > > It seems the issue can be fixed by changing the current NSMutableSet* > gRegisteredControllers to NSMutalbleDictionary object, the dictionary object > uses a incremental sequential id as key, and use the view controller’s > address as value, then only appending the sequential id in the user agent > string. This sequential id can be used to find the corresponding view > controller from gRegisteredControllers collection. As most cordova app will > only create a single CDVViewController, so the sequential id most likely is > always 0. This will generate the same user agent string across app running > sessions, and keep the cached response valid. > > Please let me know if the bug CB-3071 can be reopened and get fixed with this > idea. > > Thanks > Jonathan