When attempting a routine* update to my tvOS app, I'm getting blocked by uploading from both Xcode and Application Loader with three errors:
iTunes Store Operation Failed
ERROR ITMS-90471: "Missing Image Asset. Your app is missing the Home Screen Icon asset in 'Payload/Lightbow.app'."
ERROR ITMS-90471: "Missing Image Asset. Your app is missing the App Store Icon asset in 'Payload/Lightbow.app'."
ERROR ITMS-90471: "Missing Image Asset. Your app is missing the Top Shelf Image Wide asset in 'Payload/Lightbow.app'."
These assets exist, same as they ever did, in an asset catalog that was set up by Xcode. I deleted my asset catalog, manually re-added all my assets to a freshly created asset catalog with freshly-created "Brand Assets" folder inside with the templates usually there for tvOS, Cleaned, Nuked "Derived Data" folder, restarted Xcode, built a fresh archive and tried to upload to the App Store. Same result.
Anybody else run into this or have a fix? I'm on Xcode 9.1 (9B55) and I believe the last successful tvOS update for me was built/submitted using Xcode 9.0.
I'm getting mixed messages between Apple's posts on the forums / release notes / web documentation on whether a 10.2+ tvOS app requires a non-wide version of the top shelf image, so I can understand shenanigans there, but no clue why my Home Screen / App Store Icon assets aren't registering.
/ com.apple.actool.catalog-contents */
filename: Media.xcassets
children:
filename: Brand Assets.brandassets
children:
filename: App Icon - App Store.imagestack
slot:
idiom: tv
role: primary-app-icon
size: 1280x768
children:
filename: Front.imagestacklayer
children:
filename: Content.imageset
children:
filename: front.png
idiom: tv
image:
height: 768
width: 1280
filename: Middle.imagestacklayer
children:
filename: Content.imageset
children:
filename: middle.png
idiom: tv
image:
height: 768
width: 1280
filename: Back.imagestacklayer
children:
filename: Content.imageset
children:
filename: back.png
idiom: tv
image:
height: 768
width: 1280
filename: Gradient.imagestacklayer
children:
filename: Content.imageset
children:
filename: gradient.png
idiom: tv
image:
height: 768
width: 1280
filename: App Icon.imagestack
slot:
idiom: tv
role: primary-app-icon
size: 400x240
children:
filename: Front.imagestacklayer
children:
filename: Content.imageset
children:
filename: front.png
idiom: tv
scale: 1x
image:
height: 240
width: 400
filename: front@2x.png
idiom: tv
scale: 2x
image:
height: 480
width: 800
filename: Middle.imagestacklayer
children:
filename: Content.imageset
children:
filename: middle.png
idiom: tv
scale: 1x
image:
height: 240
width: 400
filename: middle@2x.png
idiom: tv
scale: 2x
image:
height: 480
width: 800
filename: Back.imagestacklayer
children:
filename: Content.imageset
children:
filename: back.png
idiom: tv
scale: 1x
image:
height: 240
width: 400
filename: back@2x.png
idiom: tv
scale: 2x
image:
height: 480
width: 800
filename: Gradient.imagestacklayer
children:
filename: Content.imageset
children:
filename: gradient.png
idiom: tv
scale: 1x
image:
height: 240
width: 400
filename: gradient@2x.png
idiom: tv
scale: 2x
image:
height: 480
width: 800
filename: Top Shelf Image Wide.imageset
slot:
idiom: tv
role: top-shelf-image-wide
size: 2320x720
children:
filename: topShelfWide.png
idiom: tv
scale: 1x
image:
height: 720
width: 2320
filename: topShelfWide@2x.png
idiom: tv
scale: 2x
image:
height: 1440
width: 4640
filename: Top Shelf Image.imageset
slot:
idiom: tv
role: top-shelf-image
size: 1920x720
filename: LaunchImage.launchimage
children:
filename: launch@2x.png
idiom: tv
scale: 2x
orientation: landscape
extent: full-screen
minimum-system-version: 11.0
image:
height: 2160
width: 3840
filename: launch.png
idiom: tv
scale: 1x
orientation: landscape
extent: full-screen
minimum-system-version: 9.0
image:
height: 1080
width: 1920
-Peter
* Nothing is routine about an app update. This happens all the time, though the errors/circumstances differ, and I often waste a day rebuilding / deleting / zapping until things happen to work.
Oh, I'm so both upset and relieved right now.
TL;DR
The state of Xcode / Application Loader's underlying submission tool was corrupted. All I had to do* was delete the .itmstransporter folder in my home directory and try again. I no longer get cryptic validation errors when hitting "Validate" in Xcode, and I no longer get false "missing images" when submitting the app archive.
*other than wasting valuable days of developement time searching for answers, trying every combo, and filing radars for the various failure cases *sigh*
Background
The real clue in all of this was the top of the log file, which showed something like this:
An error occurred while starting bundles for the software update process. Transporter will try to continue. Unresolved constraint in bundle com.apple.transporter.asperasupport [7]: Unable to resolve 7.0: missing requirement [7.0] package; (&(package=com.apple.transporter.transport.service)(version>=1.9.6)(version<=1.9.6)) [caused by: Unable to resolve 10.0: missing requirement [10.0] package; (&(package=org.springframework.util.backoff)(version>=4.1.0)(!(version>=5.0.0)))]
An error occurred while starting bundles for the software update process. Transporter will try to continue. Unresolved constraint in bundle com.apple.transporter.commlink [9]: Unable to resolve 9.0: missing requirement [9.0] package; (&(package=com.apple.transporter.foundation)(version>=1.9.6)(version<=1.9.6)) [caused by: Unable to resolve 10.0: missing requirement [10.0] package; (&(package=org.springframework.util.backoff)(version>=4.1.0)(!(version>=5.0.0)))]
An error occurred while starting bundles for the software update process. Transporter will try to continue. Unresolved constraint in bundle com.apple.transporter.itmstransporter [10]: Unable to resolve 10.0: missing requirement [10.0] package; (&(package=org.springframework.util.backoff)(version>=4.1.0)(!(version>=5.0.0)))
An error occurred while starting bundles for the software update process. Transporter will try to continue. Unresolved constraint in bundle com.apple.transporter.softwaresupport [15]: Unable to resolve 15.0: missing requirement [15.0] package; (&(package=com.apple.transporter.log)(version>=1.9.6)(version<=1.9.6)) [caused by: Unable to resolve 10.0: missing requirement [10.0] package; (&(package=org.springframework.util.backoff)(version>=4.1.0)(!(version>=5.0.0)))]
An error occurred while starting bundles for the software update process. Transporter will try to continue. Unresolved constraint in bundle com.apple.transporter.updater [17]: Unable to resolve 17.0: missing requirement [17.0] package; (&(package=com.apple.transporter.log)(version>=1.9.6)(version<=1.9.6)) [caused by: Unable to resolve 10.0: missing requirement [10.0] package; (&(package=org.springframework.util.backoff)(version>=4.1.0)(!(version>=5.0.0)))]
[2017-11-16 14:12:59 EST] <main> INFO: Transporter is searching for updated software components.
[2017-11-16 14:12:59 EST] <main> INFO: No updates found.
[2017-11-16 14:12:59 EST] <main> INFO: MD5 checksum calculation in the transporter will be skipped.
I didn't know anything about "Transporter" but it sounded fishy, so I looked around and it turns out other people were having issues with it as well. StackOverflow tells me all the files are stored in a folder in my home directory, and nuking it (along with a clean build with a cleared-out DerivedData folder) restored order to the universe. If you encounter this issue, you may want to test first by moving aside that folder:
mv .itmstransporter/ .old_itmstransporter/
...and then filing a bug for Apple to see the corrupted version and maybe one day detect issues like this on the tool-side.
Happy Thanksgiving everyone.