ios開發錯誤日誌獲取以及上傳郵箱

2021-07-06 02:55:11 字數 4094 閱讀 2737

在我們實際開發中,我們會碰到很多的問題。但是閃退是我們和使用者是最不能接受的,可我們打包之後沒有辦法獲取到錯誤日誌,所以在這裡,我們將學習怎麼在程式裡獲取錯誤日誌,並且上傳至我們規定的郵箱裡面。

首先,我們先建立乙個可以獲取錯誤日誌的類繼承nsobject

catchcrash

在這個類的.h裡面定義乙個可以獲取錯誤日誌的

void uncaughtexceptionhandler(n***ception *exception);

在.m裡面寫具體的實現方法

// 異常的堆疊資訊

nsarray *stackarray = [exception callstacksymbols];

// 出現異常的原因

nsstring *reason = [exception reason];

// 異常名稱

nsstring *name = [exception name];

nsstring

*exceptioninfo = [

nsstring

stringwithformat

:@"exception reason:%@\nexception name:%@\nexception stack:%@",name, reason, stackarray];

nslog(@"%@", exceptioninfo);

nsmutablearray *tmparr = [nsmutablearray

arraywitharray:stackarray];

[tmparr insertobject:reason atindex:0];

//儲存到本地-- 當然你可以在下次啟動的時候,上傳這個log

[exceptioninfo writetofile:[

nsstring

stringwithformat:

@"%@/documents/error.log"

,nshomedirectory()] atomically:

yesencoding:nsutf8stringencodingerror:

nil];

//在出現錯誤的地方截圖

uigraphicsbeginimagecontextwithoptions(cgsizemake(cgrectgetwidth([

uiscreen

mainscreen].

bounds

),cgrectgetheight([

uiscreen

mainscreen].

bounds

)),no,1

); [[keywindow

drawviewhierarchyinrect:cgrectmake(0,

0,cgrectgetwidth([

uiscreen

mainscreen].

bounds

),cgrectgetheight([

uiscreen

mainscreen].

bounds

))afterscreenupdates:

no];

uiimage

*snapshot =uigraphicsgetimagefromcurrentimagecontext();

//把出現錯誤的截屏保存在本地

具體的檔案

#import

#import

@inte***ce catchcrash : nsobject

void uncaughtexceptionhandler(n***ception *exception); 

@end

#import "catchcrash.h"

@implementationcatchcrash

void uncaughtexceptionhandler(n***ception *exception)

@end

然後在下一次程式啟動的時候,我們從儲存的路徑裡拿出資料,如果有資料那麼我們就去上傳到我們的郵箱裡面

nssetuncaughtexceptionhandler(&

uncaughtexceptionhandler);

nsstring

*str = [[

nsstring

alloc]initwithcontentsoffile:[[

nsstring

alloc]initwithformat:

@"%@/documents/error.log"

,nshomedirectory()]encoding:nsutf8stringencodingerror:

nil];

if (str)

else

之後就是我們怎麼上傳到郵箱裡

nsstring

*str = [[

nsstring

alloc]initwithcontentsoffile:[[

nsstring

alloc]initwithformat:

@"%@/documents/error.log"

,nshomedirectory()]encoding:nsutf8stringencodingerror:

nil];

mfmailcomposeviewcontroller*mc = [[mfmailcomposeviewcontroller

alloc

]init];

mc.mailcomposedelegate=

self;

if (!mc)

[mc setsubject:@"

錯誤日誌

這是系統提供的乙個傳送郵件的乙個類需要匯入messageui.framework

在我們的**方法裡面需要做一些操作

- (void)mailcomposecontroller:(mfmailcomposeviewcontroller *)controller didfinishwithresult:(mfmailcomposeresult)result error:(nullable

nserror *)error

[self

dismissviewcontrolleranimated:

yescompletion:

nil]; }

這裡刪除錯誤檔案看專案需求,在**開啟郵箱並上傳也需要看實際需要。

這裡我們的錯誤日誌獲取,上傳至郵箱完成了

關於上次我寫的做一些補充。

這個方法只能獲取到oc的異常,其他的還需要各位在網上搜其他的方法

在註冊捕獲異常的時候盡量寫到

didfinishlaunchingwithoptions最後,因為第三方的sdk有時候會把你的許可權截獲

Nuxt Vue ElementUI開發錯誤記錄

一 this may cause things to work incorrectly.make sure to use the same version for both.原因 版本不統一 解決辦法 刪除node models資料夾和package lock.json檔案,重新 npm insta...

Android開發錯誤集錦

error 13,13 錯誤 找不到符號 符號 類 imageview 位置 類 mainactivity privateimageviewimageview 這裡提示 imageview cannot resolve symbol 後來發現 import 沒有import android.widg...

VTK開發 錯誤集錦

1 文字未顯示 現象 在vtk中使用vtktextactor或vtkactor2d類顯示文字,結果文字未顯示出來 解決方法 在程式上方加上 vtk module init vtkrenderingfreetype 2 編譯出現錯誤 no override found for 解決方法 在程式上方加上...