2014-11-07 4 views
3

사용자 지정 충돌보고 시스템 (예 : Ask the user to send crash log after crash on iPhone에 특수화 된 시스템)을 사용하여 로그를 보내려면 앱을 다시 시작해야합니다. 왜? 거기에 사용자 정의 예외 처리하는 동안 그것을 보낼 가능성이 있습니까? 아니면 응용 프로그램을 다시 시작할 필요가없는 충돌보고 시스템이 있습니까?iOS에서 오류 로그를 보내려면 다시 시작해야하는 이유는 무엇입니까?

답변

5

충돌이 발생하면 앱이 불안정한 상태입니다. 그래서 크래시보고 라이브러리는 충돌 시간에 메모리를 할당하는 것보다 더 많은 손상을 입힐 수 있기 때문에 아무 것도 할 수 없습니다. 따라서 크래시 리포팅 SDK는 모든 충돌 데이터를 수집하기 위해 소위 async-safe C 메소드만을 사용할 수 있습니다. 모든 Objective-C 코드는 처리 할 수 ​​없으며 iOS 네트워킹 스택도 사용할 수 없습니다.

예외는 Objective-C의 앱 충돌의 한 예일 뿐이고 저수준 BSD 신호에 의해 트리거되는 크래시도 있습니다. 두 가지 유형 모두 앱이 안전하지 않고 불안정한 상태에 있으며 충돌시 최대한 적은 코드 만 호출해야 함을 의미합니다.

따라서 크래시 시간에 데이터를 보낼 수 있도록 대부분의 네트워킹 프레임 워크를 다시 작성해야하며 이는 안전한 방법으로 수행하기가 어려울 수 있습니다. 이것이 모든 적절한 오류보고 SDK가 그런 것을하지 않는 이유입니다.

또한 iOS에서는 백그라운드에서 데이터를 보낼 수있는 다른 프로세스를 만들 수 없으므로 다음에 앱을 시작할 때 데이터를 보내는 것이 안전하고 가능한 솔루션입니다.

이제 앱 시작 전 또는 전송 중에 앱이 충돌하기 때문에 앱 시작 초기에 발생하는 크래시가 전송되지 않을 수도 있습니다. 일부 SDK는 앱 시작 코드를 변경해야하는 시나리오를 처리 할 수있는 메커니즘을 제공합니다.

3

앱이 작동을 멈추었으므로 더 이상 앱 제어를 실행하는 프로세스가 없으므로 새로운 프로세스를 시작하여 보고서를 보낼 수 없습니다. 크래시 핸들러의 모든 코드는 iOS가 전체 앱을 죽이고 메모리에서 제거하기 전에 앱을 다운시킨 시간을 제한적으로 저장합니다.

앱을 다시 시작하면 오류보고 작성자가 오류 보고서의 형식을 지정하고 보냅니다. 앱이 활성 상태 일 때만 종료 될 수 있습니다.