티스토리 뷰

반응형

안녕하세요. 도미닉입니다.

SwiftUI 로 첫 프로젝트를 완료해서 페이워치 리뉴얼 앱을 런칭했는데요.

거기서 겪었던 오류를 설명하고 해결책을 공유하고자 합니다.

 

오류 발견

크래쉬틱스에 아래와 같이 많은 오류가 발생했습니다.

고객센터로 들어온 문의를 보면 일부 유저에게 홈 화면에서 앱이 강제종료되는 문제가 있었습니다.

처음에는 크래쉬틱스에 있는 에러와 홈 화면에서 앱이 강제종료되는 이슈를 별개의 문제로 알았습니다.

크래쉬틱스의 자세한 내용을 살펴봐도 홈 화면과 연관성을 못 찾았기 때문입니다.

아래는 크래쉬틱스에 내용입니다.

Fatal Exception: NSInternalInconsistencyException 
Attempted to scroll the collection view to an out-of-bounds item (0) when there are only 0 items in section 0. Collection view: <_TtC7SwiftUIP33_8825076C2763A50452A210CBE1FA4AF020PagingCollectionView: 0x12e82c000; baseClass = UICollectionView; frame = (0 0; 342 72); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x283a1f420>; backgroundColor = UIExtendedGrayColorSpace 0 0; layer = <CALayer: 0x28343b8e0>; contentOffset: {0, 0}; contentSize: {0, 72}; adjustedContentInset: {0, 0, 0, 0}; layout: <_TtC7SwiftUIP33_8825076C2763A50452A210CBE1FA4AF012PagingLayout: 0x12df15740>; dataSource: <_TtC7SwiftUIP33_8825076C2763A50452A210CBE1FA4AF011Coordinator: 0x280634750>>.

 

오류 파악

SwiftUI로 앱을 개발했는데 왜 CollectionView 에 관한 오류가 발생할지 감조차 잡을 수 없었습니다. 

같이 공부했던 친구에게 이 오류 캡쳐 화면을 보여주니 자신이 겪어봤던 내용이라고 했습니다.

iOS 16.0 ~ 16.0.2 에 TabView 에서 0개의 요소를 그려줄 때 발생하는 오류라고 하였습니다.

실제로 클레쉬틱스에 오류 기기를 확인해보니 iOS 16.0 ~ 16.0.2 에서만 발생되는 오류였습니다.

 

저희 앱에서 TabView 는 두 군데에 쓰이고 있었습니다.

하단 텝바와 홈 상단에 이벤트 베너입니다.

 

처음에는 하단 텝바를 의심했습니다. TabView 를 쓰는 곳 하니 가장 먼저 생각했던 뷰이기 때문입니다. 하지만 아래와 같이 하단 텝바에서는 요소가 0개가 될 수 없었습니다.

TabView 를 프로젝트 내에서 검색해보니 상단 이벤트 베너도 TabView 였습니다.

그 쪽에서 이벤트 목록을 받아오는 API로 데이터를 받아오기 전까지는 요소가 0개였습니다.

홈에서 앱이 강제종료 되는 이유가 이 것임을 추측하게 되었습니다!

 

우선 정확하게 상황을 파악하기 위해 16.0 시뮬레이터로 앱을 실행해봤습니다.

정말 홈에서 앱이 크래쉬가 나면서 앱이 종료되었습니다.

iOS 16.0 ~ 16.0.2 에서 TabView 에 0개의 요소를 그려줄 때 발생하는 오류였습니다.

오류 수정

어떻게 해결할 수 있을까요?

검색해보니 아래와 같이 if문으로 분기처리를 하라고 하였습니다. (글 하단 참고에 스택오버플로 링크 첨부하였습니다.)

위에 코드를 사용해 이슈를 해결할 수 있었습니다. 16.0 시뮬레이터에서 앱이 더 이상 죽지 않았습니다!

출처 :&nbsp;https://v.daum.net/v/5ea66e1ac2ec556008868dfb

 

원인을 찾아 해결했다고 생각하고 기뻐하고 있었는데요.

QA 분께서 iOS 15 대에서 이 텝뷰가 보이지 않는다고 하였습니다!

출처 :&nbsp;https://v.daum.net/v/5ea66e1ac2ec556008868dfb

아마 SwiftUI 에 TabView 가 iOS 15대에서는 분기 처리가 다르게 동작하는 듯 하였습니다.

이벤트 목록 모델을 불러온 뒤에 목록의 갯수대로 베너가 그려지는 것을 기대했고 iOS 16대 에서는 잘 보여졌습니다.

iOS 15 대에서는 처음에 0개였으므로 계속해서 0개로 보여주는 현상입니다.

 

아래와 같이 iOS 16대와 그 이전 버전 대에서 코드를 다르게 동작하게 분기 처리를 추가하여 이 이슈도 해결할 수 있었습니다.

이상으로 오류를 발견하고 파악하고 해결했던 내용들을 작성해봤습니다.

누군가 이와 같은 오류를 겪으신 분에게 도움이 되길 바랍니다.

저는 이 오류를 알려준 친구에게 소고기를 사려고 합니다~

오류 원인을 알려주신 제 친구 SK 감사합니다.

참고

https://stackoverflow.com/questions/73950003/simple-tabview-is-crashing-in-ios-16

 

Simple TabView is crashing in iOS 16

It's fixed at iOS 16.1 Beta 4 ✅ There is a weird crash that only happens in iOS 16. When I try to create a TabView with page style, it's crashing when the array is empty. But it's working perfectl...

stackoverflow.com

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함