我正在使用的第三方二进制库之一有一个不幸的NSLog
语句,我想在运行时避免它(它泄漏个人信息)。框架开发人员不愿意改变这一行,我没有其他选择(二进制修补不是一个选项,也不是切换提供者)。
是否可以定义我自己的NSLog
符号,用于过滤掉不需要的日志记录并将其他日志记录调用委托给原始NSLog? Apple会拒绝一个覆盖核心框架符号的应用程序吗?
答案 0 :(得分: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 stackoverflow.com/a/12611692/5329717
来完全沉默NSLog