iOS中 加强日志输出 开发技术总结

简介:

对于那些做后端开发的工程师来说,看LOGBug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额。而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退。一遍一遍的用XCode取应用崩溃记录、解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测。

对于真机,日志没法保存,不好分析问题。所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析。

导入第三方:AFNetWorkinng

[objc]  view plain  copy
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.       
  5.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  6.     [manager GET:@"http://mobile.ximalaya.com/m/category_tag_list?category=entertainment&device=iPhone&type=album" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  7.           
  8.         NSLog(@"%@", responseObject);  
  9.           
  10.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  11.         NSLog(@"%@", [error localizedDescription]);  
  12.     }];  
  13.       
  14.       
  15. }  

给其写一个类目:Foundation+Log.m

[objc]  view plain  copy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. @implementation NSDictionary (Log)  
  4.   
  5. //+ (void)load  
  6. //{  
  7. //    NSLog(@"11");  
  8. //}  
  9.   
  10.   
  11. - (NSString *)descriptionWithLocale:(id)locale  
  12. {  
  13.     NSMutableString *str = [NSMutableString string];  
  14.     [str appendString:@"{\n"];  
  15.       
  16.       
  17.     [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOLBOOL *stop) {  
  18.         [str appendFormat:@"\t%@ = %@, \n", key, obj];  
  19.     }];  
  20.       
  21.     [str appendString:@"}"];  
  22.       
  23.     // 删除最后一个,  
  24.     NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];  
  25.     [str deleteCharactersInRange:range];  
  26.       
  27.       
  28.     return str;  
  29. }  
  30.   
  31. @end  
  32.   
  33.   
  34.   
  35. @implementation NSArray (Log)  
  36.   
  37.   
  38. - (NSString *)descriptionWithLocale:(id)locale  
  39. {  
  40.     NSMutableString *str = [NSMutableString string];  
  41.     [str appendString:@"[\n"];  
  42.       
  43.       
  44.     [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOLBOOL *stop) {  
  45.         [str appendFormat:@"\t\t%@,\n", obj];  
  46.     }];  
  47.       
  48.     [str appendString:@"]"];  
  49.       
  50.     // 删除最后一个,  
  51.     NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];  
  52.     [str deleteCharactersInRange:range];  
  53.       
  54.       
  55.     return str;  
  56. }@end  


最终效果:



小技巧:iOS - 将控制台Log日志转为输出为文本文件

[plain]  view plain  copy
  1. 1.在AppDelegate.m中创建函数实现以下代码块:  
  2. - (void)redirectNSlogToDocumentFolder  
  3. {  
  4.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  5.     NSString *documentDirectory = [paths objectAtIndex:0];  
  6.     NSString *fileName = [NSString stringWithFormat:@"MrNSLog.txt"];// 注意不是NSData!  
  7.     NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];  
  8.     // 先删除已经存在的文件  
  9.     NSFileManager *defaultManager = [NSFileManager defaultManager];  
  10.    [defaultManager removeItemAtPath:logFilePath error:nil];  
  11.    // 将log输入到文件  
  12.     freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);  
  13.     freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);  
  14. }  
  15. 2.在didFinishLaunchingWithOptions中调用 :   
  16. [self redirectNSlogToDocumentFolder];  
最后配置共享文件夹:

在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。将您希望共享的文件放在应用程序的 Documents目录。一旦设备插入到用户计算机,iTunes9.1就会在选中设备的Apps标签中显示一个File Sharing区域。此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。


每日更新关注:http://weibo.com/hanjunqiang  新浪微博
<pheiti sc="" light'"="">



原文地址:http://blog.csdn.net/qq_31810357/article/details/50155677
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
数据采集 网络协议 开发工具
如何进行iOS技术博客的备案?
如何进行iOS技术博客的备案?
24 2
|
1月前
|
移动开发 安全 数据安全/隐私保护
iOS代码混淆和加固技术详解
iOS代码混淆和加固技术详解
33 0
|
3月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
4月前
|
网络安全 开发者 iOS开发
iOS技术博客:App备案指南
本文介绍了移动应用程序(App)备案的重要性和流程。备案是规范App开发和运营的必要手段,有助于保护用户权益、维护网络安全和社会秩序。为了帮助开发者更好地了解备案流程,本文提供了一份最新、最全、最详的备案指南,包括备案目的、好处、对象、时间、流程、条件和注意事项等内容。
iOS技术博客:App备案指南
|
7月前
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
232 0
|
2月前
|
人工智能 vr&ar Android开发
探索安卓与iOS系统的技术进展
【2月更文挑战第4天】本文将探讨安卓与iOS两大操作系统在最新技术进展方面的差异与相似之处。我们将分析它们在人工智能、增强现实、隐私保护等方面的创新和发展,并展望未来可能出现的趋势。通过对比这两个操作系统的技术特点,读者将能够更好地了解并选择适合自己需求的智能设备。
|
7月前
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
269 0
|
7月前
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
406 0
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
|
2月前
|
移动开发 安全 数据安全/隐私保护
iOS 代码混淆和加固技术详解
iOS 代码混淆和加固技术详解
|
3月前
|
存储 监控 iOS开发
【精品教程】如何查看iOS崩溃日志
当一个应用程序崩溃,会产生一个崩溃报告(crash report),并存储到设备中。崩溃报告描述了应用程序崩溃的条件,通常包含每个执行线程的完整回溯。查看崩溃报告可以帮助我们了解应用程序的崩溃情况,并尝试修复问题。