QQ SDK初始化方法卡死
升级到Xcode11后发现模拟器经常出现“假死”,既不崩溃也不响应,代码不往后执行,模拟器本身按Home键可以回到桌面。追踪一下发现执行完QQ SDK的初始化方法后代码就不往后执行了,注释掉这句话程序就能正常运行。
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:platformModel.appID andDelegate:(id<TencentSessionDelegate>)self];
最开始我以为是QQ SDK需要更新适配iOS13,下载了最新版本的QQ SDK发现还是会出现这个问题。
难道和系统版本有关?经测试,发现真机没问题,模拟器iOS12、iOS13都会出问题。
我发现只有重启模拟器或者重置模拟器可以解决,但是跑一段时间又会出现这个问题,经常重启模拟器不是长久之计。
背后的真凶:剪贴板同步
起初我一直以为是QQ SDK那段代码有问题,后来无意中发现执行到下面代码时模拟器也会出现卡死的现象。
[UIPasteboard generalPasteboard].string = str;
难道只要调用了剪贴板相关的API就有可能卡死吗?QQ SDK因为要跨APP通信,很有可能内部用到了剪贴板(我事后通过符号断点测试也证实了这一点:QQ SDK初始化方法内部确实有调用剪贴板相关API)。
在网上搜了一下,果然有相关的信息! 《Xcode 11 的那些新东西》 这篇文章中“模拟器”部分提到
修复了如果启用了自动粘贴板同步,则可能导致模拟器在其他应用程序中与剪贴板相关的操作后崩溃或无响应的问题。
我用的是Xcode11.1正式版,文中说已经修复了这个问题,但是实际使用中仍然存在。但至少这篇文章佐证了我的猜测。
下面是苹果开发者论坛里的讨论,看来遇到这个问题人不少,我最终在这里面找到了解决方案
Xcode 11 iOS 13 simulator freeze UITextField
关掉模拟器的剪贴板同步功能,重启模拟器。
Simulator -> Edit -> Automatically Sync Pasteboard 取消勾选
重启模拟器 Hardware -> Restart
这应该是苹果的一个bug(Xcode11.1),希望苹果爸爸早日修复吧。
如果觉得这篇文章对你有帮助,请点个赞吧。如果有疑问可以关注我的公众号给我留言。
转载请注明出处,谢谢!