Xcode 【发布状态下如何捕获崩溃日志上传到服务器】

在发布阶段,如果用户的 App 发生了闪退,也就是崩溃了。我们应该如何得知,应该如何有效收集这些崩溃的日志信息。以助于我们的 App 更好的优化。


去 GitHub 下载一个框架:WZYCrash

https://github.com/CoderZYWang/WZYCrash


将 WZYCrash 集成到自己的项目中去。



共有三个类文件:

WZYUncaughtExceptionHandler(捕获崩溃信息),WZYCrashHandler(上传崩溃信息),WZYTools(获取手机型号)


集成完毕后,我们在 AppDelegate.m 中添加如下代码:

//
//  AppDelegate.m
//  WZYCrashDemo
//
//  Created by CoderZYWang on 2016/12/30.
//  Copyright © 2016年 wzy. All rights reserved.
//

#import "AppDelegate.h"

#import "WZYCrashHandler.h"
#import "WZYUncaughtExceptionHandler.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    // 捕获崩溃日志
    [WZYUncaughtExceptionHandler setDefaultHandler];
    // 上传崩溃日志到服务器
    [WZYCrashHandler uploadCrashLog];
    
    return YES;
}

@end


然后我们就可以用我们的代码进行测试,可以先自己写一个小错误然后测试一下是否集成成功。

//
//  ViewController.m
//  WZYCrashDemo
//
//  Created by CoderZYWang on 2016/12/30.
//  Copyright © 2016年 wzy. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    // 测试代码(运行demo时打开)
    // 数组越界错误
//    NSArray *arr = @[@"123"];
//    NSLog(@"%@", arr[3]);
    
    // 再次运行程序,在崩掉之前会有我们的打印信息(str 就是我们收集的错误信息)
    /*
     2016-12-30 14:14:26.883423 WZYCrashDemo[2693:1047098] str ---
     - IDENTIFIER_NUMBER:   6185368C-0054-49C6-8614-F91EA96A5FF3
     - OSVERSION:   10.0.2
     - PHONE_TYPE:   iPhone 6s
     - APP_VERSION:   1.0
     - name:
     NSRangeException
     - reason:
     *** -[__NSSingleObjectArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 0]
     - callStackSymbols:
     0   CoreFoundation                      0x00000001844181d8 <redacted> + 148
     1   libobjc.A.dylib                     0x0000000182e5055c objc_exception_throw + 56
     2   CoreFoundation                      0x0000000184409428 <redacted> + 0
     3   WZYCrashDemo                        0x00000001000d3178 -[ViewController viewDidLoad] + 188
     4   UIKit                               0x000000018a2613dc <redacted> + 1056
     5   UIKit                               0x000000018a260fa4 <redacted> + 28
     6   UIKit                               0x000000018a267750 <redacted> + 76
     7   UIKit                               0x000000018a264bf0 <redacted> + 272
     8   UIKit                               0x000000018a2d7414 <redacted> + 48
     9   UIKit                               0x00000
     */
}

@end


还有疑问的话请参见 GitHub 上面的 Demo。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LogReport是一个崩溃日志上传框架 ,当App崩溃的时,把崩溃信息保存到本地的同时,自动给GitHub提交崩溃issue,你只需要几句,就能完成所有配置,更多细节请了解下方另外,崩溃信息支持邮件上传和HTTP上传,自动提交到issue使用的是邮件上传的方式。如果你拥有私人服务器,你也可以使用HTTP上传。特性介绍特性简介自定义日志保存路径默认保存在Android/data/com.xxxx.xxxx/log中自定义日志缓存大小默认大小为30M,超出后会自动清空文件夹支持多种上传方式目前支持邮件上传与HTTP上传,会一并把文件夹下的所有日志打成压缩包作为附件上传日志加密保存提供AES,DES两种加密解密方式支持,默认不加密日志按天保存目前崩溃日志和Log信息是按天保存,你可以继承接口来实现更多的保存样式携带设备与OS信息在创建日志的时候,会一并记录OS版本号,App版本,手机型号等信息,方便还原崩溃自定义日志上传的时机默认只在Wifi状态上传支持,也支持在Wifi和移动网络下上传支持保存Log日志在打印Log的同时,把Log写入到本地(保存的时候会附带线程名称,线程id,打印时间),还原用户操作路径,为修复崩溃提供更多细节信息GitHub自动提交issue使用邮件发送的形式,把接受崩溃日志的邮箱和GitHub特定的开源项目绑定在一起即可,更多细节请看下面介绍依赖添加在你的项目根目录下的build.gradle文件中加入依赖allprojects {     repositories {         ...         maven { url "https://jitpack.io" }     } }添加依赖dependencies {     compile 'com.github.wenmingvs:LogReport:1.0.3' }初始化在自定义Application文件加入以下几行代码即可,默认使用email发送。如果您只需要在本地存储崩溃信息,不需要发送出去,请把initEmailReport()删掉即可。public class MyApplication extends Application {     @Override     public void onCreate() {         super.onCreate();         initCrashReport();     }     private void initCrashReport() {         LogReport.getInstance()                 .setCacheSize(30 * 1024 * 1024)//支持设置缓存大小,超出后清空                 .setLogDir(getApplicationContext(), "sdcard/"   this.getString(this.getApplicationInfo().labelRes)   "/")//定义路径为:sdcard/[app name]/                 .setWifiOnly(true)//设置只在Wifi状态上传,设置为false为Wifi和移动网络都上传                 .setLogSaver(new CrashWriter(getApplicationContext()))//支持自定义保存崩溃信息的样式                 //.setEncryption(new AESEncode()) //支持日志到AES加密或者DES加密,默认不开启                 .init(getApplicationContext());         initEmailReporter();     }     /**      * 使用EMAIL发送日志      */     private void initEmailReporter() {         EmailReporter email = new EmailReporter(this);         email.setReceiver("[email protected]");//收件人         email.setSender("[email protected]");//发送人邮箱         email.setSendPassword("apptest1234");//邮箱的客户端授权码,注意不是邮箱密码         email.setSMTPHost("smtp.163.com");//SMTP地址         emai

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值