앱 개발보다 앱 출시가 더 어려운 이유

홈페이지를 개발하는 사람들은 종종 앱 개발도 비슷할 것이라고 생각합니다. 하지만 실제로는 전혀 다릅니다. 홈페이지는 개발이 끝나면 서버에 업로드하는 순간 바로 서비스가 가능합니다. 반면 앱은 개발이 끝난 후에도 넘어야 할 과정이 많습니다. 홈페이지는 내가 결정한다 홈페이지는 개발자가 수정하고 서버에 업로드하면 바로 반영됩니다. 문제가 있으면 다시 수정해서 업로드하면 됩니다. 누군가의 승인을 받을 필요도 없습니다. 앱은 스토어가 결정한다 앱은 개발이 끝났다고 바로 공개할 수 없습니다. Apple App Store와 Google Play Store의 심사를 통과해야 합니다. 개발자가 보기에는 아무 문제가 없어도 심사 과정에서 수정 요청이 들어올 수 있습니다. 경우에 따라서는 기능 삭제나 정책 변경이 필요할 수도 있습니다. 개발보다 심사가 더 오래 걸릴 수 있다 특히 최근 구글 플레이 신규 개인 개발자 계정은 비공개 테스트 절차까지 거쳐야 합니다. 제가 최근 출시한 앱의 경우는 개발보다 출시 절차에 더 많은 시간이 소요되었습니다. 내부 테스트, 비공개 테스트, 프로덕션 심사, 스토어 반영까지 거치다 보니 실제 정식 출시까지 약 20일 정도가 필요했습니다. 출시 후에도 끝이 아니다 정식 출시가 완료되면 모든 것이 끝날 것 같지만 그렇지 않습니다. 실제 사용자가 앱을 사용하기 시작하면 다양한 의견과 수정 요청이 들어옵니다. 문구 수정, 안내 메시지 변경, 사용 방법 개선 등 작은 요청들이 이어집니다. 개발자는 수정뿐 아니라 테스트와 검증도 함께 진행해야 합니다. 그래서 앱은 홈페이지와 다르다 홈페이지는 개발이 끝나면 바로 공개할 수 있습니다. 하지만 앱은 개발이 끝난 후부터가 진짜 시작이라고 해도 과장이 아닙니다. 심사, 출시, 운영, 유지보수까지 모두 포함해서 생각해야 하기 때문입니다. 그래서 많은 개발자들이 "앱 개발보다 앱 출시가 더 어렵다"는 말을 하게 되는 것 같습니다.

iOS WebView 네이버 로그인 후 화면 깨짐 해결 (SafeArea 무시 / 상태바 사라짐)

iOS WebView 기반으로 앱을 만들면서 네이버 로그인을 붙였는데, 이상한 버그를 하나 만났다.


로그인까지는 문제없이 잘 된다.

그런데 로그인 이후부터 앱 화면이 전부 이상하게 깨지기 시작한다.


상단 상태바가 사라지고, SafeArea가 완전히 무시되면서

모든 화면이 풀스크린처럼 표시된다.

기존에는 정상적으로 보이던 페이지들도 전부 영향을 받는다.


처음에는 웹 쪽 문제라고 생각했다.

CSS나 viewport 설정이 잘못된 줄 알고 이것저것 수정해봤는데 전혀 해결되지 않았다.


이상하게도 이 문제는 항상 발생하는 게 아니라

네이버 로그인 화면을 한 번 거쳤다가 돌아온 이후부터 발생했다.


이 시점에서 웹 문제가 아니라 iOS 쪽 문제일 가능성이 높다고 판단했다.


결론적으로 원인은 WebView의 SafeArea 처리와 네이버 로그인 과정에서의 화면 전환이 충돌하면서 발생한 문제였다.


네이버 로그인은 내부적으로 SafariViewController나 외부 웹뷰 형태로 화면이 전환되는데,

이 과정에서 iOS가 SafeArea를 다시 계산하지 않거나 WebView가 풀스크린 상태로 고정되는 경우가 있다.


특히 SwiftUI에서 아래와 같은 설정이 들어가 있으면 문제가 더 확실하게 나타난다.


.ignoresSafeArea()


이 설정이 있는 상태에서 로그인 화면을 거치고 돌아오면

WebView가 계속 전체 화면을 덮어버리는 상태가 된다.


해결 방법은 생각보다 단순했다.


우선 .ignoresSafeArea() 설정을 제거하거나 꼭 필요한 영역에서만 제한적으로 사용하도록 수정했다.

이것만으로도 대부분의 경우 문제가 해결된다.


그리고 WebView를 감싸는 구조도 한 번 점검해봤다.

불필요하게 전체 화면을 덮는 구조 대신, SafeArea 기준으로 자연스럽게 렌더링되도록 단순하게 구성했다.


예를 들어 이런 식으로 정리했다.


VStack {

    WebView(urlString: "https://example.com")

}


그래도 로그인 이후 화면이 깨지는 경우가 있다면

WebView를 한 번 다시 로드해주는 것도 도움이 된다.


webView.reload()


나는 이 문제를 해결하기까지 꽤 삽질을 많이 했다.


CSS 문제라고 생각해서 viewport를 계속 수정해보기도 했고,

meta 태그를 바꿔보기도 하고,

웹 쪽 SafeArea 대응도 해보고,

네이버 SDK 문제까지 의심해봤지만 전부 아니었다.


결국 원인은 웹이 아니라 iOS WebView의 렌더링 문제였다.


혹시 iOS WebView에서 네이버 로그인을 붙였는데

로그인 이후 화면이 풀스크린처럼 깨지거나 상태바가 사라진다면

SafeArea 처리와 WebView 구조를 먼저 의심해보는 게 좋다.


특히 SwiftUI를 사용하고 있다면

.ignoresSafeArea() 설정이 들어가 있는지 꼭 확인해보자.


나처럼 몇 시간 날리는 일은 줄일 수 있을 거다

댓글