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