今是昨非

今是昨非

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

iOS beta4崩潰修正

iOS beta4 崩潰修改#

前言#

升級 iOS Beta4 後,有使用者反饋使用我們的 APP 時會崩潰,有登錄的、查看詳情的,都會出現崩潰。我們查看 Bugly 數據也發現崩潰率上升了 0.02%,直接超出了指定的崩潰指標。雖然是由於升級 beta 版系統導致的,但還是要排查出具體原因,然後儘快適配。所以我說一下我發現的哪個 API 導致的,供大家參考一下。

排查#

由於崩潰是必現的,所以排查起來很容易,找一台升級了 iOS14 beta4 的手機,然後復現步驟,看具體崩潰的地方,即可
我們 APP 是由於使用了SexyJson這個庫,其中 SexyJsonProtocol 這個類第 67 行中 sexyToValue () 的方法裡使用 AnyRandomAccessCollection 這個地方有強制解包屬性,在之前的系統版本中,這個地方返回的值不為空,所以沒有問題,但是在這個版本裡,這個屬性返回為空了,就導致了新系統中的崩潰。

如圖所示位置:

修改#

由於是強制解包導致的,所以直接的修改就是,把這個地方的強制解包,改為 if let 的格式,修改後,運行,binggo,崩潰確實沒了。但是在驗證過程中,由於我們使用這個是把請求的對象轉為參數字典,這個地方雖然不崩潰了,但是正常應該存在的值,也還是沒有,換句話說,就是所有請求中使用這個方法轉字典的,都失敗了。。。。怕不怕,還好我們這個地方有報錯直接拋出來了,要不然真的以為改好了就這麼上線,服務端的就會罵人了,因為會發現接口錯誤率剛剛地。仔細分析這個地方實現後,發現其實是使用 Mirror 來獲取類中所有屬性生成字典,一步步調試會發現,其實 Mirror 類還是正常工作的,mirror.children 也是不受影響的,but,AnyRandomAccessCollection (mirror.children) 就返回空了,所有就是 AnyRandomAccessCollection () 這個方法在 iOS14 beta4 中不能正常工作了。於是再次修改

如圖所示,第一次修改:

第二次修改:

最後#

所以我們項目裡在 iOS14 beta4 中的崩潰是由於 SexyJson 庫中的強制解包導致的,但是真正的原因是 iOS14 beta4 中 AnyRandomAccessCollection () 此方法不能正常工作了。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。