天天看點

ios測試如何讓軟體崩潰,iOS開發學習之監測程式的崩潰次數詳解

前言

本文主要給大家介紹的是關于iOS如何監測程式崩潰次數的相關内容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:

在寫代碼之前,我們先弄明白一個app運作的流程。

程式運作啟動時依次調用

1.啟動頁先運作

2. - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

3. - (void)applicationDidBecomeActive:(UIApplication*)application

程式退到背景依次調用

1. - (void)applicationWillResignActive:(UIApplication*)application

2. - (void)applicationDidEnterBackground:(UIApplication*)application

程式從背景回到前台依次調用

1. - (void)applicationWillEnterForeground:(UIApplication*)application

2. - (void)applicationDidBecomeActive:(UIApplication*)application

程式被殺掉會依次調用

1. - (void)applicationWillResignActive:(UIApplication*)application

2. - (void)applicationDidEnterBackground:(UIApplication*)application

3. - (void)applicationWillTerminate:(UIApplication*)application

程式崩潰閃退則不會調用任何方法

根據程式被殺掉和崩潰之間的差別可以寫一個方法來檢測和記錄程式崩潰次數。

實作思路

在程式啟動時把存儲在沙盒中的崩潰辨別isCrash置為YES,程式将要退出時把isCrash改為NO。

代碼:

程式啟動

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[self recordCrashCount];

}

程式退出

- (void)applicationWillTerminate:(UIApplication *)application {

[[NSUserDefaults standardUserDefaults] setObject:@(NO) forKey:@"JJ_isCrash"];

[[NSUserDefaults standardUserDefaults] synchronize];

}

// 判斷和記錄崩潰的次數

- (void)recordCrashCount{

BOOL isCrash = [[[NSUserDefaults standardUserDefaults] valueForKey:@"JJ_isCrash"] boolValue];

[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"JJ_isCrash"];

if (isCrash == YES) {

//擷取到本地存儲的崩潰次數

NSNumber *crashNum = [[NSUserDefaults standardUserDefaults] valueForKey:@"JJ_crashCount"];

NSInteger count =0;

if (crashNum != nil) {

count = [crashNum integerValue];

}

count++;

//判斷崩潰次數達到多少次時執行操作

if (count >= crashCount) {

NSLog(@"多次崩潰");

//将本地檔案崩潰次數重新置為0

[[NSUserDefaults standardUserDefaults] setObject:@0 forKey:@"JJ_crashCount"];

// 5秒後執行彈窗警告操作

[self performSelector:@selector(showAlertAction)withObject:nil afterDelay:5];

return;

}

//崩潰次數未達到3次則向本地存儲崩潰次數

crashNum = [NSNumber numberWithInteger:count];

[[NSUserDefaults standardUserDefaults] setObject:crashNum forKey:@"JJ_crashCount"];

}

}

// 彈出更新警告

- (void)showAlertAction{

UIAlertController*alert

=

[UIAlertControlleralertControllerWithTitle:@"警告"message:@"檢測到軟體多次異常退出,建議您盡快更新到最新版本!" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction*sure = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefaulthandler:nil];

[alert addAction:sure];

[self.window.rootViewController presentViewController:alert animated:YES completion:nil];

}

為了友善大家直接使用,我已經将實作代碼封裝為一個小架構,隻需使用一句代碼即可調用。

使用方法:

在appdelegate.m中導入頭檔案 #import "JJRecordCrash.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// 參數crashCount為崩潰多少次後執行block中的代碼

[[JJRecordCrash shareInstance] recordCrashWithCrashCount:2 handle:^{

// 多次崩潰後執行自己想執行的代碼,如:清除緩存 提示使用者更新

NSLog(@"崩潰啦");

}];

return YES;

}

注意:調試時,在程式運作中直接使用xcode重新運作程式,因為不會走- (void)applicationWillTerminate:(UIApplication*)application方法,是以也相當于是崩潰,同樣會被記錄下來。

總結

以上就是這篇文章的全部内容,希望本文的内容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支援。