iOS 9.3以下 Assets奔溃问题

今天遇到一个 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已修复)。

你可能感兴趣的:(iOS 9.3以下 Assets奔溃问题)