一个木匠

zqqf16 的个人博客

写了一个符号化 iOS Crash 的 Mac App - SYM

很久没写博客了,一是最近太忙,没空;二是不知道该写点啥。

前言

以前解析 Crash 的时候,我习惯用命令行工具,比如 symbolicatecrashatos。遇到特殊格式的 Crash log,比如友盟这样的,写个 Python 脚本就搞定了。

最近在工作中发现,不是所有人都喜欢用命令行,即使把脚本分享出去,用的人也是少数。索性就研究一下,写了职业生涯第一个 Mac App - SYM。

SYM 简介

先看看截图吧:

SYM Demo

目前的 SYM 实现了以下功能:

  1. 自动解析崩溃日志,提取加载地址、UUID 等信息。
  2. 根据 UUID 自动匹配 dSYM 文件。
  3. 支持 Apple、友盟的崩溃日志格式。
  4. 自动高亮关键 frame。

原理

对于 Apple 的 crash log,SYM 通过调用 Xcode 里内置的那个 symbolicatecrash Perl 脚本来符号化。而对于友盟,则在 SYM 上层通过日志解析来获取关键信息,然后通过 atos 来符号化。

dSYM 文件的自动匹配,是通过 Spotlight 来实现的。

下载地址

SYM 代码已开源,代码地址:https://github.com/zqqf16/SYM

PS: 第一个 Swift 项目,初学,较水,见谅

最新版本的下载地址:Github

开发感受

Mac

第一次接触 Mac App 的开发,一开始以为有 iOS 基础,没怎么看文档就直接上手了。结果发现 Mac 跟 iOS 差别很大,比如:

  • 坐标系不一样
  • NSWindow 的作用比 UIWindow 要大得多
  • NSView 默认不是 layer-based 的,设置个 background color 都费劲
  • NSTextView 怎么用怎么别扭

总的下来,感觉 Cocoa 比 Cocoa Touch 落后太多,整个开发过程都是面向 Stack Overflow 编程。

Swift

第一次用 Swift 写完整的 App,之前语法都没看全,用起来也不是很顺。比如:

  • 超级强大的 enum
  • struct 与 class 的选择
  • Optional 用起来感觉并不是很方便

总之,用 Swift,就得给大脑重新切换个上下文,抛弃 Objective-C 的思想。但是 Swift 的很多东西又基于 Objective-C,有时候还不得不切换回来...

最后

很久不写东西,有点生了,见谅。

还有,欢迎使用 SYM