ITMS-90682: can't contain 16-bit or P3 assets if the app supports iOS 8 or earlier

Hi, I just started seeing this error (without change in assets) in a testflight submission (we have iOS10-only code) - this is the full message (from XCode8)


"ERROR ITMS-906832: "Invalid Bundle. The aseet catalog at 'Paylod/XXXX/Assets.car' can't contain 16-but or P3 assets if the app supports iOS 8 or earlier"


I can submit by disabling iOS8 but need to know if this is a temporary error, or something wrong in our assets.


Thank you

Accepted Reply

How to resolve "ERROR ITMS-90682: Invalid Bundle - The asset catalog at 'Payload/XXXXX/Assets.car' can't contain 16-bit or P3 assets if the app supports iOS 8 or earlier."

With Xcode 8 GM, this error will occur if you include 16-bit or P3 assets in an app submission targeting iOS releases earlier then iOS 9.3. If your app requires wide color functionality you must change your Deployment Target to iOS 9.3 or later. If your app does not require wide color functionality and you wish to deploy it to older iOS versions then you should replace all 16-bit or P3 assets with 8-bit sRGB assets.


You can find 16-bit or P3 assets by running “assetutil” on the asset catalog named in the error message from iTunes Connect. The following steps outline the process:

1. Create an Inspectable .ipa file. In the Xcode Organizer (Xcode->Window->Organizer), select an archive to inspect, click “Export...", and choose "Export for Enterprise or Ad-Hoc Deployment". This will create a local copy of the .ipa file for your app.

2. Locate that .ipa file and change its the extension to .zip.

3. Expand the .zip file. This will produce a Payload folder containing your .app bundle.

4. Open a terminal and change the working directory to the top level of your .app bundle

cd path/to/Payload/your.app


5. Use the find tool to locate Assets.car files in your .app bundle as shown below:

find . -name 'Assets.car'


6. Use the assetutil tool to find any 16-bit or P3 assets, in each Assets.car your application has as shown below. :

sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json


7. Examine the resulting /tmp/Assets.json and look for any contents containing “DisplayGamut": “P3” and its associated “Name". This will be the name of your imageset containing one or more 16-bit or P3 assets.


8. Replace those assets with 8-bit / sRGB assets, then rebuild your app.


Update: If your Deployment Target is set to either 8.3 or 8.4 and you have an asset catalog then you will receive this same error message, even if you do not actually have 16-bit or P3 assets. In this case you will either need to lower your Deployment Target to 8.2, or move it up to 9.x.

Replies

Would love to but bugreport.apple.com is down.

Thanks Kumobiuslvan. I found my issue to be the same as yours after changing the command line tool to xcode 8 in preference. It did not appear to be the "compression" issue at first because I was using Xcode 7's command line.


My IM app doesn't allow me to compile if I set it to iOS8. Lots of error so doesn't work for me 😟

You could find the "Asset Compile" command line Xcode runs when building, copy to the Terminal and change the min is to 8.0.

ticket number

28237404

Setting as what u said But still upload error. I've submitted a bug report just now And the bug ID is 28238488. Thanks so much!

Tried everything in this thread without success.

Filed a bug report:

28240788

Also tried everything. Totally stuck.

28249790


thanks!

The problem for me is that we have an app that targets iOS 6 and an embedded sticker pack that targets iOS 10. When xcode builds the asset catalog for the sticker pack it passes '--minimum-deployment-target 10.0' to actool.


actool then builds that asset catalog into an Assets.car and happily uses 16-bit or P3 assets (even though the source assets are not), because as far as it's concerned they should be valid (which is probably correct)


The problem here is that ITC is not checking if the offending Assets.car is actually going to be accessible to the iOS 6 app (which it isn't), it *SHOULD* check that the offending file is inside an extension, find the minimum target of 10 for that extension and not fail it. No-one running iOS 9 or below can access the offending Assets.car, so in my opinion this is a bug in ITC that should be fixed.


To bypass this bug, take a look at the build output. The extension should build first (as it's a dependancy), copy the actool commandline from the xcode log that builds the asset catalog, edit the minimum version to match the main app, and run it again before the rest of the build finishes. This recreates the assets.car file but without the offending issues.


It's a horrid hack and not at all what I think is the right thing to do, but it works.

THANK YOU, this worked very well !

Thanks !!!!

Still experiencing this issue with no P3 assets.


Ticket number 28258967.


Thanks!

Submitted a bug report.

28259187

Submitted a bug report.

28259575

Apple Bug Report #28260593

None of the described workarounds have been successful. I've verified that my images aren't 16-bit or P3. My app is built for a deployment target of iOS 8.0, my sticker app for iOS 10.

Submitted a bug report.


Ticket Number : 28273290

Yep, that's exactly what happened for me, too.
We have an App that should build for Xcode 8 but it contains an embedded target (in our case a today widget) only being built for iOS 9 and this creates the offending catalog.


Radar: 28135437