The app ‘App Name’ has been killed by the operation system because it is using too much memory.

sokyte
daily-monster
Published in
4 min readMar 3, 2024

안녕하세요. 일욜 괴물 소깡입니다. :)

오늘은 iOS 개발 중 마주친 이슈에 대한 글을 작성해 보려고 합니다.

제목에서 알 수 있는 것처럼 메모리 관련 이슈인데요, 아래 이미지에서 볼 수 있는 것처럼 메모리 관련 .. 이슈가 발생했습니다.

메모리 관련 이슈라는 것만 알 수 있고, 어떻게 어디서 발생했는지 모호해서 이슈를 해결하는데 제법 많은 시간이 걸렸습니다. ;_;

그렇다면 위 이슈가 어떤 시나리오에서 발생했는지, 무엇이 문제인지, 그리고 어떻게 해결했는지 알아보도록 하겠습니다 !!

시나리오

먼저 이슈가 발생한 시나리오부터 살펴보겠습니다.

이슈가 발생한 시점은 온보딩 프로세스에서 Lottie Animation View에 JSON 파일을 지정했을 때부터 발생했습니다.

기존 UI/레이아웃을 잡는 코드에서는

private var firstLottieView = LottieAnimationView(name: "")

위와 같이 별다른 JSON 파일을 지정하지 않았었는데요,

제대로 프로세스를 확인하기 위해 디자이너로부터 파일을 전달받고,

private var firstLottieView = LottieAnimationView(name: "Onboarding01")

이렇게 코드를 작성하고 빌드해 보았습니다.

그 결과, 해당 코드가 있는 ViewController에 진입하자 앱이 꺼지고(강제 종료) 위의 에러 팝업 창이 나타났습니다.

발생 원인 및 해결

그렇다면 왜 에러가 발생한 것일까요?

에러 팝업 창에 ‘too much memory.’ 나와 있기 때문에 메모리 관련해서 집중적으로 살펴보았습니다.

  1. 각 ViewController에서 강한 순환 참조를 하고 있는 부분이 없는지
  2. deinit이 제대로 호출되는지
  3. Instruments에서 memory leak 이 발생하지 않는지

등을 위주로 살펴보았습니다.

살펴보니 크게 이거다 !!! 하는 부분이 없었는데요 .. 화면 구조의 문제인가 싶어 구조도 변경해보고 Lottie Animation 속도도 변경해보았지만 계속해서 앱이 꺼지는 문제가 발생했습니다 .. ☹️

그러다가 .. 같은 팀원 (그리고 화욜 괴물 씨워럴)에게 S.O.S 요청을 했는데 Lottie JSON File의 용량을 살펴보더군요!?

기존 프로젝트에서도 Lottie를 사용하고 있었는데 기존에 사용한 파일의 용량은 KB 크기였는데 새롭게 추가한 파일들은 다 MB 크기로 들어가 있었습니다.

이거다 !! 싶어서 디자이너에게 하나의 파일을 KB로 수정해서 전달해줄 수 있는지 물어보았고 .. 수정된 파일을 하나 넣어서 테스트해보니 제대로 빌드가 되었습니다 !!! 🎉🎉🎉

코드로 뭔가 수정하거나 프로젝트 내부에서 어떠한 설정을 변경한 해결방법은 아니지만 .. 구글링을 해보니 저와 비슷한 이슈로 인해 파일 자체를 수정한 분들이 꽤 계시더라구요 .. ?

혹시 다른 방법으로 (디자이너에게 수정을 요청하지 않고 코드레벨에서) 위 문제를 해결하신 분이 계시면 댓글로 알려주세요. plz.

만약 본인이 Lottie File을 추가했는데, 메모리 이슈로 앱이 죽는다면 Lottie File 자체의 크기를 살펴보자.

오늘 글은 조금 짧지만 혹시나 저와 같은 오류로 삽질을 하고 계신 분들에게 시간을 아낄 수 있는 방법이 되길 바라면서 이만 마무리하도록 하겠습니다.

그럼 다음주에 뵈어요 ~ 👋🏻

--

--