iOS 异常处理,将bug信息发送到开发者邮箱

1.iOS

在程序的开发中我们难免会遇到崩溃的问题。然后在用户体验的时候,我们如何来防止崩溃的发生呢,并将我们的崩溃原因发送给开发者来处理它。

来看一个例子

NSString *str = @"523";
        arr = @[@"sdad", @"dwada", @"ffwwra"];
        [str substringFromIndex:111];

程序这样写的时候是绝对会崩溃的。我们如果想它不要崩溃,那么应该怎么做呢。

    @try {
        NSString *str = @"523";
        arr = @[@"sdad", @"dwada", @"ffwwra"];
        [str substringFromIndex:111];
    }
    @catch (NSException *exception) {
        NSLog(@"%s %@", __FUNCTION__, exception);
    }
    @finally {
        //如何来对待这个异常处理
        NSLog(@"tryTwo - 我一定会执行");
    }

我们可以使用@try{}@catch(){}@finally来处理,这样程序在运行的时候就不会崩溃了。而是跑到@finnally这里边来处理异常然后在@catch里边来打印出崩溃原因

怎么样来实现发送给开发者邮件呢?

在iOS中发送邮件是很简单的。

封装来如下方法

//
//  CRASHBUG.h
//  try处理异常
//
//  Created by 黄权浩 on 15-1-24.
//  Copyright (c) 2015年 黄权浩. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface CRASHBUG : NSObject
+ (void)sendBug:(NSString *)bug interface:(NSException *)interfaceinfo;
@end
//
//  CRASHBUG.m
//  try处理异常
//
//  Created by 黄权浩 on 15-1-24.
//  Copyright (c) 2015年 黄权浩. All rights reserved.
//

#import "CRASHBUG.h"
#import "AppDelegate.h"

@implementation CRASHBUG

+ (void)sendBug:(NSString *)bug interface:(NSException *)interfaceinfo
{
    NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
    long long int date = (long long int)time;
    NSDate *dd = [NSDate dateWithTimeIntervalSince1970:date];
    NSString *crashLogInfo = [NSString stringWithFormat:@"exception type : %@ \n crash reason : %@ \n call stack time : %@", interfaceinfo, bug, dd];
    NSString *urlStr = [NSString stringWithFormat:@"mailto://[email protected]?subject=bug report&body=Thank you for your cooperation!""Error Details:%@",crashLogInfo];
    NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    [[UIApplication sharedApplication] openURL:url];
}

@end

然后这么来使用

//
//  ViewController.m
//  try处理异常
//
//  Created by 黄权浩 on 15-1-24.
//  Copyright (c) 2015年 黄权浩. All rights reserved.
//

#import "ViewController.h"
#import "CRASHBUG.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    @try {
        NSString *str = @"523";
        [str substringFromIndex:111];
    }
    @catch (NSException *exception) {
        NSLog(@"%s %@", __FUNCTION__, exception);
        /**
         *  把异常崩溃信息发送至开发者邮件
         */
        [CRASHBUG sendBug:@"字符串的类型转化" interface:exception];

    }
    @finally {
        //如何来对待这个异常处理
        NSLog(@"tryTwo - 我一定会执行");
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

这样在崩溃的时候就能将邮件发送到开发者邮箱了

时间: 2024-10-10 15:38:42

iOS 异常处理,将bug信息发送到开发者邮箱的相关文章

iOS获取应用程序信息,版本号,程序名等

转载▼     iOS获取应用程序信息 NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; 其中的信息示范: 版本号:[infoDictionary objectForKey:@"CFBundleVersion"]; 应用程序名:[infoDictionary objectForKey:@"CFBundleDisplayName"]; { CFBundleDevelopment

如何评价苹果中国官网 iOS 8 介绍页面的文案「开发者的大事、大快所有人心的大好事」?[转自知乎]

在什么是「苹果式中文」答案中,小七得出了这个结论: 「苹果式中文」是指句子结构破碎,经常缺乏主语,滥用排比,顶真,偏正短语,和不恰当四字词的广告文体. (有关什么是苹果式中文,小七原来贴错地方了TAT,具体分析请移步:什么是「苹果式中文」?) 那么作为广告翻译,苹果做得如何呢? 首先,有个翻译的概念需要向大家普及: 很多知友提出文案有明显的翻译腔,这个说法其实不准够确啊,有关什么是翻译腔,我的分析请移步:什么是「翻译腔」?「翻译腔」是好是坏? 在这里节选原文一段补充说明: 3. 明明能说中文,非

快速定位iOS线上BUG在哪个控制器崩溃

快速定位iOS线上BUG在哪个控制器崩溃 快速定位iOS线上App崩溃在哪个控制器里面,需要和后台配合使用 下载本项目并添加手动添加到项目里 新建所有的页面都继承于YZViewController 在AppDelegate的didFinishLaunchingWithOptions方法里面写下如下代码: if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"BUG"] isKindOfClass:[NSDictionary

iOS开发之Bug

前言:收集在开发和学习的过程中遇到的bug. 1.循环利用cell的ID设置位置写错了.导致程序奔溃. 2.对于除数算法,可以直接算出结果的就写上结果,不要偷懒写式子让计算机自己算,更何况是除数,会有算出无限小数的可能性. 3.更改连线好的属性名,别忘了重新连线,否则会出现容易看不出来的bug 4.slider不断的调用相关的方法和刷新,这个方法如果传递的参数可能比较占内存,比如某个对象,传递过程可能会跟不上slider的刷新速度,这里就需要对其进行处理,或者是另寻它法. 5.对于工程中有很多很

ios异常处理

Malformed or corrupted AST file: 'Unable to load module "/Users/topbar/Library/Developer/Xcode/DerivedData/ModuleCache/3TJWGBUKOEC41/Darwin.pcm": module file out of date' fatal error: malformed or corrupted AST file: 'Unable to load module "

IIS将错误信息发送到浏览器

本文版权归博客园和dige1993所有,访问作者博客 最近又开始玩ASP了,调试的时候出现错误不清楚详细错误信息特别不方便,记得以前可以设置将错误信息发送到浏览器的,但在win8.1里面设置后好像没效果,于是查了下,居然有三步: 本文版权归博客园和dige1993所有,访问作者博客 1.将<网站>——ASP——调试属性——将错误发送到浏览器选择为true 本文版权归博客园和dige1993所有,访问作者博客 2.<网站>——错误页——编辑功能设置——错误响应选择“详细错误” 本文版

一个简单好用的zabbix告警信息发送工具

之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛点,近期发现一个基于个人微信号的信息发送工具-lykchat. 引用:http://blog.csdn.net/liyingke112/article/details/68955298 lykchat信息发送系统是Python3开发的,通过模拟微信网页端,基于个人微信号,为系统管理人员提供信息发送工

打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 &lt;serviceDebug&gt; 配置行为)以便将异常信息发送回

在调试wcf程序的时候,有时会遇到下面的错误: System.ServiceModel.FaultException: 由于内部错误,服务器无法处理该请求.有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或在打开每个 Microsoft .NET Framework 3.0 SDK 文档的跟踪的同时检查服务器跟踪

微博关注/QQ信息发送

<!doctype html> <html lang="en" xmlns:wb=“http://open.weibo.com/wb”> <head> <meta charset="UTF-8" /> <title>微博关注/QQ信息发送</title> </head> <body> <!--<wb:follow-button uid="563360