2012-07-05 2 views
2

모든 NSLog 출력을 리디렉션하여 앱 내부의 UITextView에있는 모든 로그를 볼 수 있습니다 (디버그 목적으로, 나중에 TestFlight를 사용하여 모든 것을 기록 할 수 있음). 내가 소유하지 않은 프레임 워크에서 로그를 잡아 내고 싶어서 잘 알려진 DLog를 사용할 수 없습니다.장치에서 NSLog가 무시되었습니다.

stderr을 파이프로 리디렉션하고이 파이프에서 읽음으로써이 작업을 수행합니다. 어쨌든, 이것은 Xcode 내에서 앱을 시작할 때 시뮬레이터와 장치에서 잘 작동합니다. 그러나 앱이 기기에서 "손으로"실행되면 이는 작동하지 않습니다.

NSLog 호출은 장치에 아무런 영향을 미치지 않습니다. 파이프에서 아무 것도 읽지 않습니다. 그러나 내가 stderr에 수동으로 쓰는 경우 : fprintf(stderr, "test") 파이프에서 읽을 수 있기 때문에 문제는 stderr가 아닌 NSLog 함수와 같습니다.

기기에서 아무 것도 작동하지 않는 이유는 무엇입니까? 거기에 장치에서 stderr에 쓸 수있는 방법이 있습니까?

장치에서 NSLog를 사용할 수없는 경우 외부 프레임 워크에서 로그를 수집하는 다른 방법이 있습니까?

감사합니다.

+0

I는 디버거을 실행하지 않는 것 NSLog 출력 처리되지 않도록 인상했다. 분명히 앱이 손으로 시작될 때 디버거가 없지만 시뮬레이터에서 시작될 때가 있습니다. NSLog가 차지하는 코드 행은 생산 환경, 즉 디바이스에서 실행할 때 효과적으로 무시됩니다. –

+0

Organizer를 사용하여 장치를보고 NSLog 출력에 액세스 할 수 있습니다. –

+0

@ DanielHanly. 감사합니다. 장치가 "디버그 환경"에서 실행되고 있다고 생각하도록 속일 수있는 방법이 있기를 바랍니다. 그렇다면 TestFlight에서 일어난 일을 어떻게 기록해야합니까? Hot Licks : 글쎄, 나는 일종의 실시간 로깅을 원하고, 또한 TestFlight에 로그를 보내야한다. – user1504454

답변

3

NSLog는 장치의 시스템 로그로 이동합니다. C API asl (Apple System Log)을 사용하여 시스템 로그에 액세스 할 수 있습니다. this blog post도 확인하십시오.

그러나 TestFlight를 사용하는 경우 NSLog 문을 TFLog 문으로 바꾸거나 추가하는 것이 훨씬 쉽습니다.

TFLog(@"This comment is live on TestFlight."); 
+0

그게 내가 원하는 전부입니다. 링크를 가져 주셔서 감사합니다. – user1504454

0

일부 UILogging을 원하는 경우에, 당신은 ULOG하는 UIAlertView 기반 로깅 타입 #define 지시어를 사용하여 고려할 수 있습니다.

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG 
# define ULog(fmt, ...) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } 
#else 
# define ULog(...) 
#endif 

(출처 : http://overbythere.co.uk/blog/2012/01/alternatives-nslog)