iOS开发之如何关闭Xcode控制台的所有输出

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_15509071/article/details/82804887

一运行工程发现控制台输出一大堆内容,怎么把它关掉呢。

1.原始的打印数据包括xcode打印的,第三方库的,还有自己写的

2.通过在pch里,宏定义把NSLog替换后发现少了很多自己写的打印

#define NSLog(...) //NSLog(__VA_ARGS__)

3.[DYMTLInitPlatform] platform initialization successful是怎么回事

经搜索得知在Edit Scheme->Options下把GPU Frame Capture 和它下边的Metal API Validation 关闭即可 

4.然后会剩下这些

这些都是第三方库里面的输出,比如:听云 高德个推

5使用fishhook替换一些输出函数(fishhook很简单就一个.h一个.m使用也很简单,如果需要可以联系我要demo工程)

先替换NSLog

static void (*orig_NSLog)(NSString *format, ...);

void my_NSLog(NSString *buts, ...){

}


rebind_symbols((struct rebinding[1]){ {"NSLog", my_NSLog, (void *)&orig_NSLog}}, 1);



int fd = open(argv[0], O_RDONLY);
uint32_t magic_number = 0;
read(fd, &magic_number, 4);
printf("Mach-O Magic Number: %x \n", magic_number);
close(fd);

发现少了一些

6.继续替换 printf发现没有变化 ,替换NSLogv就只剩一条了

int my_printf(const char * ss, ...) {
    return 0;
//    return orig_printf(ss);
}
static void (*orig_NSLogv)(NSString *format,va_list args);
void  my_NSLogv(NSString *format,va_list args){
    
}
        rebind_symbols((struct rebinding[1]){ {"NSLogv", my_NSLogv, (void *)&orig_NSLogv}}, 1);
//
        rebind_symbols((struct rebinding[1]){ {"printf", my_printf, (void *)&orig_printf}}, 1);

7.CUICatalog: Invalid asset name supplied: 是因为[UIImage imageNamed:@""]后面的名字是空的,修改一下即可

8.至此所有日志都没了

还有另一个方法 只需几行代码 上面的步骤都省了 

#pragma mark - 用户方法,将输出信息写入到dr.log文件中;
// 将打印信息保存到Document目录下的文件中
- (void)redirectNSlogToDocumentFolder
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [paths objectAtIndex:0];
    NSString *fileName = [NSString stringWithFormat:@"dr.log"];// 注意不是NSData!
    NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
    // 先删除已经存在的文件
    NSFileManager *defaultManager = [NSFileManager defaultManager];
    [defaultManager removeItemAtPath:logFilePath error:nil];
    
    // 将log输入到文件
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}

猜你喜欢

转载自blog.csdn.net/qq_15509071/article/details/82804887