由 xpc_connection_send_message_with_reply_sync 超时引发的崩溃
原文中文,约3300字,阅读约需8分钟。发表于: 。iOS 的一些系统接口需要调用 xpc_connection_send_message_with_reply_sync 方法与其它进程通信并返回结果,在低性能设备上打开 APP 后如果有频繁的 xpc_reply_sync 调用可能会诱发超时卡死。
发现iOS系统接口xpc_connection_send_message_with_reply_sync在低性能设备上频繁调用可能导致超时卡死。线上问题中发现少量Crash,堆栈显示是因为CLGetStatusBarIconState和CLClientIsLocationServicesEnabled调用导致。问题集中在iPhone 6s和iPhone 7等低端设备上,大部分是iOS 15.7系统。修复建议是减少调用xpc_connection_send_message_with_reply_sync的频次,避免调用能触发该接口的方法。推荐在CLLocationManager的delegate中监听定位权限变化,避免在主线程调用locationServicesEnabled方法。以上修改后,Crash问题解决。