覆盖iOS框架符号

时间:2017-04-12 16:44:45

标签: ios objective-c mach-o

我正在使用的第三方二进制库之一有一个不幸的NSLog语句,我想在运行时避免它(它泄漏个人信息)。框架开发人员不愿意改变这一行,我没有其他选择(二进制修补不是一个选项,也不是切换提供者)。

是否可以定义我自己的NSLog符号,用于过滤掉不需要的日志记录并将其他日志记录调用委托给原始NSLog? Apple会拒绝一个覆盖核心框架符号的应用程序吗?

1 个答案:

答案 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