背景:
在項目中偶遇一奇葩問題: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)崩潰問題解決。