前言
前两天升级Xcode到9.2,编写并自测程序一段时间没有发现什么异常问题,就在前两天用了我的小苹果IPhone 5 系统版本iOS8.1.1的自测了一边我的程序,让我大吃一惊项目中本地图片显示异常,被拉伸扭曲,相比很多开发者也会遇到这样的事情,在这里分享一下解决方法。
一、图片加载异常展示
页面上面的图片,加载出来的都是网络图片链接,没有加载出来的是都是本地图标,这是一个很奇怪的现象。项目中放置本地图标的地方有两处:一个是放bundle里面,另一个就是放在assets里面,下面两张截图显示的是我把本地图标放在assets里面出现的现象。
二、图片异常处理
异常图片解决有两种方法:
① 所有本地使用到的图标放置在bundle里
② 不适用新的版本Xcode9.2,返回到Xcode9.1
想使用其他方法来解决图片异常的情况,最终以失败告终,目前上面的两种方法是最好的解决方式。
注意:如果项目更新版本迫在眉睫,建议使用Xcode9.1发布项目版本,Xcode9.2出现图片异常这种情况,是Xcode版本bug问题。
三、回顾升级Xcode8图片崩溃处理
升级Xcode8的时候,在iOS9.3以下,由于 iOS - Xcode8的(图片格式)assets图标格式问题导致崩溃,找了好久才发现是图片的引起的。
1、分析一下崩溃原因:在Xcode8中,如果你的图片资源文件里有图片显示模式为P3或16位图,并且在Xcode的Deployment Target是iOS9.3以下的就会出现这个问题,如果你的App需要支持wide color functionality,那你就必须设置Deployment Target为iOS9.3以上,如果你的APP不需要支持wide color functionality并且你希望兼容iOS老版本,那么你需要将所有16-bit or P3 assets的图片转换为8-bit sRGB assets
2、定位到问题图片:
① 使用Xcode打一个ipa包并解压应用的ipa包,右击进入到你应用的Playload文件夹
② 使用find
命令定位到Assets.car文件
find . -name 'Assets.car'
③ 使用assetutil
命令导出图片的信息存储到Assets.json文件中
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
④ 打开刚才生成的Assets.json文件,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的内容。这个对应的Name就是出现问题的图片了
{
"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"
}
3、解决方法:和 UI 设计沟通重新设计一个符合要求的图片,这是目前最快的解决方法
案例:除自己开发的App出现问题之外,哈罗单车App在苹果5 iOS8.1 系统下也出现这样的问题了