前言:
最近升級 Xcode8.0后一直擔(dān)心有什么隱藏的問題,今天又被坑了一次,不知道什么原因 Xcode 運(yùn)行的時候一直crash到main函數(shù),卡在啟動頁,沒有任何錯誤信息,仔細(xì)檢查了自己寫的東西,確認(rèn)沒有什么錯誤,在項(xiàng)目里面是一頓狂找,還是無果,折騰了很久,就利用 SVN 回滾,才發(fā)現(xiàn)是最近添加圖片的造成的原因,下面給出解決方法:
左圖是不符合要求的圖片格式,右圖是符合要求的圖片
針對情況:
如果你剛剛升級了Xcode8,而你的項(xiàng)目的Deployment Target是iOS 9.3以下虽风,運(yùn)行iOS8的時候過了幾十秒后crash到main函數(shù)船侧,出現(xiàn)EXC_BAD_ACCESS耕捞,或者崩潰到imageNamed:梨睁,或者每次編譯運(yùn)行隨機(jī)崩潰到某個地方柜裸。
崩潰的原因:
在Xcode8中,如果你的圖片資源文件里有16位圖或者圖片顯示模式為P3,并且Deployment Target是iOS9.3以下的就會出現(xiàn)這個問題俄讹。(話說我公司的項(xiàng)目里面就出現(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
定位到問題圖片
- 打一個ipa包踪蹬,解壓你的應(yīng)用的ipa包,進(jìn)入到你應(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"
},
具體的圖片處理方式:
- 最簡單的方法就是,聯(lián)系 UI 重新鎖一個符合要去的圖片(這是最簡答的方法)
- 當(dāng)然還有其他的解決方法(操作有點(diǎn)復(fù)雜),請參考https://www.ianisme.com/ios/2409.html
當(dāng)然還可以參考這篇文章:
http://stackoverflow.com/questions/39404285/xcode-8-build-crash-on-ios-9-2-and-below