티스토리 뷰

https://nevermeant.dev/handling-blank-wkwebviews/

 

Never Meant

If you simply want to see how I've handled WKWebViews rendering as white screens, go to the "My Solution" section. But I recommend you read this entire post if you want a full understanding of the issue and its solutions. How WKWebViews Work Many teams hav

nevermeant.dev

https://blog.embrace.io/bug-of-the-month-blank-webviews/

 

Blank Web Views on iOS: What Causes Them and How Can You Fix Them

Blank web views occur on iOS when a WKWebView fails or the OS kills the web view's content process. iOS applications normally have one main application process.

blog.embrace.io

회사 앱에 메인이 되는 화면은 wkwevview로 만들어져있다. 동료로부터 앱을 백그라운드에 오래 두고 있다가 다시 키면 아무것도 안 보인다고 보고를 받았다. 관련해서 찾다가 위 2개 자료를 찾았다. 그리고 iOS앱 프로세스랑 wkwebview프로세스랑 다르다는 것을 알게 됐다. 

따라서 동료가 보고한 버그의 원인을 우리 앱이 백그라운에 오래 있을 때 메모리가 부족해지면 wkwebview프로스세를 죽여서 발생하는 거라고 생각했다. 해결방법도 간단했다. WKNavigationDelegate의 webViewWebContentProcessDidTerminate  콜백 함수에서webView를 reload하면 된다. (회사 프로젝트 특성상 여타 다른 처리가 필요해서 reload대신에 다른 처리를 했지만) 어쨌든 webView를 다시 로드해야한다. 근데 webView인스턴스도 없어져서 아예 다시 만들어야 할 수도 있다고 생각했다.

근데 테스트를 해야하는데 재현하기가 막막했다. 우리 앱을 백그라운드두고 앱을 막 쓰면서 메모리를 부족하게 해서 OS가 우리 wkwebView를 죽이기를 기다린다? 버그 알려준 동료에게 부탁한다? 한 번에 안 되면 또 부탁하기가 미안하다. 그래서 wkwebview프로스세가 다시 만들어 진다는 아이디어에 착안해서, 시뮬에서 띄우면 맥북 활성화 상태 보기에서 그 프로세스가 나올 거고 그걸 강제 종료하면 재현 되지 않을까 생각했다. 샘플 프로젝트를 만들어서 테스트 해봤더니 아래와 같이 나왔고 해당 프로세스를 강제종료하니 재현이 됐다. 야호!

재현하면서 수정한 코드를 테스트했고 문제를 빠르게 수정할 수 있었다. 다행이 기존에 생성됐던 webview 인스턴스는 살아 있어서 다시 만들어주지 않아도 됐다. 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함