2017-04-12 12 views
1

제가 사용하고있는 제 3 자 바이너리 라이브러리 중 하나는 실행시 (개인 정보 유출)를 피하기 위해 불행한 NSLog 문이 있습니다. 프레임 워크 개발자는이 라인을 변경하지 않으므로 대안이 없습니다 (바이너리 패치는 옵션이 아니며 공급자를 전환하는 것도 아닙니다).iOS 프레임 워크 심볼 재정의

원하지 않는 로깅을 걸러 내고 다른 로깅 호출을 원래의 NSLog에 위임 할 수있는 자신의 NSLog 심볼을 정의 할 수 있습니까? 애플이 핵심 프레임 워크 심볼을 오버라이드하는 앱을 거부 할 것인가?

+1

예, 시스템 정의와 동일한 정의를 사용할 수 있습니다. NSLog는 가변 인수 (args의 수를 받아들이는)이기 때문에 우선적 인 구현에서는 NSLogv와 같은 것이 필요할 것이다. 프레임 워크가 앱 바이너리와 연결된 dylib 또는 정적 라이브러리입니까? NSLog를 무시하면 후자의 경우에만 작동합니다. 최후의 수단으로 NSLog를 완전히 침묵시킬 수 있습니다. http://stackoverflow.com/a/12611692/5329717 –

+0

@ Kamil.S 왜 댓글이 올까요? 조금 더 많은 정보 (선호하는 코드 샘플)를 추가하면 훌륭한 대답처럼 보입니다! – Losiowaty

답변

2

예입니다. 이 코드를 .m 파일에 넣을 수는 있지만 AppDelegate를 사용하는 것이 좋습니다.

// Objective-C code 
void NSLog(NSString *format, ...) { 

    //You'll probably want some logic here to determine the issuer of NSLog 
    //and silence it(aka return) if necessary 

    va_list args; 
    va_start(args, format); 
    NSLogv(format, args); 
    va_end(args); 
} 

NSLog를 재정의하는 것은 프레임 워크가 dylib가 아닌 경우에만 작동합니다. 최후의 수단으로 stderr를 리디렉션하여 NSLog를 완전히 침묵시킬 수 있습니다. stackoverflow.com/a/12611692/5329717