적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

iOS 17 대응 - 컬렉션뷰 이슈

hongssup_ 2023. 9. 27. 04:14
반응형

2023년 9월 18일, 지난주에 iOS 17 버전이 출시되었다. 

나는 업데이트를 잘 안하는 편이라,, ㅎ 업데이트 안하고 있었는데

어제 스쿼드 미팅에서 갑자기 몇몇 기기에서 커뮤니티 탭 전환이 안되는 버그가 발견되었다..! 😱

얼마 전, 커뮤니티 리뉴얼 하면서 테스트도 엄청 했고 지금 내 핸드폰과 테스트 기기들에서는 너무나 정상적으로 작동이 잘 되고 있는데???

 

1. iOS 17 빌드하기 - 웰컴 투 업데이트 지옥 🤗

OMG.. 해당 이슈 발생하는 기기 두개가 다 iOS 17 업데이트 한 거,,, 이게 머선일이고..? 

일단 원인을 찾기 위해 디버깅을 해보려 하니..

iOS 17 빌드할려면 Xcode 15로 업데이트를 해야한다.

Xcode 15 실행할려면 mac OS 13.5 이상이어야 되니깐 mac OS 업데이트 해야한다.

iOS, Xcode, macOS 까지 업데이트 지옥,, ㅎ

용량도 개큼,, 애플아 이정도면 SSD 강매 수준 아니니..? ㅋㅋㅋㅋ

 

아무튼 어찌저찌 하여 설치를 완료하고 드디어 Xcode 15 실행해서 빌드하려니 역시나 오류. 

한 번에 해줄 리가 업찌 >< 기대도 안했다규 ㅎㅎ

사용하는 외부 라이브러리들 minimum version을 13.0 으로 다 바꿔주니깐 빌드 되었다. 

 

2. 디버깅 로그 보면서 원인 찾기 🧐 👀

현상 : 처음에는 좌우 스크롤로 탭 전환이 아예 안댐. 바로 옆 탭 클릭으로 탭 전환은 됨. 근데 다른 탭 눌러도 바로 옆 탭으로만 이동함. 바로 옆 탭 누르고 나면 이미 생성된 탭들 사이에서는 스크롤 가능. 

 

커뮤니티 리뉴얼하면서 compositional layout & diffable datasource 사용해서 구조를 변경해줬는데, 커뮤니티 뷰를 하나의 컬렉션뷰로 만들고 그 안에 section 들로 탭을 나누고 전환이 되도록 설정했는데 이게 문제인가..? section 생성이 안되는건가.. 

스크롤이 안먹는데 스크롤이 문제인가..?

 

아무리 로그를 찍어봐도 작동이 안되는게 이상할 정도로 데이터는 너무 정확하게 잘 들어오는데 도대체 뭐가 문제일까,,

datasource apply 가 제대로 안되는건가?

iOS 15 부터 applySnapshotUsingReloadData 사용할 있다고 하는데 그럼 이걸 써볼까 ? 이것도 안댐.. 

 

그래서 datasource 를 diffable에서 기존의 delegate 형식으로 바꿔줘보았다. 

오잉 그래도 안되자나..? 뭐지 그럼 뭐가 문제지?

section 생성이 제대로 안되는건가 싶어 확인해보니 ㅇㅇ 맞음. 

datasource 에 section 개수를 아예 숫자로 넣어보아도 안댐. 

흠.. 그럼 혹시 item 개수를 데이터가 없을 때에도 0이 아니라 무조건 1로 넣어주면..?

오.. 이렇게 하니까 잘 됨..

item 개수를 무조건 1로 설정해두고 데이터가 없는 셀일경우 default UICollectionViewCell() 넣어주니까 아주 잘됨.

이게 문제였구만,, 

 

원인 : 기존에 컬렉션 뷰 생성할 때, datasource initial apply 할 때 메인 section 만 데이터를 초기화해주고, 나머지 섹션은 해당 섹션이 화면에 보여질 때 api 호출하고 데이터 받아오도록 되어 있어서 section 만 init 해주고 그 안에 아이템들은 나중에 넣어주도록 되어 있었다.

그런데 iOS 17부터 이제는 item이 없을 경우에, 빈 section 은 아예 생성이 안되나보다,, ㅠ 

그래서 무조건 item을 하나라도 초기에 세팅을 해주어야 섹션이 생성이 되고 정상적으로 작동하는 것,, 

 

3. 이슈 해결

원인을 찾았으니 그럼 이제 다시 diffable로 돌려볼까? 

초기 세팅을 무조건 기본 UICollectionViewCell로 넣어주고 item count = 1 로 설정해주는 것이 datasource delegate 사용하는 방식으로는 아주 간단했지만, diffable에 적용하려니 쉽지 않더라,, 

일단 무조건 datasource 형식에 맞게 데이터를 설정해야 했으므로, empty cell 을 넣어줄 때애도 단순하게 UICollectionViewCell 이용해서 되는 것이 아니라 데이터 형식에 맞게 empty cell 을 섹션마다 하나씩 넣어주어야 하는 번거로움이 있었다. 

 

 

4. 심사 제출

드디어 심사 제출 가즈아..!!

fastlane release 하고 잠시 방심했더니 또 아카이브 에러 뜸 ^^

끝난 알았니? 이제 집에   있는  알았지? ㅎ

Archive Error : Cycle inside mindcafe; building could produce unreliable results.

Run Script

참고) https://developer.apple.com/forums/thread/730974

 

Xcode 15: "Cycle inside ...; build… | Apple Developer Forums

We're seeing the same error, but we don't change DSTROOT. We have 2 frameworks in our workspace, where framework a links to and depends on framework b (Always Used / Do Not Embed) and the host app depends and embeds and signs both framework a and b (Always

developer.apple.com

 

 

 

그래도 하루만에 해결이 되어서 다행이다. 

잘 운영되던 앱이 갑자기 iOS 17에서 컬렉션뷰가 작동을 하지 않는 문제가 다른 분들 한테도 발생했던거같은데 원인이 타입 변환이라던가, http 보안 이슈라던가 하는걸 보니 몬가 굉장히 빡빡해진? 보안이 강화된? 호락호락하지 않은? 느낌이 들었다. 

쪼매 빠지거나 다르거나 해도 그냥 대충 알아서 잘 해주더니 이제 얄짤없어졌네..?

 

 

 

 

iOS 17 Release Notes

https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-17-release-notes

 

iOS & iPadOS 17 Release Notes | Apple Developer Documentation

Update your apps to use new features, and test your apps against API changes.

developer.apple.com

 

728x90
반응형