版权声明:本文为博主原创文章,转载请注明出处。 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);
}