문제

웹 개발을 할 때 치명적인 오류를 포착하고 파일에 추적을 추가하고 사용자에게 메시지를 표시하는 사용자 정의 로거를 사용합니다. 파일이 변경되었는지 확인할 수 있습니다. 즉, 일부 사용자가 오류가 발생했으며 그들이 발견 한 내용을 확인할 수 있습니다.

나는 아이폰에서 비슷한 것을 원한다.

  • 개발하는 동안 오류 목록을 재설정하거나 알림을 끄는 것은 사소한 일이어야합니다.
  • 개발 중에는 오류 메시지가 콘솔의 화면과 같이 명백한 위치에도 나타납니다.
  • 배포되면 오류는 분석을 위해 모선으로 정중하게 보내야합니다 (다음 업데이트의 버그 수정).
  • 개발 중에 문제를 추적하려고 할 때 추적/정보 로깅 켜기
  • '릴리스'에 대한 콘솔 로깅을 끄려면 사용자의 속도를 높이십시오.
  • 전화로 좋은 시민이되도록 스스로 청소해야합니다.

일부 관련 링크

이 작업을 수행하는 일반적인 툴킷이있는 것 같습니다. 어떻게 처리합니까?

2011 년 10 월 업데이트] 다양한 성숙도의 발전이있었습니다 ...

  • plcrashreporter.
  • 퀸시 plc 위에 앉아 있습니다.
  • 버그 센스 상업용 사고 기자.
  • 비법주의 충돌 및 오류보고 (일부 무료 패키지, 일부 지불).
  • 시험 비행 이제 충돌 사고를 잡는 SDK가 있습니다 (아직 App Store 앱, Dev 앱만).
  • 시험 비행처럼 하키 임시 배포와 충돌보고와 결합하는 것을 목표로합니다.
도움이 되었습니까?

해결책

우리가하는 일은 다음과 같습니다.

  • iPhone이 자체 충돌 덤프를 처리하게하십시오. 기존 앱 스토어 메커니즘. 업데이트: iTunes가 충돌 보고서를 제공 할 때 신뢰할 수없는 것으로 나타 났으며 사용하는 것이 좋습니다. 직물/충돌 기간, 또는 경쟁자가 좋아합니다 비법주의 또는 롤바.
  • 우리의 출시 된 제품에는 흔적이 없으므로 대부분의 다른 iPhone 앱이하는 것과 일치하는 것 같습니다.
  • 버그가보고되면 추적 된 빌드를 사용하여 버그를 재현합니다.

더 자세하게:

  • 우리는 다양한 수준의 세분성에서 매크로를 NSLOG 추적으로 정의합니다.
  • Xcode 빌드 설정을 사용하여 트레이스 레벨을 변경하여 제품에 얼마나 많은 트레이스가 컴파일되는지를 제어합니다. 예를 들어 릴리스 및 디버그 빌드 구성이 있습니다.
  • 추적 레벨이 정의되지 않으면 시뮬레이터에서 전체 트레이스가 표시되고 실제 장치에서 실행될 때 흔적이 없습니다.

아래에 예제 코드를 포함 시켰습니다. 우리 가이 글을 어떻게 작성했는지, 출력의 모습

우리는 여러 가지 다른 추적 레벨을 정의하여 개발자가 어떤 추적선이 중요한지 식별하고 원하는 경우 더 낮은 수준 세부 사항을 걸러 낼 수 있습니다.

예제 코드 :

- (void)myMethod:(NSObject *)xiObj
{
  TRC_ENTRY;
  TRC_DBG(@"Boring low level stuff");
  TRC_NRM(@"Higher level trace for more important info");
  TRC_ALT(@"Really important trace, something bad is happening");
  TRC_ERR(@"Error, this indicates a coding bug or unexpected condition");
  TRC_EXIT;
}

예 전 트레이스 출력 :

2009-09-11 14:22:48.051 MyApp[3122:207] ENTRY:+[MyClass myMethod:]
2009-09-11 14:22:48.063 MyApp[3122:207] DEBUG:+[MyClass myMethod:]:Boring low level stuff
2009-09-11 14:22:48.063 MyApp[3122:207] NORMAL:+[MyClass myMethod:]:Higher level trace for more important info
2009-09-11 14:22:48.063 MyApp[3122:207] ALERT:+[MyClass myMethod:]:Really important trace, something bad is happening
2009-09-11 14:22:48.063 MyApp[3122:207] ERROR:+[MyClass myMethod:]:Error, this indicates a coding bug or unexpected condition
2009-09-11 14:22:48.073 MyApp[3122:207] EXIT:+[MyClass myMethod:]

우리의 추적 정의 :

#ifndef TRC_LEVEL
#if TARGET_IPHONE_SIMULATOR != 0
#define TRC_LEVEL 0
#else
#define TRC_LEVEL 5
#endif
#endif

/*****************************************************************************/
/* Entry/exit trace macros                                                   */
/*****************************************************************************/
#if TRC_LEVEL == 0
#define TRC_ENTRY    NSLog(@"ENTRY: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#define TRC_EXIT     NSLog(@"EXIT:  %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#else
#define TRC_ENTRY
#define TRC_EXIT
#endif

/*****************************************************************************/
/* Debug trace macros                                                        */
/*****************************************************************************/
#if (TRC_LEVEL <= 1)
#define TRC_DBG(A, ...) NSLog(@"DEBUG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_DBG(A, ...)
#endif

#if (TRC_LEVEL <= 2)
#define TRC_NRM(A, ...) NSLog(@"NORMAL:%s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_NRM(A, ...)
#endif

#if (TRC_LEVEL <= 3)
#define TRC_ALT(A, ...) NSLog(@"ALERT: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ALT(A, ...)
#endif

#if (TRC_LEVEL <= 4)
#define TRC_ERR(A, ...) NSLog(@"ERROR: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ERR(A, ...)
#endif

Xcode 설정 :

Xcode 빌드 설정에서 "사용자 정의 설정 추가 추가"(빌드 구성 화면의 왼쪽 하단에있는 작은 코그를 클릭하여)을 선택한 다음 호출되는 새 설정을 정의합니다. GCC_PREPROCESSOR_DEFINITIONS 그리고 가치를 부여하십시오 TRC_LEVEL=0.

유일한 미묘함은 Xcode 가이 설정을 변경하면 깨끗한 빌드를 수행하는 것을 모른다는 것입니다. 따라서 변경하면 수동으로 청소해야합니다.

다른 팁

Apple은 사용자가 사용자로부터 충돌 로그를 자동으로 수집하고 iTunes Connect에서 다운로드 할 수 있습니다.

그것이 당신에게 충분하지 않다면, 나는 툴킷을 알지 못하지만 개인적으로 내 자신의 무언가를 롤하고 싶지 않을 것입니다. 강력한 것을 개발하고, 개인 정보 보호 문제를 제기 할 수 있고, 결국 App Store에 100,000K 앱을 사용하여 버그가 많다는 것을 발견 한 후 얼마나 많은 사용자가 응용 프로그램을 사용할 것인가?

당신은 그것을 알고 있습니까? iPhone 용 CrashReporter 존재합니까?

이있다 저장소 그 코드를 데모하는 github에서.

스택 추적을 코드에 매핑하는 것과 같은 멋진 기능이 있으며 버전 해시와 같은 git 특정 사항을 관리합니다.

Robbie Hanson의 Cocoalumberjack을 강력히 추천합니다. https://github.com/robbiehanson/cocoalumberjack

학대가 발생하면 매우 유연하고 강력 할 수 있습니다. 다양한 수준의 로깅을 지원합니다. 파일에 로깅을 몇 줄의 코드로 켜고 네트워크를 통해 전송 될 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top