一、前言
文章主要講解自己親身經(jīng)歷的一個奇葩問題的處理全過程:
Xcode8打包發(fā)布后iOS9.0~9.2機型閃退
就在幾個月前逮诲,在公司發(fā)布更新app后,很快通過了蘋果的審核,本來很高興评腺,這下該解決的bug也解決了,新功能也上線了蝶念,可以漲工資了芋绸,哇哈哈!M⑷亍马昙!
突然,微信里面收到騰訊Bugly發(fā)過來的消息提醒(項目集成了Bugly,主要是監(jiān)測崩潰率攒暇,上報崩潰日志)子房,說我的應(yīng)用崩潰率波動異常大,此時的我心中有一萬個草泥馬在奔跑田度,趕緊打開Bugly看崩潰日志解愤,經(jīng)過一番排查定位,最終確定新版本的崩潰全部發(fā)生在了iOS 9.0 ~ 9.2之間兰怠,哥們我趕緊拿出所有測試機(也只有iOS 7.1/9.3.5/10.1三部手機)揭保,用代碼跑沒問題,從App Store下載更新也沒問題秸侣。找遍全公司,幸好有個小妹妹的古老的iPad 系統(tǒng)是9.1椭坚,二話不說奪了過來搏色,趕緊用代碼運行跑起來,哎喲握草垂涯,不會崩潰啊航邢,一臉懵逼!2俾狻赚窃!換個思路,直接從App Store下載下來跨细,好了河质,見證奇跡的時刻來了,哎喲散休,我一啟動app乐尊,卡著不動,大約10s之后果斷閃退限府,此時的我淚流滿面啊痢缎,果然崩潰發(fā)生在iOS 9.0 ~ 9.2。
你以為問題就解決了么署穗?這只是定位到了問題,問題出在哪然而還是一臉懵逼案疲,為什么會這樣,然后開始瘋狂搜索诺舔。春贸。遗遵。
二、崩潰原因
在Xcode8中允粤,如果你的圖片資源文件里有16位圖或者圖片顯示模式為P3翼岁,并且Deployment Target是iOS9.3以下的就會出現(xiàn)這個問題。(話說項目里面就是因為一張小小的圖片悉患,導(dǎo)致了這次崩潰榆俺,不知道設(shè)計師是怎么弄出來的這個特殊圖片…)如果你的App需要支持wide color functionality,那你就必須設(shè)置Deployment Target為iOS9.3以上陪捷。如果你的APP不需要支持wide color functionality并且你希望兼容iOS老版本诺擅,那么你需要將所有16-bit or P3 assets的圖片轉(zhuǎn)換為8-bit sRGB assets。
此前圖片資源都是放在另外的文件夾里面的苍碟,而這個版本特意整理了項目的文件夾撮执,把圖片資源都放到了image.xcassets了,這一移動導(dǎo)致這個問題的出現(xiàn)县忌。
三、定位問題圖片
- 打一個ipa包症杏,解壓你的應(yīng)用的ipa包,進入到你應(yīng)用的Playload文件夾穴豫。
- 用find命令定位到Assets.car文件
find . -name 'Assets.car'
- 使用 assetutil 命令導(dǎo)出圖片的信息存儲到Assets.json文件中
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
- 打開剛才生成的Assets.json文件精肃,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的內(nèi)容帜乞。這個對應(yīng)的Name就是出現(xiàn)問題的圖片了。
{
"SizeClass Vertical" : "universal",
"Graphics" : "GLES2,0",
"Name" : "ianisme.com",
"Scale" : 2,
"Idiom" : "universal",
"Memory" : "512MB",
"LayoutDirection" : "0 - Horizontal",
"DisplayGamut" : "P3",
"Encoding" : "ARGB-16",
"SizeClass Horizontal" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"AssetType" : "Image",
"Subtype" : 0,
"EdgeInsets" : "top:0 left:0 bottom:0 right:0"
}
四习柠、轉(zhuǎn)換圖片為8-bit sRGB assets格式
找到這個圖片照棋,然后Command+i 查看這個圖片的信息,發(fā)現(xiàn)這個出問題的文件的顏色描述文件有問題溶锭,和別的圖片文件不一樣符隙。
使用ColorSync實用工具將這個描述文件修改如下:
指派它的描述文件為sRGB IEC61966-2.1驻售,保存更米。
最后打包重新加急審核征峦。。栏笆。第二天,審核通過蚜枢,下載安裝沒有問題。
五厂抽、總結(jié)
這次的問題若不是及時發(fā)現(xiàn),將會會導(dǎo)致大面積用戶無法正常使用app昭殉,從而升級成一次嚴重事故藐守。幸運的是問題及時解決了,很感謝小妹妹的救命iPad乾蓬。所以足淆,遇到問題不必驚慌礁阁,只要按照正常思路,發(fā)現(xiàn)問題姥闭,尋找規(guī)律、定位問題靠欢、直到找到解決辦法铜跑。
此外還要感謝以下技術(shù)大牛:
順便附上一片app性能檢測的文章: