UIWebview 환경에서 발생할 수 있는 앱 크래쉬 / LocalStorage 초기화 현상
얼마 전 제가 Cordova / UIWebview 로 3년전쯤 앱 프로젝트를 진행했던 곳에서 아이폰에서만 간헐적으로 종료 / LocalStorage가 초기화되는 현상이 있다는것을 알았습니다. 최초 작업당시만 해도 발생하지 않았던 문제이고 작년 IOS 12 업데이트 이후 그 현상의 매우 잦아졌다고 하니 OS상의 이슈로 예상했고 이 사이트뿐만 아니라 다른 사이트에서도 겪고있을 문제라 판단되어 포스팅 해봅니다.
원인은 아이폰 메모리 관리 정책에 있습니다. 사파리 등 앱을 쓰시다가 앱이 간헐적으로 강제종료 되는 현상을 겪어보신적이 있으실텐데요. Webview 내 LocalStorage는 IOS에서 out of memory 발생으로 간헐적으로 데이터가 지워지는 현상이 있습니다.
해당 문제들은 이미 많은 포럼에서도 포스팅 되었습니다. 간헐적으로 앱이 종료되는 이유도 해당 이유와 동일합니다.
- http://gonehybrid.com/dont-assume-localstorage-will-always-work-in-your-hybrid-app/
- http://stackoverflow.com/questions/7750857/how-permanent-is-local-storage-on-android-and-ios
- http://stackoverflow.com/questions/25627991/ios-7-webview-and-localstorage-persistence-update
- http://stackoverflow.com/questions/28082624/localstorage-persistence-in-ios-android-webview
- https://forum.ionicframework.com/t/localstorage-is-it-cleared-after-app-restarts-periodically-in-ios/21819
- https://bugs.chromium.org/p/chromium/issues/detail?id=481380
- From Cordova itself: http://cordova.apache.org/docs/en/latest/cordova/storage/storage.html
하지만 해당 프로젝트에서는 Cookie를 제외한 웹뷰 내 데이터를 LocalStorage에 저장되어 있으며 LocalStorage를 그대로 사용할 수 있는 방법을 찾다보니 UIWebview -> WKWebview로 변경하게되었고 대략 메모리 사용율이 5배 이상 차이가 나면서 WKWebView를 사용함으로써 로컬스토리지와 앱 간헐적 종료는 해결 할 수 있었습니다.
Cordova WkWebView Plugin의 경우에는 LocalStorage를 사용할 수 있도록 네이티브에 저장되었다가 웹뷰 로딩시점에 웹뷰 내 LocalStorage로 사용되게끔 처리해줍니다.
혹시나 진행중인 프로젝트에서 UIWebview에서 해당 문제가 발생할 경우 WKWebview로의 전환과 LocalStorage -> Cookie / NativeStorage 등의 방법으로 Store를 변경을 고려해보심이 좋겠습니다.
참고자료:
https://github.com/TheCocoaProject/cordova-plugin-nativestorage
'HybridApp > Cordova' 카테고리의 다른 글
[하이브리드앱] cordova-plugin-whitelist 분석 (2) | 2018.06.19 |
---|---|
[하이브리드앱] cordova 에서 userAgent에 문자열 추가하기 (0) | 2018.06.18 |