开发者社区> ghost丶桃子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发:下架App的步骤
首先登陆你的 iTunes Connect
0 0
iOS 福利来了,方便开发的工具库集合(四)
iOS 福利来了,方便开发的工具库集合
0 0
iOS 福利来了,方便开发的工具库集合(三)
iOS 福利来了,方便开发的工具库集合
0 0
iOS 福利来了,方便开发的工具库集合(二)
iOS 福利来了,方便开发的工具库集合
0 0
iOS 福利来了,方便开发的工具库集合(一)
iOS 福利来了,方便开发的工具库集合
0 0
2022 ios APP最新iOS开发上架测试教程
2022 ios APP最新iOS开发上架测试教程
0 0
[ios开发]-APP-上架流程
由于苹果的机制,在非越狱机器上安装必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节。 AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传Appstore作了支持。 本文从三个流程来介绍如何实现AppCan在 线编译出ipa包,以及上传到苹果Appstore。
0 0
iOS开发之打包上传到App Store——(一)各种证书的理解
iOS开发之打包上传到App Store——(一)各种证书的理解
0 0
IOS APP开发:苹果app从开发到上架教程详解
IOS APP开发:苹果app从开发到上架教程详解
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
深入剖析 iOS 性能优化
立即下载
移动 App 性能监测实践(iOS篇)
立即下载
移动App性能监测实践(ios篇)
立即下载