這個(gè)事情是發(fā)生在近期没龙,剛上線的項(xiàng)目中,頻繁crash缎玫,而且啟動(dòng)就可能crash硬纤,crash地方不唯一,點(diǎn)擊都可能會(huì)出現(xiàn)crash碘梢。
根據(jù)友盟統(tǒng)計(jì)以及客服反饋咬摇,出現(xiàn)crash是iOS9.0-9.2的系統(tǒng)版本下的機(jī)型。而且是針對(duì)于已上線的情況煞躬,拿測(cè)試機(jī)本地運(yùn)行沒(méi)有發(fā)現(xiàn)crash岗憋。
友盟統(tǒng)計(jì)給的信息是“Application received signal SIGSEGV”奕剃,用dSYM定位為友盟分享的報(bào)錯(cuò)旦部。經(jīng)過(guò)查詢資料霉晕,友盟給的解釋的只是友盟插件的報(bào)錯(cuò),并不會(huì)影響項(xiàng)目的正常運(yùn)行雷客。也就是說(shuō)crash的原因不是這個(gè)芒珠。
然后就是檢查問(wèn)題的過(guò)程,經(jīng)過(guò)查看發(fā)現(xiàn)搅裙。剛開(kāi)始會(huì)在啟動(dòng)過(guò)程中頻繁閃退皱卓,是由于蘋果那邊注冊(cè)APNs頻繁失敗裹芝,導(dǎo)致JPush頻繁占用主線程去重復(fù)注冊(cè),啟動(dòng)時(shí)間過(guò)長(zhǎng)娜汁,然后進(jìn)程被殺掉所導(dǎo)致的嫂易。接著就是設(shè)置僵尸對(duì)象、檢查內(nèi)存泄漏掐禁。因?yàn)檫@次是對(duì)公司的線上項(xiàng)目進(jìn)行一次小的升級(jí)怜械,我著重檢查新添加的功能模塊,并未發(fā)現(xiàn)問(wèn)題傅事。同時(shí)也考慮過(guò)是不是某個(gè)第三方插件更新了缕允,也未發(fā)現(xiàn)問(wèn)題。
于是翻墻看看別人是否也有這種情況蹭越,找到一個(gè)類似情況的文章障本。
大意就是:你的項(xiàng)目中如果包含了16位或者P3的圖,那么請(qǐng)將項(xiàng)目運(yùn)行在iOS9.3以上般又。對(duì)于那些對(duì)圖像要求并不高的項(xiàng)目彼绷,又希望兼容老的版本的設(shè)備,那么請(qǐng)將這些16位或者P3的圖換成8位的圖茴迁。
文中給出了詳細(xì)的操作步驟來(lái)找到需要替換的圖片:
1、先把你的項(xiàng)目打出一個(gè).ipa的包萤衰;
2堕义、.ipa改成.zip格式;
3脆栋、解壓縮之后會(huì)有一個(gè)名為“Payload”的文件夾倦卖,里面有一個(gè).app;
4椿争、打開(kāi)終端怕膛,將當(dāng)前工作路徑改為“.app”之下:
? ? $ cd path/to/Payload/your.app
5、看看你的.app是否包含了一個(gè)“Assets.car”的文件秦踪,里面就可能有導(dǎo)致你程序崩潰的罪魁禍?zhǔn)祝?/p>
// 查看路徑下所有文件褐捻,當(dāng)然在文件非常多的情況下,可以用find命令
$ ls
$ find . -name Assets.car
6椅邓、要找出里面的P3或16位圖柠逞,現(xiàn)將這個(gè)文件用下面命令轉(zhuǎn)成JSon格式:(/tmp/Assets.json為轉(zhuǎn)出后的文件路徑)
$ sudo xcrun --sdk iphoneos assetutil --info Assets.car > /tmp/Assets.json
7、然后打開(kāi)這個(gè)JSon文件景馁,找出里面的P3圖片板壮,在你的工程中找到叫這個(gè)名字的圖片,替換了就可以了合住。