覆盖 iOS 框架符号
Overriding an iOS framework symbol
我正在使用的第三方二进制库之一有一个不幸的 NSLog
语句,我想在运行时避免它(它会泄露个人信息)。框架开发人员不愿意更改此行,我别无选择(二进制补丁不是一个选项,也不是切换提供程序)。
是否可以定义我自己的 NSLog
符号,我可以使用它来过滤掉不需要的日志记录并将其他日志记录调用委托给原始 NSLog? Apple 会拒绝覆盖核心框架符号的应用程序吗?
是的。您可以将此代码放入任何 .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);
}
仅当框架不是 dylib 时,覆盖 NSLog 才有效。作为最后的手段,您可以通过重定向 stderr whosebug.com/a/12611692/5329717
来完全静音 NSLog
我正在使用的第三方二进制库之一有一个不幸的 NSLog
语句,我想在运行时避免它(它会泄露个人信息)。框架开发人员不愿意更改此行,我别无选择(二进制补丁不是一个选项,也不是切换提供程序)。
是否可以定义我自己的 NSLog
符号,我可以使用它来过滤掉不需要的日志记录并将其他日志记录调用委托给原始 NSLog? Apple 会拒绝覆盖核心框架符号的应用程序吗?
是的。您可以将此代码放入任何 .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);
}
仅当框架不是 dylib 时,覆盖 NSLog 才有效。作为最后的手段,您可以通过重定向 stderr whosebug.com/a/12611692/5329717
来完全静音 NSLog