[IOS] 类似 LeanCloud 的 Crash 收集实现

用惯了 crashlytics  ,Crash 收集功能的确很强大,各种 Crash 收集,而且实时给开发者发送邮件

详情见:唐巧一篇文章

国内的 Crash 的第三方,相比之下就 Low 很多,毕竟人家也是专业做 Crash 的,貌似被 Twitter收购了

但是你想过没有自己实现一个简单的 Crash 收集呢,比国内的第三方简陋些,可以实现基本功能呢?

先说 Crash ,App 最致命的问题,用户第一反应可以删,然后再说说对 Crash  怎么办?

NSDictionary  Crash ,Range 超过范围了Crash ,各种 Crash

首先想到的是, Try Catch ,实现如下:

    @try {
        // 1
        NSString *str = @"hello world";
        [str substringFromIndex:200]; // 程序到这里会崩
    }
    @catch (NSException *exception) {
        // 2
        NSLog(@"%s\n%@", __FUNCTION__, exception);
        //        @throw exception; // 这里不能再抛异常
    }
    @finally {
        // 3
        NSLog(@"最终,我还是执行啦");
    }
    // 4
    // 这里一定会执行
    NSLog(@"Yeah,pass");

有点意思,调试时方便很多,对数据模型处理时方便很多,但是总有想不到的Crash

同时 也看到一个对 基本数据类型、KVO 的 Crash 处理的 第三方还不错推荐下 DurexKit

http://code4app.com/ios/DurexKit%E5%AE%89%E5%85%A8%E5%B7%A5%E5%85%B7%E5%8C%85/5325b421933bf0463d8b49ec

回到正题,国内Crash收集是什么样子,比如 Crash 的 log ,给个 AVOS 的 Crash log

自己可不可以实现呢? 从邮件的信息看,基本和 AVOS Log  一致 可以实现简单的Crash 收集

代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // 最好放在其他代码之前
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);

    NSString *str = @"abc";
    [str substringFromIndex:111]; // 程序到这里会崩

    return YES;
}
void UncaughtExceptionHandler(NSException *exception) {
    /**
     *  获取异常崩溃信息
     */
    NSArray *callStack = [exception callStackSymbols];
    NSString *reason = [exception reason];
    NSString *name = [exception name];
    NSString *content = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];

    /**
     *  把异常崩溃信息发送至开发者邮件
     */
    NSMutableString *mailUrl = [NSMutableString string];
    [mailUrl appendString:@"mailto:[email protected]"];
    [mailUrl appendString:@"?subject=程序异常崩溃,请配合发送异常报告,谢谢合作!"];
    [mailUrl appendFormat:@"&body=%@", content];

    // 打开地址
    NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];
}

邮件内容如下,基本实现了AVOS的Crash 收集功能,收集设备型号、系统自行加代码:

时间: 2024-10-23 16:00:39

[IOS] 类似 LeanCloud 的 Crash 收集实现的相关文章

漫谈iOS Crash收集框架

漫谈iOS Crash收集框架 为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等.追求方便省心,对于保密性要求不高的程序来说,也可以选择各种一条龙Crash统计产品,如 Crashlytics,Hockeyapp ,友盟,Bugly 等等. 是否集成越多的Crash日志收集服务就越保险? 自己收集的Crash日志和系统生成的Crash日志有分歧,应该相信谁? 为什么有大量Crash日

ios 类似淘宝商品详情页面的效果

今天试着写ios 类似淘宝商品详情页面的效果 我用到的第三方库EGORefreshTableHeaderView下拉刷新的效果还有就是PWLoadMoreTableFooterView上拉加载更多 主要的思路在于UISCrollView两页,一页展示商品概况,另一页展示商品更多详情 首先,第一页的view包含一个UITableView,这个tableView实现PWLoadMoreTableFooterView中的delegate方法, 实现delegate代理方法的时候使用 - (void)s

iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息

Demo地址:https://github.com/ChenNan-FRAM/Fenvo (如果你觉得有用麻烦star一下感激不尽) Fenvo Objective-C, iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息.在这个过程我是遇到很多的问题,但是大部分都顺利解决了,相信如果你的项目有类似的地方我的项目里面也能够给你提供一定的帮助,如果需要,可以给我留言或者在Github上联系我. UI简陋,暂未完善.有UI大师指点就最好了. 这个应用我是从开始学后为了实践自己的能力一直在

iOS 类似外卖 两个tableView联动

在伯乐在线上看到一个挺好玩的文章,自己也参考文章实现了一下. 效果实现如图所示: 具体实现的内容可以参考原文,参考文章:<iOS 类似美团外卖 app 两个 tableView 联动效果实现> 首先,从界面上来看,很显然是两个UITableview上下滑动的效果.而这种滑动的效果核心是左边的tableView如何和右边的tableView进行关联,并且点击左边tableView之后右边的tableview也可以滑动到对应的section. 好了,分析完毕之后,我们应该清楚了我们的2个需求:1.

【转】swift实现ios类似微信输入框跟随键盘弹出的效果

swift实现ios类似微信输入框跟随键盘弹出的效果 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会跟随键盘一起向下收回,二者完全无缝连接,那么这是怎么实现的呢,也许你会说直接在键盘弹出的时候把输入框也向上移动不就行了?但是我使用这种方法的时候,发现效果十分不理想,会有明显的滞后现象,原因有以下几点: 键盘弹出动画并不是匀速,键盘和输入框的时间曲线不完全一致,运动不同步 各种键盘的高度不一样(比如

iOS开发工具——统计Crash的工具Crashlytics

简介 Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具.Crashlytics的使用者包括:支付工具Paypal, 点评应用Yelp, 照片分享应用Path, 团购应用GroupOn等移动应用. 2013年1月,Crashlytics被Twitter收购,成为又一个成功的创业产品.被收购之后,由于没有了创业公司的不稳定因素,我们更有理由使用它来分析应用崩溃信息. 使用Crashlytics的好处有: 1.Crashlytics不会漏掉任何应用崩溃信

React Native的iOS开发步骤以及崩溃收集

React Native的iOS开发以及崩溃收集 简介 React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP. React Native着力于提高多平台开发的开发效率 -- 仅需学习一次,编写任何平台.(Learn once, write anywhere) Facebook已经在多项产品中使用了React Native,并且将持续地投入建设React Native. 准备 安装 iOS只能MAC下开发,需要Xcode; An

IOS开发--常用工具类收集整理(Objective-C)(持续更新)

前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 1.让图片不要渲染的工具类 简介:   直接看这个工具类的源码就知道,怎么设置了: 1 // 2 // UIImage+Render.h 3 // Created by HeYang on 16/1/18. 4 // Copyright © 2016年 HeYang. All rights reserved. 5 // 6 7 #import <UIKit/UIKit.h> 8 9 @interface UIImage

[iOS]使用symbolicatecrash分析crash文件

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