[XCode] Instruments
✅ 얼마 전 다른 회사에 다니시는 학교 선배 iOS 앱 개발자님께 앱이 몇가지 상황에서 앱이 죽어서 원인을 같이 봐줄 수 있냐고 요청 받음.
해당 이슈 같이 분석하면서 해결해보고자 함.
해당 포스팅은 Xcode 13.2.1을 기준으로 작성
✅ 문제상황
1. 네비게이션 스택이 2개가 동시에 쌓임.
2. 스크롤을 하다가 앱이 죽거나 앱이 흰 화면이 뜨면서 초기화가 되어버림.
✅ 접근법
해당 프로젝트는 RxSwift를 사용하고 있었기에, 1번 상황을 보고 가장 먼저 생각된 원인은 "memory leak"이었다.
왜 그렇게 판단했냐면, 코드 스타일 등을 보고 이게 원인이겠다는 느낌이 있었다.
뭐 이전에 내가 RxSwfit 쓰면서 수도 없이 삽질했던 거라 그랬을수도,,
✅ Xcode Instruments 사용법
1. Edit Scheme > Profile에 들어가서 build configuration을 debug로 세팅한다.
- 상단에 Xcode simulator 설정하는 부분에 있습니다.
2. 아래 사진처럼 저 부분을 꾹!! 누르고 있으면 저렇게 뜨는데 저거 Build for Profiling으로 변경해줍니다.
3. 아래와 같은 Instruments 창이 나타납니다.
4. 여기서 Leaks을 선택합니다. 왜냐하면 저는 메모리 누수를 의심하고 테스트 해 볼 생각이거든요!
5. 위에 빨간 버튼을 누르고 앱을 사용하면서 어디서 문제가 발생하는지 찾기!
✅ 그래서 나는 원인 분석을 어떻게 했을까?
아래 이미지를 보자!!
아래 스택 오버플로우를 보고 메모리를 엄청 많이 잡는 친구에 대해서 살펴 보았다.
https://github.com/SDWebImage/SDWebImage/issues/548
✅ 결론
리소스 자체에 문제가 있었다. Lottie를 인디케이터를 사용하고 있었는데, 해당 리소스 자체를 까보니까 정상적인 리소스라고 볼 수 없을 정도로 엄청난 공백과 해독하기 어려운 문자들이 엄청나게 껴 있었다.
결과적으로 리소스를 교체하고 나니 문제가 해결되었는데, 리소스 자체에 문제가 있을수도 있다는 경험을 하게 되었다.
끝.
✅ 마무리
덕분에 Memory Leak을 잡는 도구로 Instruments를 사용해 보았다.
(참고)
https://ios-development.tistory.com/604