cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Li, Jonathan" <jonathan...@sap.com>
Subject Reopen iOS bug CB-3071
Date Fri, 05 Sep 2014 04:04:35 GMT
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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message