解決了一個詭異的閃退BUG只在iOS9.3以下系統(tǒng)出現(xiàn) 有遇到的可以來看 共勉
大致上的原因是:iOS 線上版本圖片資源格式的問題導(dǎo)致的閃退
具體的情況與解決方法如下:
最近上架的app出現(xiàn)了一個詭異的BUG 有多詭異呢 這么說吧 之前公司測試的時候沒有任何問題??然后上線了之后 公司有個9.2系統(tǒng)的5S然后就各種閃退 啟動了之后 點擊tabbar中的任意一個 就會高概率的出現(xiàn)閃退現(xiàn)象??項目中有接入友盟統(tǒng)計 也用符號表查了下崩潰原因??錯誤根本沒辦法定位 很可惜啥都沒發(fā)現(xiàn)。
于是就各種在網(wǎng)上找相關(guān)的資料嘍 終于功夫不負(fù)有心人 找到了問題的原因所在:
圖片資源的問題
導(dǎo)致這種問題的原因是:在 Xcode 8 中匈仗,當(dāng)你資源文件中[含有16位圖]或者[圖片顯示模式γ值為'P3']且iOS targets設(shè)定為iOS 9.3以下就會出現(xiàn)這個問題. 如果你的app需要支持廣色域顯示的話瓢剿,那你必須得把target設(shè)置成iOS 9.3+,相反悠轩,如果你的app不需要支持廣色域且你想兼容 iOS 9.3 之前的項目间狂,你就得把所有的16位的或者顯示模式為'P3'圖片全都替換成8位模式的SRGB顏色的圖片
解決辦法如下:
1 導(dǎo)出ipa包 測試包。
2.然后把該ipa文件修改后綴名.ipa 為 .zip火架。
3.解壓該 .zip 文件鉴象。
4 打開終端病切換到你的app的Payload文件夾下的 .app bundle 文件夾內(nèi)。
5 用 find 命令定位到 Assets.car 文件 .app bundle , 形式如下:?? find . -name 'Assets.car'
6 使用 assetutil 命令找到任何包含著 16-bit or P3 的資源文件, 對每個 Assets.car 執(zhí)行以下命令 : sudo xcrun --sdk iphoneos assetutil --info Assets.car> /tmp/Assets.json 回車之后會讓你輸入密碼 輸入密碼回車即可
7.open /tmp/Assets.json???? 打開上一步生成的 /tmp/Assets.json 文件并查找包含有 “DisplayGamut": “P3” 或者相關(guān)的內(nèi)容. 這段json的"Name"字段對應(yīng)的值就是16位或顯示的γ值為P3的資源文件名.
以下這種就是正常的??"BitsPerSample" : 8,???? "DisplayGamut" : "sRGB",
{
"Compression" : "lzvn",
"BitsPerSample" : 8,
"LayoutDirection" : "0 - Horizontal",
"AssetType" : "Image",
"ColorModel" : "RGB",
"Name" : "nav_use_p",
"PixelWidth" : 360,
"Graphics" : "GLES2,0",
"Subtype" : 0,
"PixelHeight" : 112,
"SizeClass Horizontal" : "universal",
"EdgeInsets" : "top:0 left:0 bottom:0 right:0",
"Scale" : 3,
"Memory" : "512MB",
"Opaque" : false,
"DisplayGamut" : "sRGB",
"Idiom" : "universal",
"Encoding" : "ARGB",
"Image Type" : "kCoreThemeOnePartScale",
"SizeClass Vertical" : "universal"
},
以下這種情況就是不正常的??"BitsPerSample" : 16,????"DisplayGamut" : "P3",
{
"Compression" : "lzvn",
"BitsPerSample" : 16,
"LayoutDirection" : "0 - Horizontal",
"AssetType" : "Image",
"ColorModel" : "RGB",
"Name" : "iPhone6Plus",
"PixelWidth" : 1242,
"Graphics" : "GLES2,0",
"Subtype" : 0,
"PixelHeight" : 2280,
"SizeClass Horizontal" : "universal",
"EdgeInsets" : "top:0 left:0 bottom:0 right:0",
"Scale" : 2,
"Memory" : "512MB",
"Opaque" : true,
"DisplayGamut" : "P3",
"Idiom" : "universal",
"Encoding" : "ARGB-16",
"Image Type" : "kCoreThemeOnePartScale",
"SizeClass Vertical" : "universal"
},
全局搜索含有?? "BitsPerSample" : 16的圖片 在工程中找到所對應(yīng)的圖片 讓UI重新切圖 替換掉即可??新包已經(jīng)把倆張問題圖片替換掉了 用9.2系統(tǒng) iphone試了下 完全沒有問題 OK 問題解決
希望幫助需要幫助的朋友