如果用户回答传入的iMessage,WKWebView会崩溃

时间:2017-07-18 09:43:31

标签: ios swift crash wkwebview ios10.3

我的应用程序出现严重崩溃 -

CALayer position contains NaN: [377.833 nan] 

使用以下堆栈 -

Fatal Exception: CALayerInvalidGeometry
0  CoreFoundation                 0x18283afe0 __exceptionPreprocess
1  libobjc.A.dylib                0x18129c538 objc_exception_throw
2  CoreFoundation                 0x18283af28 -[NSException initWithCoder:]
3  QuartzCore                     0x185b50acc CA::Layer::set_position(CA::Vec2<double> const&, bool)
4  QuartzCore                     0x185b50c48 -[CALayer setPosition:]
5  QuartzCore                     0x185b51198 -[CALayer setFrame:]
6  UIKit                          0x1889657a8 -[UIView(Geometry) setFrame:]
7  UIKit                          0x188979364 -[UIImageView _setViewGeometry:forMetric:]
8  UIKit                          0x1889c6c38 -[UIScrollView _adjustScrollerIndicators:alwaysShowingThem:]
9  UIKit                          0x188abfb34 -[UIScrollView(UIScrollViewInternal) _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:]
10 WebKit                         0x18c14af3c -[WKWebView _keyboardChangedWithInfo:adjustScrollView:]
11 CoreFoundation                 0x1827d55f4 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
12 CoreFoundation                 0x1827d4d08 _CFXRegistrationPost
13 CoreFoundation                 0x1827d4a84 ___CFXNotificationPost_block_invoke
14 CoreFoundation                 0x1828437a8 -[_CFXNotificationRegistrar find:object:observer:enumerator:]
15 CoreFoundation                 0x18271895c _CFXNotificationPost
16 Foundation                     0x18322a930 -[NSNotificationCenter postNotificationName:object:userInfo:]
17 UIKit                          0x1893500e4 -[UIInputWindowController postStartNotifications:withInfo:]
18 UIKit                          0x189352350 __77-[UIInputWindowController moveFromPlacement:toPlacement:starting:completion:]_block_invoke.907
19 UIKit                          0x188a383cc -[UIInputViewAnimationStyle launchAnimation:afterStarted:completion:forHost:fromCurrentPosition:]
20 UIKit                          0x189351dc8 -[UIInputWindowController moveFromPlacement:toPlacement:starting:completion:]
21 UIKit                          0x1893588b0 -[UIInputWindowController setInputViewSet:]
22 UIKit                          0x189351494 -[UIInputWindowController performOperations:withAnimationStyle:]
23 UIKit                          0x188a30d94 -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:]
24 UIKit                          0x1890f7160 -[_UIRemoteKeyboards keyboardChanged:shouldConsiderSnapshottingKeyboard:isLocalEvent:]
25 UIKit                          0x1890f6e8c __37-[_UIRemoteKeyboards

查看用户的日志,我发现很少见 -

  1. 所有用户都在包含WKWebView
  2. 的视图控制器中
  3. 所有日志都指出了应用获得了#34; applicationWillResignActive&#34;在崩溃之前
  4. 堆栈显示键盘已打开,但我们无法在该视图控制器上打开键盘
  5. 所有用户均为iOS 10.3 +
  6. 唯一适合的情况是,当应用程序使用可见的WKWebView时,用户获得了iMessage,并强制触及它以快速回答。我们测试了这个场景,BOOOM应用程序崩溃了。

    所以我们发现了崩溃,但我们不知道发生了什么。 任何一个人都面临这个问题,或者知道它会是什么?

    由于

3 个答案:

答案 0 :(得分:2)

不确定它是否对您有所帮助。我也遇到过NAN问题,如果任何值被破坏或无效,就会发生这种情况。所以,如果你能找到你的价值被破坏的地方意味着它正在打印NAN,那么你可以把保护声明。

答案 1 :(得分:2)

(1)首先仔细检查您的布局是否正确,使用&#34; Autolayout&#34;并确保你的 约束是正确的,您正在设置子视图正确。

尝试直观地调试布局,看看是否有任何奇怪的事情发生。

Debug-&gt;查看调试 - &gt;捕获视图层次结构。

(2)从堆栈跟踪中我注意到键盘出现了,因此需要调整视图以便为键盘提供位置。值得注意的是,只要消息到达堆栈跟踪,就会发生这种情况。

我也会尝试resignFirstResponder,也许在你的AppDelegate

- (void)applicationWillResignActive:(UIApplication *)application {
   [_wkWebView resignFirstResponder];
}

(3)我还发现有一个错误,WKWEbView不会resignFirstResponder ..这可能是相关的:

错误167898 - [iOS] - [WKWebView becomeFirstResponder]和 - [WKWebView resignFirstResponder]在非程序化第一响应者更改发生时不会被调用

也许一个解决方法就是尽快提出另一个视图 申请将辞职。

- (void)applicationWillResignActive:(UIApplication *)application {
    // if _wkWebView is showing then hide and show other view
}

答案 2 :(得分:0)

在Xcode运行方案中设置 CG_NUMERICS_SHOW_BACKTRACE 环境变量,它将转储导致非数字值发生的堆栈跟踪。