iOS 10发布后,马上更新了xcode 8,果然不出所料,各种bug,各种问题出现。例如正想上传App的时候,出现了如下错误:
在 Xcode 8 中,当你资源文件中[含有16位图]或者[图片显示模式γ值为'P3'] 且iOS targets设定为iOS 9.3以下就会出现这个问题. 如果你的app需要支持广色域显示的话,那你必须得把target设置成iOS 9.3+,相反,如果你的app不需要支持广色域且你想兼容 iOS 9.3 之前的项目,你就得把所有的16位的或者显示模式为'P3'图片全都替换成8位模式的SRGB颜色的图片。
你可以通过运行“assetutil”在iTunes Connect的错误信息中找到16-bit 或 P3 资源文件。离线的解决方案如下:
1.导出项目的 ipa 文件
2.定位到该ipa文件修改后缀名.ipa 为 .zip.
3. 解压该 .zip 文件. 解压后的目录里面会有一个包含着你的 app bundle 文件的 Payload 文件夹.
4. 打开终端病切换到你的app的Payload文件夹下的 .app bundle 文件夹内,形式如下:
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的路径,不要直接复制!!!使用上一步find命令的结果。
7. 打开上一步生成的 /tmp/Assets.json 文件并查找包含有 “DisplayGamut": “P3” 或者相关的内容. 这段json的"Name"字段对应的值就是16位或显示的γ值为P3的资源文件名.
8. 找到这个资源文件修改为 8位的sRGB形式,重新编译上传你的app即可.
BUT ,方法一无法解决我的问题!!!因为根本找不到16位数或者P3 对应的错误字段 而且终端出现如下错误:
Unable to create unsliced image from csi bitmap data.
Unable to create unsliced image from csi bitmap data.
Unable to create unsliced image from csi bitmap data.
Unable to create unsliced image from csi bitmap data.
Unable to create unsliced image from csi bitmap data.
Unable to create unsliced image from csi bitmap data.
Unable to create unsliced image from csi bitmap data.
心中万个草拟吗奔腾
继续stack 找到方法二:(写脚本)这个方法对我有效
地址:http://stackoverflow.com/questions/39228601/assets-car-cant-contain-16-bit-or-p3-assets-if-the-app-supports-ios-8-or-earlie
#!/bin/sh
files=`find . -name "*.png"`
for i in ${files[@]}; do
SOURCE_FILE=${i}
DESTINATION_FILE=$SOURCE_FILE
sips \
--matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' \
"$SOURCE_FILE" \
--out "$DESTINATION_FILE"
done
exit 0
1.写一个如上脚本pic.sh,把脚本放到工程的
Images.xcassets 里面。
2.打开终端terminal ,进入到Images.xcassets 里面,使用命令./pic.sh 允许脚本。(如果允许不了,请给权限 chmod 777 pic.sh)
3.然后就看到不符合格式的图片 被自动处理啦,重新上传OK。
如下被处理的错误图片 终端自动处理 的log: