升級Xcode8后惶楼,編譯的app在iOS8中出現(xiàn)?崩潰的情況
異常?斷點停留在加載圖片的時候:
[UIImage imageNamed:@"icon"];
當(dāng)然,更多時候斷點是隨機(jī)的悦施,真機(jī)運(yùn)行時控制臺輸出以下log:
"malloc: *** error for object 0x17415d0c0: Invalid pointer dequeued from free list *** set a breakpoint in malloc_error_break to debug";
無論怎么調(diào)試怎么改代碼嘿歌,動用Instruments依然找不出問題。奇怪的是船殉, Xcode7打出來的包并沒有出現(xiàn)這種問題。
后來在蘋果的開發(fā)者論壇找到了回答:
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 8 or earlier
原來是圖片出了問題斯嚎,其實就是使用了16位或P3圖利虫,什么意思呢?P3是指圖片的色域范圍堡僻,正常圖片都是sRGB的糠惫,但是用16位或P3并沒有警告和報錯。Xcode8編譯打包的app中钉疫,含有16位P3在iOS9.3以下的系統(tǒng)都會出現(xiàn)奔潰現(xiàn)象硼讽。那么怎么把工程中的P3圖片找出來呢?原帖給出了方法陌选。
解決方法
xcode命令行提供了一個檢索圖片屬性的工具理郑,我們只需要把打包的所有圖片資源傳給工具執(zhí)行就可以了:
- 運(yùn)行工程后一般在
Products
分組下面都會有.app
后綴的app包生成,對著它右鍵 -> Show in Finder咨油,然后在Finder打開的文件夾中您炉,對著.app
文件右鍵,按住option鍵役电,然后就可以看到『將xxx拷貝為路徑名稱』赚爵,我們主要是為了拷貝文件的路徑。
2 .打開終端法瑟,然后用cd
命令進(jìn)入拷貝的目錄冀膝,執(zhí)行以下命令找到Asset.car
文件:
find . -name 'Assets.car'
- 用工具生成圖片資源的屬性表:
xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
/path/to/a/Assets.car
指第2步搜索到Asset.car文件目錄。
/tmp/Assets.json
指屬性表保存的目錄
- 打開
Assets.json
霎挟,在文件里搜索"DisplayGamut"
字段為"P3"
的即為要找的圖片窝剖,"Name"
字段就是圖片?資源名。 - 把這些有問題的圖片整理出來酥夭,麻煩切圖的同事切色域為sRGB的圖替換掉就可以了赐纱。