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

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

导入第三方:AFNetWorkinng

- (void)viewDidLoad
{[super viewDidLoad];AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];[manager GET:@"http://mobile.ximalaya.com/m/category_tag_list?category=entertainment&device=iPhone&type=album" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"%@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", [error localizedDescription]);}];}

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

#import <Foundation/Foundation.h>@implementation NSDictionary (Log)//+ (void)load
//{
//    NSLog(@"11");
//}- (NSString *)descriptionWithLocale:(id)locale
{NSMutableString *str = [NSMutableString string];[str appendString:@"{\n"];[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {[str appendFormat:@"\t%@ = %@, \n", key, obj];}];[str appendString:@"}"];// 删除最后一个,NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];[str deleteCharactersInRange:range];return str;
}@end@implementation NSArray (Log)- (NSString *)descriptionWithLocale:(id)locale
{NSMutableString *str = [NSMutableString string];[str appendString:@"[\n"];[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {[str appendFormat:@"\t\t%@,\n", obj];}];[str appendString:@"]"];// 删除最后一个,NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];[str deleteCharactersInRange:range];return str;
}@end

最终效果:

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

1.在AppDelegate.m中创建函数实现以下代码块:
- (void)redirectNSlogToDocumentFolder
{NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentDirectory = [paths objectAtIndex:0];NSString *fileName = [NSString stringWithFormat:@"MrNSLog.txt"];// 注意不是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);
}
2.在didFinishLaunchingWithOptions中调用 :
[self redirectNSlogToDocumentFolder];

最后配置共享文件夹:

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

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

<pheiti sc="" light'"="">

iOS中 加强日志输出 开发技术总结相关推荐

  1. 9 个技巧,解决 K8s 中的日志输出问题

    作者 | 元乙  阿里云存储服务技术专家 导读:近年来,越来越多的同学咨询如何为 Kubernetes 构建一个日志系统,或者是来求助在此过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是作者想 ...

  2. iOS 7 iPhone iPad应用开发技术详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS 7 iPhone iPad应用开发技术详解 本书内容全面,从 Objective-C语法知识.iOS功能特 性,到高级 ...

  3. iOS 7: iPhone/iPad应用开发技术详解

    iOS 7: iPhone/iPad应用开发技术详解 作者:刘一道 出版社:机械工业出版社 出版年:2013-11 页数:507 定价:79.00元 ISBN:9787111440512 样章下载:h ...

  4. python logger filter_使用Filter过滤python中的日志输出的实现方法

    事情是这样的,我写了一个tornado的服务,过程当中我用logging记录一些内容,由于一开始并没有仔细观察tornado自已的日志管理,所以我就一般用debug来记录普通日志,error记录有问题 ...

  5. SpringBoot中LogBack日志输出配置记录

    <?xml version="1.0" encoding="UTF-8"?><!-- Created by jinKai on 2017/1/ ...

  6. 在iOS中进行Mapbox地图开发杂谈

    最近因项目需要,在app中要集成Mapbox,并且要能与苹果地图切换使用.从最早认识Mapbox到最终集成完毕,中间有一些断断续续,但总的时间也不算短了,关于这方面的资料其实是比较少的,能参考的基本都 ...

  7. log4j中用变量配置日志输出文件位置

    http://sharep.blog.51cto.com/539048/143734 log4j中配置日志文件相对路径 2009-03-30 18:52:55 标签:log4j 休闲 职场 这篇文章写 ...

  8. unity 如何获取到屏幕中间_Unity通用渲染管线Shader日志输出工具

    这是侑虎科技第700篇文章,感谢作者邹春毅供稿.欢迎转发分享,未经作者授权请勿转载.如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨.(QQ群:793972859) 作者主页:https://w ...

  9. 理解正确的日志输出级别

    原文链接:http://macrochen.iteye.com/blog/1399082 很多程序员都忽略了日志输出级别, 甚至不知道如何指定日志的输出级别. 相对于System.out来说, 日志框 ...

最新文章

  1. WMI技术介绍和应用——总结(完)
  2. Java项目:在线高中考试系统(java+SSM+Jsp+Mysql+Maven)
  3. 5.慎重选择删除元素的方法
  4. 外部 Storage Provider - 每天5分钟玩转 Docker 容器技术(149)
  5. 五大板块(2)—— 指针
  6. 在CentOS上使用Jexus托管运行 ZKEACMS
  7. AUTOSAR从入门到精通100讲(三十七)-AUTOSAR 通信服务-ComM配置及代码分析
  8. windows中安装64位MySQL及连接MySQL和重置MySQL密码
  9. 81-spark异常总结1
  10. php表示昨天_php输出各种时间代码表示
  11. linux查看电脑硬件信息,Linux下查看电脑硬件配置【转】
  12. 单片机ADC采样算法----中位值滤波法
  13. CCRD_TOC_2008年第1期
  14. 学python买什么书-想学python看哪些书
  15. Spring Boot pom文件
  16. 用tomcat6修改java内存_Tomcat 服务器内存修改
  17. PSP超强自制系统3.52 M33最新傻瓜安装指南(Dark Alex-OE系统接班人)
  18. 模电 2个NPN管组成的恒流源电路分析
  19. 【转载】uTorrent缓存设置,防止出现磁盘负荷100%
  20. HashTab的基本用法

热门文章

  1. IBM---Java 多线程与并发编程专题
  2. 为Web应用建立基于JMX的管理系统
  3. hdu 4309 最大流 + DFS
  4. 浮点数 IEEE表示 舍入 运算
  5. 【数字信号处理】基本序列 ( 单位阶跃序列 | 单位阶跃序列与单位脉冲序列关系 | 矩形序列 | 矩形序列与单位阶跃序列关系 | 矩形序列作用 )
  6. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )
  7. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
  8. 【错误记录】发布 Flutter 插件包报错 ( Failed to upload the package.pub finished with exit code 1 )
  9. 【错误记录】发布 Flutter 插件包报错 ( It‘s strongly recommended to include a “homepage“ or “repository“ field )
  10. 【设计模式】原型模式 ( 概念简介 | 使用场景 | 优缺点 | 基本用法 )