大家好,关于iOS>友盟错误分析很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
前提
该应用集成了友盟的bug收集功能。
友盟的错误分析和错误列表里有数据。
主要议题
错误详情.png
当你点击它时,错误列表基本上看起来像这样。这样不方便我们及时定位错误。
解决
首先将要分析的程序打包
包装.png
瞄准了错误的地方
错误定位.png
终于
瞄准错误的地方,然后修复它。
分析工具代码(应群主要求)秦晓峰
12345678910111213NSString *archivesPath=[NSHomeDirectory() stringByAppendingPathComponent:@’Library/Developer/Xcode/Archives/’];NSURL *bundleURL=[NSURL fileURLWithPath:archivesPath];NSDirectoryEnumerator *enumerator=[fileManager enumeratorAtURL333 60bundleURLincludePropertiesFor Keys:@[NSURLNameKey, NSURLIsDirectoryKey]options:NSDirectoryEnumerationSkipsHiddenFileserrorHandler:^BOOL(NSURL * url, NSError *error){if (error) {NSLog(@'[Error] %@ (%@)’, error, url);return NO;}return YES;}];以上代码是获取Library /Xcode/Archives/下的/Developer 文件夹。这就是为什么包装是第一步。
过滤器以支持xcarchive 文件和dSYM 文件
1234567891011121314151617181920_archiveFilesInfo=[NSMutableArray arrayWithCapacity:1];for(NSString *filePath in filePaths){ArchiveInfo *archiveInfo=[[ArchiveInfo alloc] init];NSString *fileName=filePath.lastPathComponent;//支持xcarchive文件和dSYM文件。 if ([fileName hasSuffix:@’.xcarchive’]){archiveInfo.archiveFilePath=filePath;archiveInfo.archiveFileName=fileName;archiveInfo.archiveFileType=ArchiveFileTypeXCARCHIVE;[self formatArchiveInfo:archiveInfo];}else if([fileName hasSuffix:@’.dSYM’]) {archiveInfo.dSYMFilePath=filePath;archiveInfo.dSYMFileName=fileName;archiveInfo.archiveFileType=ArchiveFileTypeDSYM;[self formatDSYM:archiveInfo];}else{continue;}[_archiveFilesInfo addObject:archiveInfo];} 点击分析按钮,程序到底做了什么?
所需参数
UUID 类型
UUID可执行文件路径
幻灯片地址
内存地址错误
核心代码
12345678910111213141516171819202122- (NSSTRING *) Runcommand: (NSSTRING *) CommandTorun {nstask *task=[[nstask alloc]; chpath:@’/bin/sh’]; nsarray *arguments=@[@’-c’, [ NSString stringWithFormat:@’%@’, commandToRun]];//NSLog(@’运行command:%@’, commandToRun);[任务setArguments:arguments];NSPipe *pipe=[ NSPipe pipeline];[task setStandardOutput:pipe];NSFileHandle *file=[pipe fileHandleForReading];[task launch];NSString *output=[[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding];return output;}commandToRun: 里面是上面写的4个参数
1xcrun atos -arch arm64 -o ‘Slide Address’ 内存地址错误NSTask:它是MAC OS X 用来执行系统命令的类库。其功能类似于PHP的exec。
启动路径
可执行文件的路径
论据
友盟错误分析” />
用于启动可执行文件的命令参数。
【任务启动】
开始任务
标准输出
设置接收到的输出类型。
NSPipe:单向通信通道。 NSPipe 对象代表管道的两端,可以通过管道进行通信。管道是相关进程之间的单向通信通道;一个进程写入数据,而另一个进程读取数据。通过管道的数据被缓冲;缓冲区的大小由底层操作系统决定。
[管道文件句柄读取]
执行文件末尾的语句。
NSFileHandle:文件描述符的面向对象包装器。
同步读取可用数据,直到文件末尾或最大字节数。返回值是NSData。
通过atos工具手动输出错误地址(Mac平台)
有一个开源的atos
iOS打包文件会有dSYMs文件夹
找到打包文件,右键显示打包内容。
点击进入dSYMs文件夹,右键显示XXX.app.dSYM包的内容
找到DWARF 文件夹
打开终端cd DWARF 文件夹
xcrun atos -arch arm64 -o 程序名错误的内存地址
然后按回车键,就会输出并显示相应的错误代码和行号。
原则
iOS使用的文件结构是DWARF文件结构(Debug With Attributed RecordFormats),这是一种调试文件结构标准,结构相当复杂。
XXX.app.dSYM 是一个二进制文件。它包含应用程序崩溃后的堆栈信息。
崩溃日志.png
如上图所示,第4 行包含发生崩溃的页面和方法的名称。但我找不到确切的行数。
Mac OS X平台下的Xcode自带了atos等工具,可以用来去符号化,直接定位文件的具体位置。
如果您想了解更多,可以拨打《Mach-O二进制文件解析》
这个工具是dSYMTools
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126043.html
用户评论
花容月貌
这篇博文说的真对啊!使用友盟统计确实能帮助我们更好地了解APP使用情况,及时发现问题并进行修复。最近我们遇到了一个崩溃问题,通过友盟的错误报告功能很快找到了问题所在,解决了用户体验不好的状况。
有20位网友表示赞同!
羁绊你
iOS开发来说友盟错误分析确实很方便,可以直观的看到各种错误信息和用户的手机型号等,但希望能有更详细的日志解析功能,这样能更快找到问题的根源。
有18位网友表示赞同!
南初
对于初学者来说,这篇文章写的比较容易理解。之前一直使用其他的错误分析工具,感觉友盟还是比较轻量级好用,而且免费版本的功能已经很丰富了。
有15位网友表示赞同!
话少情在
别的不说,友盟的页面设计就十分友好,一目了然,很容易上手!以前用过其他平台的数据展示模式,真心容易看晕头。
有8位网友表示赞同!
莫飞霜
感觉这篇文章有点 thiên vị。友盟虽然功能完善,但是很多时候服务器比较慢,导致数据更新延迟很大,有时候还不能及时准确反馈错误信息,影响了我们后续的开发工作效率。
有18位网友表示赞同!
别悲哀
作为一个安卓开发者,看到iOS开发平台的文章还是有些感慨。希望以后友盟也能像在安卓平台上一样提供更全面的功能和服务。
有13位网友表示赞同!
有恃无恐
对于友盟的使用频率来说,我觉得确实很方便,因为它能帮助我们发现问题并及时修复。但最关键的是,还要结合自己的实际需求选择合适的工具!
有13位网友表示赞同!
海盟山誓总是赊
这个错误分析的案例分析的很有趣!让我更清楚地了解了如何通过友盟数据来找到崩溃的核心原因。
有18位网友表示赞同!
迷路的男人
对于一些大型应用来说,友盟可能无法满足所有需求,需要考虑其他解决方案才能更好的进行代码优化和问题定位。
有14位网友表示赞同!
抓不住i
iOS开发这块确实越来越重要了,学习相关工具也非常有必要。我也打算尝试一下友盟的错误分析功能,看看能不能更好地提升App的用户体验!
有6位网友表示赞同!
苍白的笑〃
我最近也在使用友盟做一些数据分析,发现它的操作界面还是比较直观易懂的。但是对于复杂的数据处理,可能还需要结合其他的分析工具才能更深入地挖掘信息。
有11位网友表示赞同!
从此我爱的人都像你
我觉得友盟这篇文章挺好的,介绍的非常全面,包含了各种关键点。希望以后能分享更多关于iOS开发和友盟使用方面的经验!
有13位网友表示赞同!
鹿先森,教魔方
这个博文写的很棒!我已经将友盟错误分析功能集成到我的项目中,确实提高了代码质量,让APP更加稳定运行!
有19位网友表示赞同!
未来未必来
感觉友盟的报告数据比较浅层化,缺乏对用户行为的深入分析。希望可以加入更强大的功能来帮助开发者更好地理解用户的需求和使用习惯!
有5位网友表示赞同!
追忆思域。
iOS平台上有很多优秀的错误分析工具,除了友盟之外,我还在探索其他的解决方案。每个工具都有自己的优缺点,需要根据具体需求进行选择!
有11位网友表示赞同!
命运不堪浮华
对于一些中小企业的应用来说,友盟的功能已经足够满足了。而且免费版就提供了许多基础功能,性价比相当高!
有18位网友表示赞同!
鹿叹
希望友盟能够继续改进,提供更精准的错误定位和分析结果,帮助开发者更好地解决问题和优化APP!
有10位网友表示赞同!