iOS10+Xcode8 + iOS8 -- Xcode8的assets問題導(dǎo)致運行iOS8崩潰的解決方案

iOS 10 出來了,項目需要適配章贞,更新Xode8 后寝蹈,項目運行iOS 8.4 真機時节槐,出現(xiàn)莫名其妙崩潰的問題晶框。在網(wǎng)上尋求解決方案時發(fā)現(xiàn)了這篇博文-- @ian博客 Xcode8的assets問題導(dǎo)致運行iOS8崩潰的解決方案

看完文章后析桥,發(fā)現(xiàn)操作有點復(fù)雜。點開博文文獻《Xcode 8 build crash on iOS 9.2 and below》
!!!發(fā)現(xiàn)了這個

 Update: If your Deployment Target is set to either 8.3 or 8.4 and you have an asset catalog then you will 
receive this same error message, even if you do not actually have 16-bit or P3 assets. In this case you will 
either need to lower your Deployment Target to 8.2, or move it up to 9.x.

結(jié)合項目另一個端Deployment Target 為8.0運行沒問題里覆,將發(fā)現(xiàn)此問題的端的Deployment Target 從8.4改為8.0 后運行就沒問題了丧荐,簡單快速。<( ̄3 ̄)> Xcode更新真是...漲姿勢喧枷。

博文如下:

一虹统、前言

如果你剛剛升級了Xcode8,而你的項目的Deployment Target是iOS 9.3以下隧甚,運行iOS8的時候過了幾十秒后crash到main函數(shù)车荔,出現(xiàn)EXC_BAD_ACCESS,或者崩潰到imageNamed:戚扳,或者每次編譯運行隨機崩潰到某個地方忧便。那么恭喜你,你讀完這個文章你可能就解決了帽借。

二珠增、崩潰原因

在Xcode8中,如果你的圖片資源文件里有16位圖或者圖片顯示模式為P3砍艾,并且Deployment Target是iOS9.3以下的就會出現(xiàn)這個問題蒂教。(話說我公司的項目里面就出現(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

三梦皮、定位到問題圖片

1.打一個ipa包炭分,解壓你的應(yīng)用的ipa包,進入到你應(yīng)用的Playload文件夾剑肯。

// 在終端中打開 (補充)
cd ../Playload

2.用find命令定位到Assets.car文件

find . -name 'Assets.car'

3.使用 assetutil 命令導(dǎo)出圖片的信息存儲到Assets.json文件中

sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

4.打開剛才生成的Assets.json文件捧毛,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的內(nèi)容。這個對應(yīng)的Name就是出現(xiàn)問題的圖片了让网。

 //  打開json文件 (補充)
open /tmp/Assets.json 
  {
    "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格式

我們找到這個圖片,然后CMD+i 查看這個圖片的信息寂祥,我們發(fā)現(xiàn)我這個出問題的文件的顏色描述文件有問題,和別的圖片文件不一樣七兜。
出問題的圖片:

別的圖片

1.方法一(單個處理問題圖片):

下面我們使用ColorSync實用工具將這個描述文件修改下

xcode8crash3

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

xcode8crash4

再次編譯運行我們的APP腕铸,發(fā)現(xiàn)問題解決了惜犀!

2.方法二(暴力處理所有圖片):

這里我們使用bash script直接處理所有圖片為正確格式,這樣我們就不用去定位是哪個圖片的問題了狠裹,或許更方便一些虽界。

#!/bin/bash
DIRECTORY=$1
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"
XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')"
for xcasset in $XSAASSETSD
do
    echo "---$xcasset"
    IMAGESETS="$(find "$xcasset" -name '*.imageset')"
    for imageset in $IMAGESETS
    do
        echo "------$imageset"
        FILES="$(find "$imageset" -name '*.png')"
        for file in $FILES 
        do
            echo "---------$file"
            sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" $file --out $file
        done
    done
done
echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"

五、總結(jié)

出現(xiàn)這個問題真的很蛋疼涛菠,但是最后終于解決了莉御。每一次Apple編譯器的升級都會伴隨著大大小小的問題,只要我們懷著一顆不拋棄不放棄的決心俗冻,最后一定可以攻克難題礁叔。最后要感謝公司同事的指導(dǎo),還要感謝以下參考文獻的作者們迄薄,沒有他們的實踐琅关,這個問題或許困擾更久。

參考文獻:

1.《ITMS-90682: can’t contain 16-bit or P3 assets if the app supports iOS 8 or earlier》
2.《Xcode 8 build crash on iOS 9.2 and below》
3.《ERROR ITMS-90682: Invalid Bundle – The asset catalog at ‘Payload/XXXXX/Assets.car’ can’t contain 16-bit or P3 assets if the app supports iOS 9.3 or earlier. 》
4.《Assets.car can’t contain 16-bit or P3 assets if the app supports iOS 8 or earlier?》
5.《Community bug reports》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讥蔽,一起剝皮案震驚了整個濱河市涣易,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冶伞,老刑警劉巖新症,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碰缔,居然都是意外死亡账劲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瀑焦,“玉大人腌且,你說我怎么就攤上這事¢晃停” “怎么了铺董?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禀晓。 經(jīng)常有香客問我精续,道長,這世上最難降的妖魔是什么粹懒? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任重付,我火速辦了婚禮,結(jié)果婚禮上凫乖,老公的妹妹穿的比我還像新娘确垫。我一直安慰自己,他們只是感情好帽芽,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布删掀。 她就那樣靜靜地躺著,像睡著了一般导街。 火紅的嫁衣襯著肌膚如雪披泪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天搬瑰,我揣著相機與錄音款票,去河邊找鬼。 笑死泽论,一個胖子當(dāng)著我的面吹牛徽职,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佩厚,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼姆钉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抄瓦?” 一聲冷哼從身側(cè)響起潮瓶,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钙姊,沒想到半個月后毯辅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡煞额,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年思恐,在試婚紗的時候發(fā)現(xiàn)自己被綠了沾谜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胀莹,死狀恐怖基跑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情描焰,我是刑警寧澤媳否,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站荆秦,受9級特大地震影響篱竭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜步绸,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一掺逼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓤介,春花似錦坪圾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漓概。三九已至漾月,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胃珍,已是汗流浹背梁肿。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留觅彰,地道東北人吩蔑。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像填抬,于是被迫代替她去往敵國和親烛芬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容