2017-09-04 129 views
2

我想寫一個小樣本的科爾多瓦IOS應用程序。我的一個要求是提供一個按鈕/鏈接來允許用戶崩潰應用程序。如何崩潰科爾多瓦IOS應用程序

我試圖引發異常的CDVUIWebViewNavigationDelegate.m如下,

- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
NSURL* url = [request URL]; 
if([url.path containsString:@"CRASH"]) 
{ 
    NSLog(@"User crash bookmart with NSException"); 
    NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; 
    NSDate *current = [NSDate date]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles 
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
    NSString *currentTime = [dateFormatter stringFromDate:current]; 
    [userInfo setObject:@"Crash Time" forKey:currentTime]; 
    NSException *ex = [[NSException alloc] initWithName:@"BookmartCrashException" reason:@"User crashed bookmart!" userInfo:userInfo]; 
    [ex raise]; 
} 
... 
} 

但是,當我嘗試,我看到了下面的日誌,

2017年9月4日17:09:57.148 HRent [96124:12077045]用戶崩潰與NSException的bookmart 2017-09-04 17:09:57.149 HRent [96124:12077045] *** WebKit在> webView中放棄未捕獲的異常:decidePolicyForNavigationAction:request:frame:decisionListener:delegate :用戶墜毀了bookmart!

的異常已經被捨棄,應用程序還沒有崩潰:?(

是否有任何其他的方式崩潰的應用程序肯定還是有一些配置,我可以禁用的WebKit丟棄這樣的異常

非常感激你的答案

問候 雷切爾

+1

如果您提供的應用程序崩潰,則您的應用程序將被從App Store拒絕。爲什麼你需要這樣的功能? – the4kman

+0

我不打算把這個樣本發佈到真正的市場上。這只是我們產品的樣品,它將監測混合動力應用。 – rachelnino

+0

如果你想崩潰的應用程序比試試這個..採取一個空的數組並打印它的objectAtIndex任何值。它會崩潰應用 –

回答

0

嘗試與調度啓動您的例外在主線程:

dispatch_async(dispatch_get_main_queue(), ^{ 
    NSInteger asd = 5/0; // Simple division by 0 
}); 

如果有效,那麼嘗試使用NSException方法來獲取所有額外的信息。

+0

這應該與我的代碼提出異常,然後糖果墜毀!:)謝謝Shebuka。我將列出我在下面用作完整解決方案的代碼。 – rachelnino

+0

很高興您找到了解決方案。作爲「謝謝」,您可以爲所有答案找到解決問題的有用答案;) – Shebuka

+0

我的名聲低於15,所以我的投票不能公開顯示。 :) – rachelnino

0

您是否像在默認的核心數據實現示例中一樣嘗試了abort()?它會導致應用程序生成崩潰日誌並終止。

+0

這肯定會崩潰應用程序!謝謝Michale! – rachelnino

0

謝謝大家。 我已經嘗試過除了Will提出的插件之外的所有建議。總體而言,有2種方式可以使應用程序崩潰。

  1. 正如Michale建議的,使用abort()來終止應用程序。

這裏是一塊我使用的代碼,

- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType: 
(UIWebViewNavigationType)navigationType 
{ 
    NSURL* url = [request URL]; 
    if([url.path containsString:@"CRASH"]) 
    { 
    abort(); 
    } 
    ... 
} 
  • 作爲shebuka商建議的,調度上主線程除外。這裏的技巧是,我們不能使用訪問nil數組或分割0來引發這個異常,但必須寫我在我的問題發佈。否則,該應用程序不會崩潰並且不顯示日誌。
  • 下面是一段代碼我用過,

    - (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType: 
    (UIWebViewNavigationType)navigationType 
    { 
    NSURL* url = [request URL]; 
    if([url.path containsString:@"CRASH"]) 
    { 
        dispatch_async(dispatch_get_main_queue(), ^{ 
         NSLog(@"User crash bookmart with NSException"); 
         NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; 
         NSDate *current = [NSDate date]; 
         NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
         [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
         [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; // Set date and time styles 
         [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
         NSString *currentTime = [dateFormatter stringFromDate:current]; 
         [userInfo setObject:@"Crash Time" forKey:currentTime]; 
         NSException *ex = [[NSException alloc] initWithName:@"BookmartCrashException" reason:@"User crashed bookmart!" userInfo:userInfo]; 
         [ex raise]; 
        }); 
    
    } ...} 
    

    我會選擇解決方案2原因這個崩潰的應用程序與符合我的要求,更好的異常。

    謝謝大家。

    相關問題