因Xcode的Assets問題發(fā)布App Store導(dǎo)致運(yùn)行崩潰

一、前言

文章主要講解自己親身經(jīng)歷的一個奇葩問題的處理全過程:

Xcode8打包發(fā)布后iOS9.0~9.2機(jī)型閃退
永無止境

就在幾個月前,在公司發(fā)布更新app后,很快通過了蘋果的審核,本來很高興,這下該解決的bug也解決了,新功能也上線了,可以漲工資了,哇哈哈?。?!
突然,微信里面收到騰訊Bugly發(fā)過來的消息提醒(項(xiàng)目集成了Bugly,主要是監(jiān)測崩潰率,上報崩潰日志),說我的應(yīng)用崩潰率波動異常大,此時的我心中有一萬個草泥馬在奔跑,趕緊打開Bugly看崩潰日志,經(jīng)過一番排查定位,最終確定新版本的崩潰全部發(fā)生在了iOS 9.0 ~ 9.2之間,哥們我趕緊拿出所有測試機(jī)(也只有iOS 7.1/9.3.5/10.1三部手機(jī)),用代碼跑沒問題,從App Store下載更新也沒問題。找遍全公司,幸好有個小妹妹的古老的iPad 系統(tǒng)是9.1,二話不說奪了過來,趕緊用代碼運(yùn)行跑起來,哎喲握草,不會崩潰啊,一臉懵逼?。?!換個思路,直接從App Store下載下來,好了,見證奇跡的時刻來了,哎喲,我一啟動app,卡著不動,大約10s之后果斷閃退,此時的我淚流滿面啊,果然崩潰發(fā)生在iOS 9.0 ~ 9.2。
你以為問題就解決了么?這只是定位到了問題,問題出在哪然而還是一臉懵逼,為什么會這樣,然后開始瘋狂搜索。。。

二、崩潰原因

在Xcode8中,如果你的圖片資源文件里有16位圖或者圖片顯示模式為P3,并且Deployment Target是iOS9.3以下的就會出現(xiàn)這個問題。(話說項(xiàng)目里面就是因?yàn)橐粡埿⌒〉膱D片,導(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。
此前圖片資源都是放在另外的文件夾里面的,而這個版本特意整理了項(xiàng)目的文件夾,把圖片資源都放到了image.xcassets了,這一移動導(dǎo)致這個問題的出現(xiàn)。

三、定位問題圖片

  1. 打一個ipa包,解壓你的應(yīng)用的ipa包,進(jìn)入到你應(yīng)用的Playload文件夾。
  2. 用find命令定位到Assets.car文件
find . -name 'Assets.car'
  1. 使用 assetutil 命令導(dǎo)出圖片的信息存儲到Assets.json文件中
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
  1. 打開剛才生成的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實(shí)用工具將這個描述文件修改如下:


指派它的描述文件為sRGB IEC61966-2.1,保存。

最后打包重新加急審核。。。第二天,審核通過,下載安裝沒有問題。

五、總結(jié)

這次的問題若不是及時發(fā)現(xiàn),將會會導(dǎo)致大面積用戶無法正常使用app,從而升級成一次嚴(yán)重事故。幸運(yùn)的是問題及時解決了,很感謝小妹妹的救命iPad。所以,遇到問題不必驚慌,只要按照正常思路,發(fā)現(xiàn)問題,尋找規(guī)律、定位問題、直到找到解決辦法。

此外還要感謝以下技術(shù)大牛:

http://www.tuicool.com/articles/meiMZze

順便附上一片app性能檢測的文章:

https://mp.weixin.qq.com/s/e-UDC_j9LZX5_YDG4s0-gg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容