本文转自https://www.jianshu.com/p/fbca51e3f561
一、背景 Xcode9.2
本地怎么测试都OK,App审核传一次拒一次,说什么"crashed on launch"。App审核被拒,就给了三个crash文件和 一个链接Technical Note TN2151
Understanding and Analyzing Application Crash Reports
ylmb.png
1.一启动就crash被拒.png
2.crashlog.png
二、符号化苹果审核给的crash文件
准备工作:
第一个是.dSYM文件(debug System) ,
第二个是苹果审核给你的crashlog.crash(需要将.txt后缀强制改为.crash后缀)
第三个是Xcode自带的 symbolicatecrash 工具
步骤:
在桌面新建一个AppCrash文件夹
右键下载crashlog-713FFD98-89E3-43EB-8834-4A93E425D100.txt,然后强制将.txt改为 .crash。eg:重新命名为crashlog.crash. 放入AppCrash文件夹中
获取 .dSYM文件, 先.Xcode --》Window--》Organizer 显示所有打包的Archives--》选着一个archives右键---》Show in Finder--->进入 . xcarchive文件 ;再 右键'显示包内容' ---》复制 .dSYM文件到步骤一中创建的文件夹中。
3-1.显示所有打包的Archives.png
[图片上传中...(3.显示所有打包的Archives.png-54f6ed-1519728242953-0)]
3-3按住option见拖拽.dSYM文件到桌面.png
4 . 获取 Xcode自带symbolicatecrash工具。
方式一:终端命令获取
终端命令获取文件路径,有点慢,选中Finde图标---》右键前往文件夹----》按住alt键复制一份到桌面。 find /Applications/Xcode.app -name symbolicatecrash -typef
4-1获取symbolicatecrash文件路径.png
4-2前往文件夹.png
4-3复制一份到桌面.png
方式二:直接按照这个文件路径去找:应用程序--》Xcode--》显示包内容
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
4-4按照路径找.png
准备工作完成,此时 AppCrash文件夹应该有三个文件
5.准备工作完成.png
终端敲命令
6-1 cd 进入文件路径
6-1cd进入文件路径.png
6-2 符号化奔溃日志。
记得中间要有空格
./symbolicatecrash crashlog.crash KISSLOCK.app.dSYM > symbol.crash
或者
./symbolicatecrash ./crashlog.crash ./KISSLOCK.app.dSYM > symbol.crash
6-3 如果上述命令出现如下报错
Error:"DEVELOPER_DIR"isnotdefined at ./symbolicatecrash line69.
就输入下面的这行代码
感谢wMellon指出问题.很棒,指出一点:export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer",Applications前面要加/,否则设置无效,自然也就一直报错了. 已修改。
exportDEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
如果还报错 就把symbolicatecrash这个工具删了,重新复制一遍symbolicatecrash前前后后尝试了20多次,就成功了一次,现在在,有不行了。
xcrun: error: missing DEVELOPER_DIR path: Applications/Xcode.app/Contents/DeveloperError: can't find tool named 'otool' in the macosx SDK or any fallback SDKs at ./symbolicatecrash line 122.
如果不报错,就接着执行这行命令,之后可以到桌面上的这个文件夹AppCrash查看符号化的奔溃日志 :symbol.crash
./symbolicatecrash ./crashlog.crash ./KISSLOCK.app.dSYM > symbol.crash
6-5 更正 少写一个斜杠.png
7 .符号化的的结果,如果运气好走到这一步
7-1执行命令成功.png
7-2定位bug
三、填坑
项目中做了国际化,还用了富文本,不同设备,不同iOS系统获取系统语言返回的返回的结果不一样,以前是zh-Hans-US这样,现在是zh-Hans-CN这样的。判断出问题了,富文本截取的时候越界,导致一启动就奔溃。
不同手机,不同系统得到的结果不一样的,这也就是为什么本地怎么测都是好的,一传上去就被拒绝:crashed on launch。
获取系统语言数组NSArray*laguageArr = [[NSUserDefaultsstandardUserDefaults] objectForKey:@"AppleLanguages"];
设备iOS版本结果
5s11.2.5(15D60)"zh-Hans-CN"
6p11.2.5(15D60)"zh-Hans-US" , "en-US"
610.3.2(14F89)Xcode9.2 无法真机调试
用6p升级到11.2.5系统,确实是一启动就闪退。改代码,重新上传。填了一个坑,又来了一个坑,继续被拒。
根据符号化的奔溃日志定位bug.png
填坑2定位bug.png
填坑2最新系统国际化字段有变.png
本地打全局断点调试,奔溃信息和苹果反馈的奔溃日志和符号化的奔溃日志对比着看下,有些地方很相识。
填坑3 本地调试.png
四:参考链接
2.解析苹果审核反馈的奔溃日志.txt / .crash 文件
3.Understanding and Analyzing Application Crash Reports建议看一遍(帮助不大,但是有用)