在做iOS性能调优的时候,肯定会用到Instrument。之前都用得好好的,可以定位到具体的代码段执行了多长时间。但这次抽风似的,无论如何都不能再Xcode看到源码。网上也没找到很好的解决方法。
原理
只有知道了原理我们才可能找到解决办法。为什么在Instrument能够统计代码执行的时间,消耗的资源等等。根本原因在于DSYM文件。
dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件。简单来讲dSYM是我们打的包和源代码之间的桥梁,通过dSYM我们能够查到崩溃日志对应哪几行,执行对应是哪段代码。
顺便说说Xcode中的Organize。如果设备打开了日志收集功能,我们可以看到里面的崩溃信息,点击右边的Open in Project,可以直接定位到崩溃代码位置。
![](https://img.haomeiwen.com/i664334/78b5cd3203168d18.png)
这里的原理同样是DSYM文件起的作用,每次发布release包,都会生成一个dsym文件。路径是:~/Library/Developer/Xcode/Archives
![](https://img.haomeiwen.com/i664334/8ddedf900cc4dc5c.png)
显示*.xarchive
包内容就能看到如下内容。
![](https://img.haomeiwen.com/i664334/6af8a055234ac12c.png)
解决办法
知道了原理就容易找到解决问题的办法。
一、确保生成了dsym文件
在buildsetting 里面找到Debug Information Format
,看看是否是如下设置
![](https://img.haomeiwen.com/i664334/9c2901c77ecd05ed.png)
二、自定义dsym文件、二进制文件搜索路径
如果上面的方法还是不能解决,那就得用这种方法。
这个问题也是很奇葩,我是在Xcode9中发现这个问题,猜测跟自己之前改变了Derived Data的路径,导致Xcode找不到对应的路径有关。现在只需要设置好路径即可,不过这步骤也是有点麻烦。
![](https://img.haomeiwen.com/i664334/ef5b3c1f044817f7.png)
- 点击Record
![](https://img.haomeiwen.com/i664334/8f0be5c27de3e2c3.png)
- 关闭Record、打开File、选择Symbol
![](https://img.haomeiwen.com/i664334/bcd33cdc124db877.png)
- 查看路径
![](https://img.haomeiwen.com/i664334/6c09ce3b298933e5.png)
很明显可以看到这里的路径不对,是红色的,也就是没找到。
- 设置好对应的路径
这里举个例子。找到*.app
对应二进制文件路径,*.app.dsym
对应dsym路径
![](https://img.haomeiwen.com/i664334/2f3ecdb0658cb1b4.png)
然后在重新Record。之后就能看到了人头像了
![](https://img.haomeiwen.com/i664334/5beaf2f6a375fec1.png)
网友评论