【问题标题】:How to crash a cordova ios app如何使cordova ios应用程序崩溃
【发布时间】:2018-02-12 12:06:15
【问题描述】:

我正在尝试编写一小部分cordova 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-09-04 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: User crashed bookmart 中丢弃了一个未捕获的异常!

异常已被丢弃,应用程序没有崩溃:(

有没有其他方法可以让应用程序崩溃?或者通过某些配置,我可以禁用 WebKit 以丢弃此类异常吗?

非常感谢您的回答!

问候 雷切尔

【问题讨论】:

  • 如果您提供的功能会导致应用崩溃,您的应用将被 App Store 拒绝。为什么需要这样的功能?
  • 我不会将此样本发布到真实市场。这只是我们用于监控混合应用程序的产品示例。
  • 如果你想使应用程序崩溃而不是尝试这个.. 取一个空数组并打印其 objectAtIndex 任何值。它会使应用程序崩溃
  • Nirav 的解决方案不起作用。 : (
  • 尝试创建一个空数组并访问索引 0。应用程序会因索引超出范围异常而崩溃。

标签: ios objective-c cordova custom-error-handling


【解决方案1】:

谢谢大家。 除了 Will 建议的插件外,我已经尝试了所有建议。 总的来说,有两种方法可以让应用程序崩溃。

  1. 按照 Michale 的建议,使用 abort() 终止应用程序。

这是我使用的一段代码,

- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:
(UIWebViewNavigationType)navigationType
{
   NSURL* url = [request URL];
   if([url.path containsString:@"CRASH"])
   {
     abort();
   }
   ...
 } 
  1. 按照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 导致此应用崩溃,但有一个更符合我要求的异常。

谢谢大家。

【讨论】:

    【解决方案2】:

    hockeyapp 插件提供的功能可以让您让应用程序崩溃。在找出问题之前,您可以将其用作临时解决方案。

    hockeyapp.forceCrash():void
    

    查看存储库https://github.com/Microsoft/cordova-plugin-hockeyapp

    【讨论】:

      【解决方案3】:

      您是否尝试过默认核心数据实现示例中的 abort()?它会导致应用程序生成崩溃日志并终止。

      【讨论】:

      • 这肯定会使应用程序崩溃!谢谢米歇尔!
      【解决方案4】:

      尝试在主线程上通过 dispatch 启动你的异常:

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

      如果可行,请尝试使用 NSException 方法获取所有额外信息。

      【讨论】:

      • 这应该与我的引发异常的代码结合起来,然后糖果崩溃了! :) 谢谢谢布卡。我将在下面列出我使用的代码作为完整的解决方案。
      • 很高兴您找到了解决方案。作为“谢谢”,您可以投票赞成所有有助于找到问题解决方案的答案;)
      • 我的声望低于 15,所以我的投票不能公开。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多