apple/XCTest

[XCode] Instruments

lgvv 2022. 7. 12. 14:27

 

 

 

✅ 얼마 전 다른 회사에 다니시는 학교 선배 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으로 변경해줍니다.

build for profiling으로 변경

 

3. 아래와 같은 Instruments 창이 나타납니다.

Instruments

 

4. 여기서 Leaks을 선택합니다. 왜냐하면 저는 메모리 누수를 의심하고 테스트 해 볼 생각이거든요!

 

Leak 선택 시 나타나는 창

 

5. 위에 빨간 버튼을 누르고 앱을 사용하면서 어디서 문제가 발생하는지 찾기!

 

여기 빨간버튼 누르고 시작!!

 

 

 

✅ 그래서 나는 원인 분석을 어떻게 했을까?

무언가 문제가 발생하고 있다!

 

 

아래 이미지를 보자!!

 

아래 이미지를 보자!!

 

아래 스택 오버플로우를 보고 메모리를 엄청 많이 잡는 친구에 대해서 살펴 보았다.

https://github.com/SDWebImage/SDWebImage/issues/548

 

GIF Memory Leak - VM: ImageIO_GIF_Data · Issue #548 · SDWebImage/SDWebImage

Hi, I'm using SDWebImage on iOS 7 and am noticing a very high increase in memory usage any time a GIF is loaded from a URL. I'm not sure if it's a problem with SDWebImage or just iOS 7,...

github.com

 

 

 

✅ 결론

 

리소스 자체에 문제가 있었다. Lottie를 인디케이터를 사용하고 있었는데, 해당 리소스 자체를 까보니까 정상적인 리소스라고 볼 수 없을 정도로 엄청난 공백과 해독하기 어려운 문자들이 엄청나게 껴 있었다.

 

결과적으로 리소스를 교체하고 나니 문제가 해결되었는데, 리소스 자체에 문제가 있을수도 있다는 경험을 하게 되었다.

끝.

 

✅ 마무리

덕분에 Memory Leak을 잡는 도구로 Instruments를 사용해 보았다.

 

 

 

 

 

(참고)

https://ios-development.tistory.com/604

 

[iOS - Xcode] Memory Leak, strong Reference, cycle 확인 방법 (with Instruments)

Memory Leak 메모리 누수는 인스턴스가 할당되었지만, 앱에서 더 이상 사용하지 않음에도 불구하고 해제되지 않은 메모리 블록이나 세션에 대한 참조가 없으면 해제할 방법이 없는 경우 존재 Instrum

ios-development.tistory.com