如果应用程序支持iOS 8或更早版本,Assets.car不能包含16位或P3资产?

上传到iTunesConnect时是否有人遇到此错误? 上传进程得到“用iTunes商店validation资产”我得到以下错误:

在这里输入图像说明

我正在使用xCode8,在现有的iOS应用程序中embedded一个自定义贴纸应用程序。 我暂时移除了不干胶标签资产,并且包含苹果示例消息图标,以testing是否是我的标签资产导致了问题,但是在validation时我收到相同的错误。 有什么想法吗?

简而言之:您的套件中有图片格式不受支持。 您可以调整这些图像的格式,或者增加目标的最低iOS版本。 请记住,后者只是一个修补程序,可能不是你想要做的,因为这会减less你的潜在用户群,因为一个非常可以解决的问题。

第1部分将解释如何找出哪些图片是有问题的。

第2部分向您展示了如何调整图片格式,以使iTunesConnect满意。 如果您只有一些图像,可以跳到第2部分并手动检查。

第1部分:识别违规图像:

苹果开发者论坛有一个线程: https : //forums.developer.apple.com/thread/60919

接受的解决scheme如下:

如何解决“错误ITMS-90682:无效包 – 如果应用程序支持iOS 8或更低版本,则”Payload / XXXXX / Assets.car“的资产目录不能包含16位或P3资产。

使用Xcode 8 GM时,如果您将应用程序提交中的16位或P3资源包含在早于iOS 9.3的iOS版本中,则会发生此错误。 如果您的应用需要广泛的颜色function,则必须将您的部署目标更改为iOS 9.3或更高版本。 如果您的应用程序不需要广泛的颜色function,并且希望将其部署到较旧的iOS版本,则应该用8位sRGB资产replace所有的16位或P3资产。

您可以通过在iTunes Connect的错误消息中指定的资产目录上运行“assetutil”来find16位或P3资产。 以下步骤概述了该过程:1.创build一个Inspectable .ipa文件。 在Xcode Organizer(Xcode-> Window-> Organizer)中,select要检查的档案,点击“Export …”,然后select“Export for Enterprise or Ad-Hoc Deployment”,这将创build一个本地副本。 ipa文件2.find.ipa文件并将其扩展名改为.zip 3.展开.zip文件,这将产生一个包含你的.app包的Payload文件夹4.打开一个terminal并更改工作目录到您的.app软件包的顶层cdpath/ to / Payload / your.app

  1. 使用查找工具find.app包中的Assets.car文件,如下所示:find。 名“Assets.car”

  2. 使用assetutil工具在您的应用程序的每个Assets.car中查找任何16位或P3资产,如下所示。 :sudo xcrun –sdk iphoneos assetutil –info /path/to/a/Assets.car> /tmp/Assets.json

  3. 检查产生的/tmp/Assets.json并查找包含“DisplayGamut”:“P3”及其关联的“Name”的任何内容。 这将是您的图像集的名称,其中包含一个或多个16位或P3资产。

  4. 将这些资产replace为8位/ sRGB资产,然后重新构build您的应用程序。

第2部分:调整图像的颜色configuration文件,以便iTunesConnect播放

打开违规文件的“信息”(CMD + I)。 检查你的颜色configuration文件

颜色配置文件没有被接受

我不知道哪些configuration文件是正确的,哪些不是,但是我的“Adobe RGB(1998)”肯定被拒绝了。 所以我使用“颜色同步实用程序”(随同OSX)。 (右键点击图片,打开…)

现在在底部,您可以指定不同的颜色configuration文件: 使用Color Synch Utility指定不同的颜色配置文件

现在,如果你再次检查你的图像应该是这样的: 转换后的颜色配置文件

现在取代以前的图像,然后再试一次。 这对我有用,我希望这可以帮助你。

感谢@fancy的回答,我明白这个问题是在图像的属性“空间”,有价值的RGB 16位。 它需要更改为8位sRGB。 我必须支持iOS7客户端,所以我不能将部署目标更改为9.3。

所以我做了:1)我用简单的脚本(见下文)recursion地查找所有* .png图像并更改属性。 2)然后我重build.ipa文件。 应用程序加载器没有显示任何错误。

#!/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 

Ignacio的启发,我已经能够将所有AdobeRGB1998图像转换为sRGB图像,并使用以下脚本

安装imagemagick

 brew update brew install imagemagick --with-little-cms --with-little-cms2 

查找图像并将其转换为sRGBconfiguration文件

 cd path>to>Images.xcassets>folder find . -name '*.png' -exec convert "{}" \ -profile "/System/Library/ColorSync/Profiles/AdobeRGB1998.icc" \ -profile "/System/Library/ColorSync/Profiles/sRGB Profile.icc" \ "{}" \; 

如果您的Mac上没有AdobeRGB1988.icc

请考虑下载AdobeRGB1998 https://www.adobe.com/support/downloads/iccprofiles/iccprofiles_mac.html https://www.adobe.com/digitalimag/adobergb.html

试图与部署目标iOS 8.2为我工作。 按照苹果公司的说法,“你需要把目标操作系统移回到8.2,这里有很多问题,你看到的是Assets.car生成的8.3或8.4的部署目标错误地包含一个密钥那就是iTCvalidation,这与父应用程序中可能存在或不存在的扩展无关(存在单独的问题)。

尽pipe如此,在iOS 10即将推出的时候,我们的build议是将您的部署目标移至9.x.

我已经用@fancy步骤发现了有问题的图片,但是我无法用上面的解决scheme更改图片的颜色configuration文件。

我尝试过使用ColorSync,Preview,但我无法更改冒犯图像的颜色configuration文件。

最后,我可以使用convert命令更改颜色configuration文件。

 convert my_image.png -profile /path/to/AdobeRGB1998.icc -profile /path/to/sRGB_v4_ICC_preference_displayclass.icc my_image.png 

之后,在Finder> File> Get Info中显示相关的颜色configuration文件(sRGB …),最后我可以使用Application Loader上传我的应用程序。

如果你想尝试这种方法:

1)使用brew下载ImageMagick:

 brew update brew install imagemagick --with-little-cms --with-little-cms2 

2)下载颜色configuration文件:

3)执行以下命令:

 convert input_image_name.ext -profile /path/to/AdobeRGB1998.icc -profile /path/to/sRGB_v4_ICC_preference_displayclass.icc output_image_name.ext 
  1. 在属性Adobe RGB(1998)的资产目录图标中查找。
  2. 将其replace为属性为sRGB IEC61966-2.1的图标

因为它需要更改为8位sRGB

一旦你确定了他/她的回复中解释的图像,你可以使用预览应用程序来改变颜色configuration文件(在预览应用程序,转到工具 – >分配configuration文件…)“Adobe RGB(1998)”(或者是你的个人资料图片)到“sRGB IEC61966-2.1”…那么你只需要在你的项目中导入修改后的图像并重build它。

使用这些命令来安装imagemagick

 brew update brew install imagemagick --with-little-cms --with-little-cms2 

现在,使用以下步骤检查项目中使用的16个深度资产:

 1) Change the extension of .ipa to .zip. 2) Expand the .zip file. This will produce a Payload folder containing your .app bundle. 3) Open a terminal and change the working directory to the top level of your .app bundle cd path/to/Payload/your.app 4) find . -name "*.png" -print0 | xargs -0 identify | grep "16-bit" | awk '{print $1;}' | xargs mogrify -depth 8 this command will show you corrupted images. Replace these images with 8 depth images. 

如果您需要临时解决问题,只需将其最低开发目标提高到iOS 9.0,这个问题就会解决。

能够使用ff步骤解决:

  1. 再次检查我所有的资产,并确保没有使用@fancy答案P3。
  2. 手动查看Xcode资产的非RGB颜色空间。
  3. 将部署目标从8.3设置为8.2

另外做以下作为我以前发表的内容

此步骤适用于所有照片在预览应用程序中打开每个或所有照片单击工具>resize>然后将dpi设置为72
和工具>分配configuration文件>然后select通用RGBconfiguration文件

在一个文件夹中收集所有Png的副本

例如 将文件夹图像命名并放在桌面上

然后转到terminal并将目录更改为您已将照片移入的文件夹

光盘桌面/图像

运行这个

sips -g all * .png> print.txt

你会发现文件命名Print.txt创build在文件夹(内部图像)

打开它并在其中search

bitsPerSample:

如果你发现旁边的数字不同于8,那么你得到了错误的形象

在预览应用程序中打开此图像(或图像),然后将其导出为相同的格式,并确保select8位颜色深度(注意,如果您select多个图像,您看不到颜色深度select,但仍然有效)

用旧的复制和replace新的图像。

另外做以下作为我以前发表的内容

此步骤适用于所有照片在预览应用程序中打开每个或所有照片单击工具>resize>然后将dpi设置为72然后select工具>指定configuration文件>然后select通用RGBconfiguration文件

就这样

通过terminal通过一个命令修复:

 find . -type f -name '*.png' -print0 | while IFS= read -r -d '' file; do sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' "$file" --out "$file"; done