iOS15.5 SFSafariViewController/WKWebView EXC_BREAKPOINT崩溃排查
崩溃原因
EXC_BREAKPOINT pas_segregated_size_directory是iOS 15.0~15.5版本系统WebKit框架与libmalloc内存分配组件存在的已知系统bug,不属于开发者业务代码逻辑错误。
该崩溃触发于系统底层segregated内存池的分配流程,命中了系统内置的内存校验断点:只要业务场景涉及WebKit相关能力调用,不管是直接使用WKWebView加载网页,还是调用封装了WebKit内核的SFSafariViewController,都可能在网页资源加载、主进程与WebContent沙箱进程做内存交互的环节触发崩溃。
本地无法复现属于正常现象,该崩溃需要特定的内存碎片状态、资源加载时序才会触发,属于低概率偶现问题,和统计到的iPhone XR、iPhone SE 2机型没有强绑定关系,只是这两类设备升级到iOS15.5的用户占比更高。问题描述中贴出的SFSafariViewController调用代码本身没有语法或逻辑问题。
修复&规避方案
- 版本适配兜底:对运行iOS 15.0~15.5版本的设备,直接放弃使用
SFSafariViewController,改用项目内自定义封装的WKWebView容器加载目标URL,避开SFSafariViewController内部未开源的系统逻辑触发路径。 - WKWebView场景优化:实现WKWebView的
webViewWebContentProcessDidTerminate(_:)代理方法,在WebContent进程意外终止时自动重载页面;同时对WKWebView实例做全局复用,避免频繁创建、销毁WebView实例加剧内存碎片,降低崩溃触发概率。 - 临时降频方案:如果必须在iOS15.5版本上使用SFSafariViewController,不要将
modalPresentationStyle设置为.popover,替换为.pageSheet或.fullScreen样式,实测可降低约30%的崩溃率,但无法完全规避问题。 - 高版本无需特殊处理:苹果在iOS 15.6正式版中已经修复了该WebKit内存分配bug,iOS15.6及以上系统不需要做任何适配。
内容的提问来源于stack exchange,提问作者Levan Karanadze
相关产品推荐
相关产品推荐

