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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

对于那些做后端开发的工程师来说,看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日志并进行多维度分析。
相关文章
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
21天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
115 66
|
7天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
2月前
|
监控 开发者
鸿蒙5.0版开发:使用HiLog打印日志(ArkTS)
在HarmonyOS 5.0中,HiLog是系统提供的日志系统,支持DEBUG、INFO、WARN、ERROR、FATAL五种日志级别。本文介绍如何在ArkTS中使用HiLog打印日志,并提供示例代码。通过合理使用HiLog,开发者可以更好地调试和监控应用。
191 16
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
34 2
|
2月前
|
存储 安全 算法
深入探索iOS系统安全机制:保护用户隐私的前沿技术
本文旨在探讨苹果公司在其广受欢迎的iOS操作系统中实施的先进安全措施,这些措施如何共同作用以保护用户的隐私和数据安全。我们将深入了解iOS的安全架构,包括其硬件和软件层面的创新,以及苹果如何通过持续的软件更新来应对新兴的安全威胁。此外,我们还将讨论iOS系统中的一些关键安全功能,如Face ID、加密技术和沙箱环境,以及它们如何帮助防止未经授权的访问和数据泄露。

热门文章

最新文章