升级Xcode8之后,重新打包给我报错,错误如下:
ERROR ITMS-90682: "Invalid Bundle. The asset catalog at 'Payload/XX.app/Assets.car' can't contain 16-bit or P3 assets if the app is targeting iOS releases earlier than iOS 9.3."
1、导出项目的 ipa 文件
2、定位到该ipa文件使用解压工具解压 ,或者修改后缀名.ipa 为 .zip后直接解压
3、解压后会有Payload 文件夹,里面会有你的APP文件
4、打开终端切换到你的app的Payload文件夹下的 .app bundle 文件夹内,形式如下:(终端输入cd 拖入Payload里面的文件,回车)
cd path/to/Payload/your.app
5、用 find 命令定位到 Assets.car 文件 .app bundle , 形式如下:
find . -name 'Assets.car'
6、使用 assetutil 命令找到任何包含着 16-bit or P3 的资源文件, 对每个 Assets.car 执行以下命令 :
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
/path/to/a/Assets.car 替换为Assets.car文件的路径, 如果你终端的位置依然在bundle下则直接执行
xcrun --sdk iphoneos assetutil --info ./Assets.car >/tmp/Assets.json
7、打开Assets.json
open /tmp/Assets.json
8、开始查找"DisplayGamut" : "P3" 没找到可以试试 P3, BitsPerSample,然后记下图片的名称。
方法一(单个处理问题图片):
下面我们使用ColorSync实用工具将这个描述文件修改下
指派它的描述文件为sRGB IEC61966-2.1,保存。
再次编译运行我们的APP,发现问题解决了!
方法二(暴力处理所有图片):
这里我们使用bash script直接处理所有图片为正确格式,这样我们就不用去定位是哪个图片的问题了,或许更方便一些。
#!/bin/bash DIRECTORY=$1 echo "------------------------------" echo "Passed Resources with xcassets folder argument is <$DIRECTORY>" echo "------------------------------" echo "Processing asset:" XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')" for xcasset in $XSAASSETSD do echo "---$xcasset" IMAGESETS="$(find "$xcasset" -name '*.imageset')" for imageset in $IMAGESETS do echo "------$imageset" FILES="$(find "$imageset" -name '*.png')" for file in $FILES do echo "---------$file" sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" $file --out $file done done done echo "------------------------------" echo "script successfully finished" echo "------------------------------"