一張圖片引發(fā)的iOS8運行崩潰

背景:

在項目中偶遇一奇葩問題:APP運行在iOS9、iOS10上以及模擬器上沒有問題,運行在iOS8上一打開就閃退。

調(diào)查問題:

通過Xcode排查,發(fā)現(xiàn)有日志輸出:

malloc: *** error for object 0x170242490: Invalid pointer dequeued from free list

*** set a breakpoint in malloc_error_break to debug

多次運行,每次都有上邊的日志輸出,而且crash到main函數(shù),出現(xiàn)EXC_BAD_ACCESS。Exception Breakpoint會指向一個imageNamed:函數(shù),但不是一定的。

問題很怪異,通過崩潰日志鎖定幾個控制器,我把控制器從項目中注釋,問題依舊存在。

沒辦法只能拿著錯誤日志找萬能的度娘,終于讓我發(fā)現(xiàn)有網(wǎng)友遇到和我一樣的問題:Xcode升級到8,在IOS9和10上運行沒問題,在IOS8上運行出錯,在上邊這篇文章的評論里尋根索源找到一篇參考文章:https://www.ianisme.com/ios/2409.html文章里描述的現(xiàn)象跟我遇到的基本是一樣的,我就嘗試了里邊定位到問題圖片方法。

解決方法:

步驟1. ?在.ipa文件中找到Assets.car拷貝到桌面。

步驟2. 打開終端。

步驟3. 運行命令 :sudo xcrun --sdk iphoneos assetutil --info /Users/peter/Desktop/Assets.car > /Users/peter/Desktop/temp/Assets.json

? ? ?其中/Users/peter/Desktop/Assets.car是Assets.car的全路徑,/Users/peter/Desktop/temp/Assets.json是所有圖片信息將要被導入到的一個全路徑文件。

步驟4. 打開Assets.json,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的內(nèi)容。

步驟5.? 找到內(nèi)容的對應的圖片名稱。如下圖:

步驟6. 找到圖片money_test(是我截出來的臨時圖片,不小心放到Assets里了)。

步驟7.? 在工程資源文件中找到并刪掉這個問題圖片(有些時候可能需要改變一下格式即可),然后重新運行APP,發(fā)現(xiàn)崩潰問題解決。

總結:一張小小的圖片居然能導致整個APP的閃退,這引起了我對APP資源管理的重要性有了一個全新的認識。希望有遇到一樣問題的伙伴有個參考。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容