libsystem_kernel.dylib __abort_with_payload崩溃问题分析

1.原因

在bugly上查看崩溃日志,有一个频繁发生的崩溃:libsystem_kernel.dylib __abort_with_payload

崩溃栈

从第4行可以看出,这是一个隐私违规。那么很容易猜测:定位、图片库、相机等等。此时我们去info.plst中查看是否忘记了添加哪个权限即可。

然而还是崩溃!!!

发现我们所有用到的权限都已经添加:定位、录音、图片库、相机,就这四个。

继续查找其他原因,先看看其他的栈信息,我们找到了如下关键点:


屏幕快照 2019-12-26 下午4.12.28.png

注意第3行,方法为_isPhotosAccessAllowedWithScope:accessAllowedHandler:。看名字应该就是图片库的某一个权限。

然后查看bugly中记录的跟踪记录,发现大体为两种崩溃:
1.崩溃在WKActionSheet:

屏幕快照 2019-12-26 下午4.16.22.png

2.崩溃在WKImagePreviewController
屏幕快照 2019-12-26 下午4.17.04.png

这显然是WebKit内部的,然后就是复现了。找到webView中有图片的地方,各种点击,双击,长按手势都试了一遍,最后发现长按某些图片的时候,会弹出actionSheet,其中会有保存图片的功能:

iOS13中长按img标签

点击后果然发生了崩溃!这是因为没有添加往相册加入图片的权限。

总结:

在iOS13中,长按图片会弹出上图所示的菜单栏,此时查看视图层级,发现就是WKImagePreviewController。在iOS13以下,长按会弹出系统ActionSheet,此时就是WKActionSheet

解决

添加Privacy - Photo Library Additions Usage Description即可解决。

你可能感兴趣的:(libsystem_kernel.dylib __abort_with_payload崩溃问题分析)