今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

开发中遇到的问题(二)

开发中遇到的问题,分享给大家,有则改之,无则加勉。#

1. UIScrollView 加了 category 之后导致的手写输入时崩溃的问题 —— [UIKBBlurredKeyView candidateList]#

上周更新的应用,这周上线了,然后昨天旁边的同事告诉我说,友盟上的崩溃信息,崩溃率 1% 点多了,赶紧查查吧。
看了一下发现大部分的崩溃都是这个日志:[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance...,于是搜了一下

崩溃重现:#

切换到有输入的地方,点击输入,切换输入法到手写输入法(系统的,第三方的没事),然后输入,输入一个之后,第二个字就会崩溃。

原因:#

是因为给 UIScrollView 加了个 category,是用于处理点击屏幕的事件的(触摸屏幕回收键盘),之前一直都是这么做的,也没问题,又或者又问题也没人反馈,😓,估计是投诉无门啊。。。。。而且我们测试的时候也没有测试手写输入法,因为没人会想到这还会有什么不同。苹果自己也没想到,所以我们就上线了,然后就有崩溃了。。。这坑爹的

解决:#

既然有这个问题,就要解决,而且用了这个 category 之后,最坑的地方在于,即使你没有导入这个头文件,在其他输入的地方也有可能会跟这个冲突,从而崩溃。。。所以问题还是很严重地!!!
解决的方法很简单,删掉这个 category,换种方式实现回收键盘,具体参照这个博客[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance 0x177cc850,我就是这么改的。

2. webView 加载网页时出现了这个,NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)#

昨天给一个界面,新增一个入口,点击跳转一个网页,需要把登陆状态带到网页里,做好之后,今天提测,测试发现跳转的网页没问题,但是不能添加到购物车,点击网页下面标签中的个人中心没反应。。。

定位原因:#

看看安卓的显示如何,是否能跳转,都正常。。。。。
然后开始排查,
a. 是不是登陆状态没有传到网页里;
b. 是不是手机的问题,这个网址直接从浏览器能否打开
这两个排除之后,没办法,
c. 单步来打印,看看能够正常跳转的网址和不能跳转的有什么不一样。
还真有不一样的地方,能够正常跳转的都是 http 的请求,而个人中心的本来也是 http 的,但是请求之后有一次重定向(自动跳转),到 https 的;然后就出问题了,走的 webview 加载失败的方法,打印的 error 是

NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

so,为什么呢,再看看这个 https 链接在浏览器里的状况,显示的是,证书过期不安全的链接。
d. 百度,额,不要吵,确实是百度。。。。

结论:#

是因为测试环境的证书好像是后台自己弄的,然后还过期了,于是就会有这个问题,

解决方法:#

这个点解决方法有三种:
一种是后台更新证书,找一个好的能被信任的证书放过来;
第二种是客户端改代码,把不安全的这个给屏掉;但是最好能区分一下是上线还是测试,上线的时候把这些给去掉,要不这个 https 就没意义了。
最后一种是,大家都不改,测试不要测这个了,反正线上是好的。。。。。😄
不要问我用的哪种。。。。。

如果客户端要修改的话,参考iOS UIWebView 加载 https 站点出现 NSURLConnection/CFURLConnection HTTP load failed (kCFStreamE...这个,我没试啊,好像暴露了什么。。。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。