問題顯現(xiàn)
前一段時(shí)間我們的App 遭到個(gè)別客戶反饋葱跋,點(diǎn)開過一會兒就卡住然后閃退,根本沒法使用召边,客戶很生氣。但我們自己的手機(jī)使用是正常的裹驰,并沒有模擬出來該問題隧熙,一時(shí)半會兒也不知道什么原因,并且大多數(shù)客戶使用都是正常的幻林。?
我們獲悉有問題的幾個(gè)客戶手機(jī)都是iOS 9系統(tǒng)贞盯,手頭也沒有iOS 9 ?的真機(jī)可測試,使用iOS 9 的模擬器測試一切正常沪饺。其中一個(gè)有問題的客戶躏敢,很配合地提供手機(jī)的 UDID 號給我們,我們專門為他提供了Adhoc 的版本整葡,他反饋可以正常使用件余。
一周時(shí)間過去,iOS 9 用戶量非常低遭居,所以這個(gè)問題沒有太在意啼器。直到一個(gè)很惱火執(zhí)拗不愿升級手機(jī)系統(tǒng)的“更年期”女客戶一直反饋沒法使用,我和同事決定去客戶公司現(xiàn)場查找并解決這個(gè)問題俱萍。
問題現(xiàn)象
來到客戶公司端壳,事先說明我們需要使用她的手機(jī)連接電腦進(jìn)行調(diào)試,我們保證僅點(diǎn)擊訪問我們公司的 App枪蘑,不會打開其他應(yīng)用程序损谦,不會訪問個(gè)人隱私數(shù)據(jù)。就這樣她還不太放心地坐在旁邊盯著我們岳颇,還問我們大概需要多長時(shí)間照捡,我說:我們還沒確定問題,快則半小時(shí)赦役,慢則兩小時(shí)也說不準(zhǔn)麻敌。她忙其他事情,還喊另一個(gè)女同事過來看著我們掂摔,搞得我們放不開手腳术羔。
連上客戶的iPhone 6s (iOS 9.2 系統(tǒng)),Xcode 跑一遍運(yùn)行安裝之后打開卻是正常的乙漓,并沒有閃退级历。此時(shí)內(nèi)心忐忑,無法定位到問題便更無從下手叭披。我又想了一下寥殖,把剛跑完的程序刪掉,又從App Store 重新下載涩蜘,再看看線上的閃退到底是什么現(xiàn)象嚼贡。
模擬幾遍之后發(fā)現(xiàn):
1. 安裝之后首次打開有時(shí)候在登錄頁面就卡住,沒法輸入賬號密碼同诫,過了幾秒鐘就閃退粤策;
2. 首次打開有時(shí)候登錄頁面能輸入賬號密碼,但剛進(jìn)入到首頁误窖,過十幾秒鐘就卡住叮盘,然后閃退;
3. 一旦閃退之后霹俺,再點(diǎn)擊就無法啟動程序柔吼,直接閃退回到桌面;
4. 手機(jī)系統(tǒng)內(nèi)無法查看到崩潰日志丙唧;
5. 真機(jī)調(diào)試打包的正常愈魏,模擬器也正常,Adhoc版本正常想际,唯有App Store 下載的會崩潰培漏,并且是在 iOS 9 系統(tǒng)上。
問題根源
究竟是什么問題這么奇怪沼琉,造成個(gè)別用戶點(diǎn)開App 就閃退北苟,而且是 iOS 9 系統(tǒng),確切地說是 iOS 9.2 及以下的系統(tǒng)會出現(xiàn)閃退打瘪,并且是從App Store 下載后運(yùn)行出現(xiàn)各種崩潰友鼻,比如在登錄頁面就崩潰,或者能進(jìn)入到首頁然后過幾秒就崩潰闺骚。
根據(jù)上面的問題現(xiàn)象搜索查找了一下彩扔,想不到竟有許多開發(fā)者也遇到了這樣詭異的問題。原來是項(xiàng)目中增加了一些 P3 廣色域圖標(biāo)造成的資源文件加載時(shí)產(chǎn)生崩潰僻爽,根源是 iOS 9.3 之下的系統(tǒng)不支持廣色域圖標(biāo)虫碉。回想了一下胸梆,原來是我上兩個(gè)版本增加一個(gè)功能時(shí)敦捧,自己從 iconfont.cn 下載了幾個(gè)圖標(biāo)導(dǎo)入到項(xiàng)目中所致须板。
終于找到問題,我們給客戶簡單做了解釋兢卵,我承認(rèn)是自己導(dǎo)入的不合格圖標(biāo)造成习瑰,并說明下個(gè)版本會修復(fù),重新用 Xcode 給她運(yùn)行一個(gè)版本保證她當(dāng)前可以正常使用秽荤,客戶很高興甜奄,這時(shí)才想起給我們倆每人拿了一聽冰可樂,算是獎勵吧窃款。我們?nèi)玑屩刎?fù)课兄,告辭并返回公司趕緊修復(fù)這幾個(gè)圖標(biāo)并重新發(fā)布版本。
問題解決
解決辦法就是查找出當(dāng)前項(xiàng)目中為16-bit 或者P3 廣色域的圖標(biāo)晨继,并將它們替換為8-bit 的sRGB 圖標(biāo)烟阐,可以找美工重新提供圖標(biāo),或者自己動手用系統(tǒng)的圖片編輯器—工具--指派描述文件為Apple RGB踱稍、或者 PhotoShop 軟件—導(dǎo)出--存儲為web 所用格式曲饱,選擇Png-8, 導(dǎo)出為普通的RGB 描述文件圖標(biāo)。
如何查找廣色域圖標(biāo):
1. 將項(xiàng)目打包后珠月,找到ipa 文件(ipa 本身是種壓縮文件)扩淀,右鍵選擇解壓縮工具打開;
2. 解壓縮后有個(gè)Payload 文件夾啤挎,文件夾下面是你的 App驻谆,選擇右鍵顯示包內(nèi)容;
3. 可以看到里面全部是按字母排序的 App 所用的資源文件庆聘,bundle 胜臊、png、gif伙判、js 等文件象对。
3. 按字母順序找到 “Assets.car”文件,該文件就是匯總所有資源文件信息的一個(gè)資源匯總文件宴抚。當(dāng)然也可以cd 到 你的 App 資源所在文件夾后勒魔,用 find .-name ‘Assets.car’ 命令找到該文件。
4.?使用 assetutil 命令工具可以打開該?Assets.car 文件菇曲,并將所有的 assets 資源信息轉(zhuǎn)化輸出到一個(gè)指定的 json 文件中冠绢,方便我們檢索哪些圖標(biāo)是16-bit 或者 P3 圖標(biāo)。
sudo xcrun --sdk iphoneos assetutil --info ?Assets.car的絕對路徑> 在桌面上或者其他文件夾下新建一個(gè)以 .json 為后綴的文件 (如AssetsInfo.json) 的絕對路徑
5. 打開這個(gè)輸出的?AssetsInfo.json 文件常潮,搜索查找包含有 “DisplayGamut": “P3”的資源文件弟胀,那么該文件就是16-bit 或者 p3 圖標(biāo)。
問題擴(kuò)展
關(guān)于顏色色彩配置,什么是廣色域孵户,請查看這篇文章:PS中的RGB色彩配置高手都知道萧朝!
WWDC 2016?有一個(gè)專門講廣色域的視頻,有興趣可以看看延届。
最后剪勿,希望大家有所收獲贸诚,都能順利解決問題方庭!