如何校验.ipa包、.dSYM、.crash文件的一致性

前言

为了对线上一些崩溃进行有效的监控和处理,一般我们会对崩溃信息进行统计。在处理崩溃信息的过程中,往往会需要找到这次崩溃信息对应的是哪一次的构建结果,这要怎么做?(假如你的应用中使用的crash统计工具已经集成了分析功能的可以忽略本文。)

问题及解决方案

  1. 怎么确认我测试中的版本某次的crash信息对应的是哪次构建?

    每个可执行文件都有一个构建UUID,唯一标识它。crash日志包括崩溃的应用程序的构建UUID和崩溃时所加载的所有库。你需要验证构建版本的UUID和crash信息包含的UUID是否一致即可。

  2. 如和查看crash日志和构建的UUID信息
    • 查看crash日志的构建UUID

      ①使用xcode连接崩溃设备,打开window->organizer,左侧应用列表选中你的app,顶部tab切换到crash,找到你的crash,右键菜单show in finder->显示包内容->/DistributionInfos/all/Logs,即可看到当前类型的所有闪退列表。

      ②在终端执行以下命令。

      $ grep --after-context=2 "Binary Images:" Example.crash
      

      你会看到类似这样的结果:

        Binary Images:
          0xb6000 - 0xb7fff +Example armv7 <270a9b9d7a333a4a9f1aaf8186f81394> /var/mobile/Applications/28D4F177-D312-4D3B-A76C-C2ACB4CB7DAD/Example.app/Example
          0x2feb5000 - 0x2fed6fff  dyld armv7 <4a817f3e0def30d5ae2032157d889c1d> /usr/lib/dyld
      

    这里,构建UUID是270a9b9d7a333a4a9f1aaf8186f81394,和路径应用程序的可执行文件是Example.app/Example。

    • 如何查看一个.ipa包的UUID

      ①解压.ipa文件

      $ cp Example.ipa Example.zip
      $ unzip Example.zip
      

      解压结果查看:

      $ cd Payload
      $ ls
      Example.app
      

      ②你在终端可以使用以下命令打印一个可执行的构建UUID

      $ xcrun dwarfdump --uuid Example.app/Example
      

      示例结果:

      UUID: 270A9B9D-7A33-3A4A-9F1A-AF8186F81394 (armv7) Example.app/Example
      UUID: 7711EC60-C0B2-3608-A539-182C77AE01ED (armv64) Example.app/Example
      
    • 如何查看.dDYM文件的UUID

      ①使用终端输入以下命令即可

      $ dwarfdump --uuid /Users/wusuowei/Desktop/Example.dSYM
      

      示例结果:

      UUID: FEB022C4-F950-37DD-8D19-D4C63D1D1474 (armv7) /Example.dSYM/Contents/Resources/DWARF/Example
      UUID: 250F0F9E-7855-3347-900A-F555442C9F29 (arm64) /Example.dSYM/Contents/Resources/DWARF/Example
      

参考

How to Match a Crash Report to a Build

相关

iTunesconnect 缺失Beta版权利

时间: 2024-12-20 09:59:12

如何校验.ipa包、.dSYM、.crash文件的一致性的相关文章

Python3将ipa包中的文件按大小排序

给你个ipa包,解压前输出包大小,解压后把里面的文件按大小排序.代码如下: import os import shutil import zipfile _ipa_zip_path = lambda ipa_path: ipa_path.replace('.ipa', '.zip') _file_size = lambda file_path: os.path.getsize(file_path) / 1024 / 1024 def unzip(zip_path: str) -> str: di

IPA包里面的文件

_CodeSignature/CodeResources ?? archived-expanded-entitlements.xcent Xcode6 新生成的. keychain-access-groups: Keychain access groups allows an application to use the system keychain to store values (passwords) Keychain access groups are set by default on

教你如何获取ipa包中的开发文件

1. 从iTunes获取到ipa包 2. 修改ipa包然后获取里面的开发文件

ios bitcode 机制对 dsym 调试文件的影响

今天想试试用dsym和crash文件跟踪crash信息,可是一直返回如下信息: Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libsystem_kernel.dylib 0x23269c84 __pthread_kill + 8 1 libsystem_pthread.dylib 0x2330bb46 pthread_kill + 62 2 libsystem_c.dylib 0x232000c

[iOS]使用symbolicatecrash分析crash文件

对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug.一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还好有几个好心同事下载了,然后果然有两台机器上出现了闪退.真是天无绝人之路,最重要的crash文件有了.下面我就来详细描述一下具体的心路历程以及分析方法. iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩

使用symbolicatecrash分析crash文件

对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug.一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还好有几个好心同事下载了,然后果然有两台机器上出现了闪退.真是天无绝人之路,最重要的crash文件有了.下面我就来详细描述一下具体的心路历程以及分析方法. iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩

iOS- 全方位解析.crash文件崩溃报告

1.前言 想来每个iOS攻城狮,都免不了要接触.crash文件 那么什么是.crash文件? iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩溃过的机器,然后从崩溃过的机器上导出.crash文件 2.如何解析.crash文件 我们先看一眼导出来的.crash文件,重点看下崩溃部分的记录 如下图 显然从这图里,我们没法定位出具体的错误,和崩溃的具体行数. 我们得到是个二进制的报告,这时候我们需要对它进

iOS: Crash文件解析(一)

iOS Crash文件的解析(一) 开发程序的过程中不管我们已经如何小心,总是会在不经意间遇到程序闪退.脑补一下当你在一群人面前自信的拿着你的App做功能预演的时候,流畅的操作被无情地Crash打断.联想起老罗在发布Smartisan OS的时候说了,他准备了10个手机,如果一台有问题,就换一台,如果10台后挂了他就不做手机了.好了不闲扯了,今天就跟大家一起聊聊iOSCrash文件的组成以及常用的分析工具. 有一个WWDC 2010的视频推荐大家抽空看看,视频名称“Understanding C

分析iOS Crash文件:符号化iOS Crash文件的3种方法

转自:http://www.cocoachina.com/industry/20140514/8418.html 转自wufawei的博客 当你的应用提交到App Store或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文件 你的应用应当有模块能够在应用程序crash的时候上传crash信息. 要么通过用户反馈拿到crash文件,要么借助自己或第3方的crash上传模块拿到crash文件. 今天要分析的场景是你拿到用户的.crash文件之后,如何