天天看點

一個無厘頭的bug

最近 app 更新真是 bug 不停呀。前面有 Xcode 10 打 AppStore 管道包導緻部分使用者閃退,後面又出現很小機率個人中心閃退。今天就着重記錄下個人中心閃退這個無厘頭的 bug。

首先,介紹下閃退現象。新版個人中心有部分區域顯示的是老版本的界面,而且點選個人中心的任何一個地方都會閃退。

當然,既然有閃退,肯定會有閃退日志的,檢視閃退日志,顯示的是數組第一個元素為 nil。

根據崩潰日志,反向查找,發現數組中存放的就是出問題那部分 UI 界面的子控件。由于 UI 出現問題,導緻有的子控件為 nil, 這樣在添加到數組中(字面量)時,就會造成崩潰。

為什麼 UI 會出現異常呢,這就是我感覺到無厘頭的地方。

因為,這部分 UI 是根據 xml 格式加載的,是以我就斷定可能是某些情況下 iOS 系統安裝 app 時,xml 檔案不替換導緻的。經過不同的包發現隻要是使用 xml 布局的頁面,都會出現 xml 不會替換的問題。但是,iOS 本身是支援 xml 格式資料的,沒有理由不替換呀。為什麼單單是布局有問題呢?

由于沒有站得住腳的結論,就隻好去 FlexLib(使用 xml 布局) 開發群裡問了群主,得知了其在 Release 下會使用緩存。而且緩存是根據 build 号來的。這樣就找到了問題,因為我的 build 會在新版本構造的時候重置,是以導緻 app 出現了布局混亂。其實 xml 确實是替換了,隻是布局使用的是緩存。

經過一天的折騰,終于找到了問題。也算是可以安心睡個覺了,不過,還是要總結一下,以便以後快速找準方向。

  1. 輕易不要懷疑 iOS 系統。雖然 Xcode 10 确實是 Apple 的問題,但是正常情況下,還是要從其他方向着手,懷疑 Apple 作為最後一步。
  2. 輕易不要相信 第三方。代碼都是人寫的,尤其 github 上星少的,有 bug 還是比較正常的,因為沒有那麼多人使用,問題就不會那麼容易暴露出來。
  3. 有問題及時解決。因為當時有個使用者手機出現了問題,還在我面前,我抓包看了一下,資料不對,字元類型的解析成了數組類型。就抛給服務端了,後來想了一下,之前也有這種問題,而且是正常的。因為 charles 解析 protobuf 遇到某些數字就會出現這種情況。
  4. 一切現象都有解釋。因為 Xcode 10 導緻崩潰的時候,我看到日志有不同地方的崩潰,是以以為這個也是那個原因。而且使用者截圖的時候,安卓說了一個疑問:界面為什麼會這樣子?我當時說了一句都有可能,以為還是同一個問題。等到最終找到問題,發現這種現象是可以解釋的了。
  5. 初始化 array dictionary 時,盡量不使用字面量,這樣子就會盡量避免崩潰問題了。