今天遇到一个 Assets奔溃问题的问题,记录一下
9 UIKit 0x0000000188309994 __98-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:]_block_invoke + 424 + 8853908
10 UIKit 0x0000000188309734 -[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:] + 212 + 8853300
11 UIKit 0x0000000188309f18 -[_UIAssetManager imageNamed:withTrait:] + 528 + 8855320
12 UIKit 0x0000000187ea3c5c _UIImageWithNameAndTraitCollection + 96 + 4242524
13 UIKit 0x0000000187ac6220 _UIImageWithName + 48
百度原因:
如果你的图片资源文件里有16位图或者图片显示模式为P3,并且Deployment Target是iOS9.3以下的就会出现这个问题。
定位问题图片:
1.导出项目ipa包
2.解压:修改后缀名.ipa为.zip后直接解压该文件
3.打开终端进入Payload文件夹,并检索Assets.car
find . -name 'Assets.car'
4.使用 assetutil 命令导出图片的信息存储到Assets.json文件中
sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > ./Assets.json
网上还有下面这种方法,试验后没有生成Assets.json文件
sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > /tmp/Assets.json
5.打开生成的Assets.json文件,查找含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的内容。这个对应的Name就是出现问题的图片了
6.不想自己改图片的,直接扔给美工。
最新解决方案问题描述:(来自网友)
XCode 10打包的App在iOS 9上Crash(EXC_BAD_ACCESS)。
原因:App Store的Bug,上传后的IPA经过App Store处理后,加载assets中的图在iOS 9上会Crash。
解决方案三选一:
1、切回到XCode 9.4打包,前提是你没有用到一些iOS 12的新特性。
2、弃用Assets,把里面的图(除了icon和launch image)拖拽到项目里,按照普通图片的方式使用。
3、等待Apple修复(Xcode 10.1 beta 2已修复)。