ios開發錯誤日誌獲取以及上傳郵箱
在我們實際開發中,我們會碰到很多的問題。但是閃退是我們和使用者是最不能接受的,可我們打包之後沒有辦法獲取到錯誤日誌,所以在這裡,我們將學習怎麼在程式裡獲取錯誤日誌,並且上傳至我們規定的郵箱裡面。
首先,我們先建立一個可以獲取錯誤日誌的類繼承NSObject
CatchCrash
在這個類的.h裡面定義一個可以獲取錯誤日誌的
void uncaughtExceptionHandler(NSException *exception);
在.m裡面寫具體的實現方法
// 異常的堆疊資訊
NSArray *stackArray = [exception callStackSymbols
// 出現異常的原因
NSString *reason = [exception reason];
// 異常名稱
NSString *name = [exception name];
NSString *exceptionInfo = [NSStringstringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
NSLog(@"%@", exceptionInfo);
NSMutableArray
[tmpArr insertObject:reason atIndex:0];
//儲存到本地 -- 當然你可以在下次啟動的時候,上傳這個log
[exceptionInfo writeToFile:[NSStringstringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()] atomically:YESencoding:NSUTF8StringEncodingerror:nil];
//在出現錯誤的地方截圖
UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth([UIScreenmainScreen].bounds),CGRectGetHeight([UIScreenmainScreen].bounds)),NO,1);
[[UIApplicationsharedApplication].keyWindowdrawViewHierarchyInRect:CGRectMake(0,0,CGRectGetWidth([UIScreenmainScreen].bounds),CGRectGetHeight([UIScreenmainScreen].bounds))afterScreenUpdates:NO];
UIImage *snapshot =UIGraphicsGetImageFromCurrentImageContext();
//把出現錯誤的截圖儲存在本地
[UIImageJPEGRepresentation(snapshot,1.0)writeToFile:[[NSStringalloc]initWithFormat:@"%@/Documents/bug.jpg",NSHomeDirectory()]atomically:YES];
UIGraphicsEndImageContext();
具體的檔案
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface CatchCrash : NSObject
void uncaughtExceptionHandler(NSException *exception);
@end
#import "CatchCrash.h"
@implementation CatchCrash
void uncaughtExceptionHandler(NSException *exception)
{
// 異常的堆疊資訊
NSArray *stackArray = [exception callStackSymbols];
// 出現異常的原因
NSString *reason = [exception reason];
// 異常名稱
NSString *name = [exception name];
NSString *exceptionInfo = [NSStringstringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
NSLog(@"%@", exceptionInfo);
NSMutableArray *tmpArr = [NSMutableArrayarrayWithArray:stackArray];
[tmpArr insertObject:reason atIndex:0];
//儲存到本地 -- 當然你可以在下次啟動的時候,上傳這個log
[exceptionInfo writeToFile:[NSStringstringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()] atomically:YESencoding:NSUTF8StringEncodingerror:nil];
//在出現錯誤的地方截圖
UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth([UIScreenmainScreen].bounds),CGRectGetHeight([UIScreenmainScreen].bounds)),NO,1);
[[UIApplicationsharedApplication].keyWindowdrawViewHierarchyInRect:CGRectMake(0,0,CGRectGetWidth([UIScreenmainScreen].bounds),CGRectGetHeight([UIScreenmainScreen].bounds))afterScreenUpdates:NO];
UIImage *snapshot =UIGraphicsGetImageFromCurrentImageContext();
//把出現錯誤的截圖儲存在本地
[UIImageJPEGRepresentation(snapshot,1.0)writeToFile:[[NSStringalloc]initWithFormat:@"%@/Documents/bug.jpg",NSHomeDirectory()]atomically:YES];
UIGraphicsEndImageContext();
return;
}
@end
然後在下一次程式啟動的時候,我們從儲存的路徑裡拿出資料,如果有資料那麼我們就去上傳到我們的郵箱裡面
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
NSString *str = [[NSStringalloc]initWithContentsOfFile:[[NSStringalloc]initWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]encoding:NSUTF8StringEncodingerror:nil];
if (str)
{
有錯誤需要執行的
}
else
{
沒有錯誤需要執行的
}
之後就是我們怎麼上傳到郵箱裡
NSString *str = [[NSStringalloc]initWithContentsOfFile:[[NSStringalloc]initWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]encoding:NSUTF8StringEncodingerror:nil];
MFMailComposeViewController *mc = [[MFMailComposeViewControlleralloc]init];
mc.mailComposeDelegate =self;
if (!mc)
{
// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"請先新增郵箱賬戶" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
// [alert show];
return;
}
[mc setSubject:@"錯誤日誌"];
[mc setToRecipients:[[NSArrayalloc]initWithObjects:@"[email protected]",nil]];
[mc setMessageBody:str isHTML:NO];
[mc addAttachmentData:[NSDatadataWithContentsOfFile:[[NSStringalloc]initWithFormat:@"%@/Documents/bug.jpg",NSHomeDirectory()]]mimeType:@""fileName:@"bug.jpg"];
[selfpresentViewController:mcanimated:YEScompletion:nil];
這是系統提供的一個傳送郵件的一個類需要匯入MessageUI.framework
在我們的代理方法裡面需要做一些操作
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(nullableNSError *)error
{
switch (result)
{
caseMFMailComposeResultCancelled:
NSLog(@"Mail send canceled...");
break;
caseMFMailComposeResultSaved:
NSLog(@"Mail saved...");
break;
caseMFMailComposeResultSent:
[[NSFileManagerdefaultManager]removeItemAtPath:[NSStringstringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]error:nil];
[[NSFileManagerdefaultManager]removeItemAtPath:[[NSStringalloc]initWithFormat:@"%@/Documents/bug.jpg",NSHomeDirectory()]error:nil];
NSLog(@"Mail sent...");
break;
caseMFMailComposeResultFailed:
NSLog(@"Mail send errored: %@...", [errorlocalizedDescription]);
break;
default:
break;
}
[selfdismissViewControllerAnimated:YEScompletion:nil];
}
這裡刪除錯誤檔案看專案需求,在哪裡開啟郵箱並上傳也需要看實際需要。這裡我們的錯誤日誌獲取,上傳至郵箱完成了
最後附上demo的下載地址 http://download.csdn.net/detail/a174455171/9514511
關於上次我寫的做一些補充。
這個方法只能獲取到OC的異常,其他的還需要各位在網上搜其他的方法
在註冊捕獲異常的時候儘量寫到
didFinishLaunchingWithOptions最後,因為第三方的SDK有時候會把你的許可權截獲
相關推薦
ios開發錯誤日誌獲取以及上傳郵箱
在我們實際開發中,我們會碰到很多的問題。但是閃退是我們和使用者是最不能接受的,可我們打包之後沒有辦法獲取到錯誤日誌,所以在這裡,我們將學習怎麼在程式裡獲取錯誤日誌,並且上傳至我們規定的郵箱裡面。 首先,我們先建立一個可以獲取錯誤日誌的類繼承NSObject CatchC
iOS Crash閃退日誌獲取和上傳至伺服器
如何獲取crash閃退日誌 -- 工具檢視 先看第一個問題如何檢視,我搜索的方法有以下幾個: 第一個方法:XCode 的選單Window->Organizer 選擇Devices -> 選中的手機 -> 點選手機名稱左邊的箭頭 會等到如下
Android開發之app崩潰日誌收集以及上傳
已經做成sdk的形式,原始碼已公開,原始碼看不懂的請自行google。 如果想定製適應自己app的sdk請自行fork。 AndroidLogCollector android app崩潰日誌收集sdk 1.0 作者:賈博士 崩潰日誌收集方法: 1.Lo
android app崩潰日誌收集以及上傳
已經做成sdk的形式,原始碼已公開,原始碼看不懂的請自行google。 如果想定製適應自己app的sdk請自行fork。 AndroidLogCollector android app崩潰日誌收集sdk 1.0 作者:賈博士 崩潰日誌收集方法: 1.L
百度ueditor後端配置錯誤,未找到上傳資料,上傳圖片的完整步驟以及難點問題!
本人因需要編輯功能,自己鑽研加網上找文件,終於弄出了上傳功能。 1 先說原理,不用在後臺建立Action或者controller去接收ueditor上傳的檔案,你只需要設定上傳的路徑,他會自動給你上傳到該目錄下面,非常強大,並且是否帶上Html頭和尾自 需
【IOS學習】http非同步檔案上傳和下載以及進度指示
2016-02-12 13:05:07.330 network-demo[16708:1254465] =================request redirectResponse================= 2016-02-12 13:05:07.331 network-demo[16708:
python基礎學習日誌day8-socket上傳文件
文件大小 input author strong filename pat port san ont ftp server 1) 讀取文件名 2)檢查文件是否存在 3)打開文件 4)檢查文件大小 5)發送文件大小給客戶端 6)等客戶端確認 7)開始邊讀邊發數據 下載文
js獲取input上傳圖片裝換為base64格式圖片
file .get reader wim fileread script gen fun return <input name="upimage" id="upload_file" type="file"> <img src="/img/touxiang
獲取圖片上傳前的寬高
獲取 ear 有時 err 取圖 abort error tar sda 有時候我們需要對上傳的圖片做一些限制,我在vue裏面用的 var reader = new FileReader(); var that = this; reader.onload = fu
KindEditor的簡單使用,以及上傳圖片預覽圖片,用戶刪除圖片後的數據處理(重點)
思路 回復 func gif datetime lds comm upload media http://www.cnblogs.com/wupeiqi/articles/6307554.html 簡單使用: <div class="comm">
在python web開發中的文件上傳與下載
iterator makedirs pat type med code 獲取 保存 media django 框架下 實現服務端的文件上傳與下載: import jsonimport osimport uuiddef attachment_upload(request
layui的upload組件使用以及上傳阻止測試
shee div text eal function nbsp itl bsp efi 背景:頁面上一個按鈕,點擊彈出上傳框,從按鈕的方法代碼開始寫:處理未選擇文件阻止上傳;通過判斷選擇文件的數量,顯示或隱藏上傳按鈕; 在js中定義: function uploadFil
中控考勤機的二次開發之數據秒上傳至服務器功能
程序 做到 監控 選擇 環境 客戶 出現 員工 參考 1.客戶選擇了中控考勤機:IFACE系列 2.客戶需要在WEB端實時看到員工的考勤情況 3.需要做到客戶員工數據及時傳遞到服務器 實現方法如下: 1.安裝中控DLL(一定要註意操作系統是32位還是64位,折騰死人
iOS 用個人證書shell打包上傳蒲公英
用個人證書Shell打包釋出蒲公英。下面記錄下主要步驟 1、shell指令碼 #!/bin/sh function setup_dir { if [ -d "${BUILD_PATH}" ]; then rm -rf "${BUILD_PATH}" fi mkdir -p "${BUI
iOS 使用AFNetworking進行下載和上傳
AFNetworking為我們提供了太多的方便,今天說一下用AFNetworking進行檔案的下載和上傳,AFNetworking的引入就不多說了 首先,在storyboard的view上新增一個imageview和一個button,分別增加輸出口和點選事件 在ViewContr
iOS開發- 相機 攝像頭 獲取到的圖片自動旋轉90度解決辦法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
SpringBoot+fileUpload獲取檔案上傳進度
我本人在網上找了很多關於檔案上傳進度獲取的文章,普遍基於spring MVC 框架通過 fileUpload 實現,對於spring Boot 通過 fileUpload 實現的帖子非常少,由於小弟學藝不精,雖然 Spring Boot 和 Spring MVC 相差不大,只是配置方式的
FormData物件的使用以及上傳檔案
FormData物件用以將資料編譯成鍵值對,以便用XMLHttpRequest來發送資料。其中最主要用於傳送表單資料,但亦可用於傳送帶鍵資料(keyeddata),而獨立於表單使用。如果表單enctype屬性設為multipart/form-data,則會使用表單的**submit()**方
JS獲取file上傳的檔案
html: <input type="file" onchange="upload(this)"> js: function upload(obj){ var files = obj.files ; var formData = new FormDat
iOS開發 使用ijkplayer在iOS11上出現黑屏,只有聲音
https://github.com/Bilibili/ijkplayer/issues/3643 在IJKSDLGLView.m檔案中, - (Bool)setupEAGLContext:(EAGLContext *)上下文方法的glFramebufferRenderbuffer(GL_