iOS13.3 输入框长按查询后冻屏

现象


  1. iOS13.3设备输入框长按,弹出Menu后点击查询
  2. 下滑关闭查询页面
  3. App无法响应交互

问题分析


  • App卡死,通过flex还能操作App,故主线程并未阻塞
  • 页面用户交互关闭,通过调试页面属性,并未发现userInteractionEnabled关闭
  • 透明视图拦截交互事件,通过flex发现全屏透明_UIFallbackPresentationWindow

以上分析可得冻屏原因为_UIFallbackPresentationWindow作为keyWindow拦截了用户交互,且该window为全屏、透明,故造成冻屏的现象。

疑问分析


1. _UIFallbackPresentationWindow为什么不消失?

通过memory graph获取引用关系,该window被Input相关实例持有,猜测是否为业务方对TextFiled或Input等做业务拦截导致,但实验证明纯净输入框也能复现,故根本原因不是某个实例强行持有。


点击查询页中完成_UIFallbackPresentationWindow会触发setHidden与重设keyWindow故不会出现冻屏现象,而手势滑动的交互式转场并不会触发setHidden与重设keyWindow,故导致keyWindow被占用,拦截了用户交互。

2. _UIFallbackPresentationWindow为什么会展现?

通过Hook window的initmakeKeyWindow获取使用该window的入口函数。

在堆栈+[_UITextServiceSession showServiceForType:withContext:]中寻到FallbackPresentation相关使用。

通过此行代码的地址0x7fff47ba3d35找到其代码跳转逻辑由+[_UITextServiceSession shouldPresentServiceInSameWindowAsView:]控制,即该函数返回YES,则在当前window进行页面跳转,若返回NO,则走fallback逻辑,交由_UIFallbackPresentationViewController控制其转场逻辑,即会展示_UIFallbackPresentationWindow

再分析+[_UITextServiceSession shouldPresentServiceInSameWindowAsView:]其内部实现,主要由_window_isTextEffectsWindow__UIApplicationLinkedOnVersion控制逻辑。

经排查_window_isTextEffectsWindow均返回正常,而唯一变化的为__UIApplicationLinkedOnVersion,该常量属于linker的version标识,和xCode版本强相关(XCode 11.0为0xD0000,XCode 11.2为0xD0200)。
获取UIKitCore源码文件/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore,在Hopper中解析得到,通过arg2获取window,如果window的_isTextEffectsWindow属性为YES,则直接返回NO,反之判断XCode版本是否大于或等于11.2版本,若满足返回YES,不满足则返回NO。

总结


iOS13.3系统使用了新特性,同时对linker即编译器的版本进行校验,低于11.2版本的包则走入fallback逻辑,同时fallback逻辑中存在退场不完全的Bug。综上所诉为系统Bug,且可通过升级XCode解决。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 HTTPS是什么相信大家都知道,如果你不知道。。。请关闭此文!!!HTTP的数据是明文传输的,没有安全性可言...
    MxlZlh阅读 6,557评论 0 9
  • 一直打算好好总结一下国企事业单位机关工作的方式方法,特别是对“会办事”这一基本素质进行深入剖析,因此,才有了这个文...
    尘埃光景阅读 304评论 0 0
  • 【六项精进打卡】 2018.6.27 姓名:陈岗 企业名称:上海孚因流体动力设备股份有限公司 打卡第67天 【知~...
    我心依旧_79e2阅读 158评论 0 0
  • Man's growth is the victory over his immature past. ​ ​​​...
    六十一邂逅阅读 1,106评论 11 15