[iOS] Find JetsamEvent log
JetsamEvent log가 무엇이고, 어떻게 얻는가. 구글링을 열심히 해보니 대충 low 메모리시에 시스템이 남기는 메모리 관련 로그라는 것을 알 수 있었다. XCode와 Device에서 둘 다 추출할 수 있다고 했지만, 나의 경우는 오직 device에서만 로그를 찾을 수 있었다. ( iPhone에서 Settings > Privacy > Analytics > Analytics Data 메뉴로 들어가면 각종 로그 파일을 확인 할 수 있다. )
테스트 환경은 XCode 10.2와 iOS 12.3.1이고, device는 iPhone 6 plus를 이용하였다. 그럼 메모리로 인해 crash가 날 경우 JetsamEvent log가 실제로 남는지 테스트를 해보자. Dev provisioning을 이용하여 XCode에서 앱을 실행하고 low 메모리로 인해 앱이 종료되는 것을 확인하였다.
Message from debugger: Terminated due to memory issue
메모리인해 종료되었다는 메세지가 XCode 로그에 남아있었다. 이제 JetsamEvent log가 남았는지 device의 Analytics Data에 들어가서 확인해보자. JetsamEvent-2019-07-18-143342.ips.synced 같이 날자와 시간으로 이루어진 파일이 남아 있다면 잘 남은 것이다.
내가 최초에 테스트를 진행했을 때는 몇 번의 테스트를 진행했음에도 JetsamEvent log 파일이 생성되지 않았다. Provisioning도 adhoc/appstore로 바꿔서 빌드도 해보고, device도 재시작해보아도 소용이 없었다.
얼마간의 삽질끝에 applicationDidReceiveMemoryWarning을 implement할 경우 JetsamEvent log가 남지 않는다는 것을 발견하였다. applicationDidReceiveMemoryWarning은 무엇인가. (Manual)
시스템으로부터 메모리 warning을 받았을 때 앱에 알려주는 콜백이다. 나의 경우는 아래와 같이 메모리 warning을 처리하는 코드가 있었고, 그 warning을 받았을 때, garbage를 정리하는 부분이 존재하였다.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidReceiveMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
이 부분을 제거한 후 다시 테스트를 진행해보니 JetsamEvent log가 제대로 생성되었다. (lol)
Xcode에도 window > Devices and Simulators > View Device Logs를 통해 crash 로그들을 찾을 수 있다. 나는 JetsamEvent log를 여기서 찾을 수가 없었지만 인터넷 상에서 여기서도 찾는 경우가 있다고 하는데 이것은 XCode버젼이나 iOS버젼에 따라 영향이 있을 수도 있다.