Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS 11 and up crashing with -[UIView setDrawsWithVibrantLightMode:]: unrecognized selector sent to instance

Tags:

ios

uikit

swift

I've noticed a significant spike in app crashes on iOS 11 and up with this message. This appears to be an internal API that UIKit is calling, the stack trace reveals that it's something inside UITableViewCell:

    Application Specific Information:
    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setDrawsWithVibrantLightMode:]: unrecognized selector sent to instance 0x15defa6d0'

    Last Exception Backtrace:
    0   CoreFoundation                       0x0000000181691d04 __exceptionPreprocess + 124
    1   libobjc.A.dylib                      0x00000001808e0528 objc_exception_throw + 52
    2   CoreFoundation                       0x000000018169f1c8 -[NSObject(NSObject) doesNotRecognizeSelector:] + 136
    3   UIKit                                0x000000018ae8711c -[UIResponder doesNotRecognizeSelector:] + 292
    4   CoreFoundation                       0x00000001816976b0 ___forwarding___ + 1376
    5   CoreFoundation                       0x000000018157d01c _CF_forwarding_prep_0 + 88
    6   UIKit                                0x000000018b022d58 -[UITableViewCell _setSeparatorDrawsInVibrantLightMode:] + 216
    7   UIKit                                0x000000018abf5ef0 -[UITableViewCell setSeparatorColor:] + 340
    8   UIKit                                0x000000018abf451c __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1228
    9   UIKit                                0x000000018aad6e34 +[UIView(Animation) performWithoutAnimation:] + 100
    10  UIKit                                0x000000018abf3f64 -[UITableView _configureCellForDisplay:forIndexPath:] + 268
    11  UIKit                                0x000000018ae03a00 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 844
    12  UIKit                                0x000000018ae03eac -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 76
    13  UIKit                                0x000000018ade39f0 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2136
    14  UIKit                                0x000000018ab99508 -[UITableView layoutSubviews] + 136

I've been unable to reproduce this but it's crashing consistently on a number of user devices and there's no common thread between device or OS version except that it's only occurring on iOS 11 and up.

like image 599
jwswart Avatar asked Nov 17 '17 14:11

jwswart


1 Answers

Eventually figured out that this is a bug in UIKit when the Darken Colors setting is enabled under Accessibility settings:

Settings -> General -> Accessibility -> Increase Contrast -> Darken Colors

If you're experiencing this crash try toggling that setting on/off to reproduce it.

For now we've suppressed this by simply implementing this method as a Void function in an extension:

@available(iOS 11.0, *)
extension UITableViewCell {
  func _setSeparatorDrawsInVibrantLightMode(_ value: Bool) {

  }
}

So UIKit can call it but it just doesn't do anything (and doesn't crash the app).

like image 95
jwswart Avatar answered Nov 09 '22 08:11

jwswart