App store error bundling with v1.2.180

I’ve started troubleshooting an error the app store spits back when I upload a new version of the game with v1.2.180:

WARNING ITMS-90109: “This bundle is invalid. The key UIRequiredDeviceCapabilities in the Info.plist may not contain values that would prevent this application from running on devices that were supported by previous versions. Refer to QA1623 for additional information: https://developer.apple.com/library/ios/#qa/qa1623/_index.html

After a bit of detective work I can conclude:

  • The error only happens with v1.2.180.
  • Bundling the same game code base with v1.2.178 or v1.2.179 works.

All dependencies in the game are are hard coded to a specific version.

Is my best option to revert to v1.2.179 for now, or is there something else I can do to use the latest version of Defold when bundling the game?

        <key>UIRequiredDeviceCapabilities</key>
        <array>
                <string>armv7</string>
                <string>opengles-3</string>
        </array>

Isn’t GLES2 still supported if 3 detection doesn’t work?

1 Like

Oh so that’s the issue? So maybe creating a custom Info.plist is the key to success in my case?

Yes, it looks like the previous 179 Info.plist didn’t list a UIRequiredDeviceCapabilities at all. So maybe make a copy of the current builtin Info.plist and remove those lines when making iOS bundle and see if it works.

1 Like

I would imagine this applies to all iOS games using the built in Info.plist before v2.1.180. Going forward, could there possibly be a fix for this? Maybe a flag in game.project to enable/disable UIRequiredDeviceCapabilities?

1 Like

I’m thinking that it is specifically the value <string>opengles-3</string> that is the problem.

We could probably add some kind of toggle, but not sure really… OpenGL ES 3.0 was added in iOS 7 if I’m not mistaken and we do not support older iOS versions.

Also, Apple writes:

“Important: Your app must include the UIRequiredDeviceCapabilities key in the Information Property List file submitted with your binary”

They also add (which is the problem in your case):

“For app updates, you’re allowed only to maintain or relax capability requirements. Submitting an update with added requirements would prevent some customers who previously downloaded your app from running the update.”

https://developer.apple.com/support/required-device-capabilities/

It’s unfortunate that this has become a problem, but I think the best way forward is to modify your Info.plist file.

3 Likes

I’ve got the same warning message after .ipa uploading:

Your delivery was successful, but you may wish to correct the following issues in your next delivery:
ITMS-90109: This bundle is invalid - The key UIRequiredDeviceCapabilities in the Info.plist may not contain values that would prevent this application from running on devices that were supported by previous versions. Refer to QA1623 for additional information: https://developer.apple.com/library/ios/#qa/qa1623/_index.html

As I understand it is just warning and I can ignore it for current release (made with 1.2.181). But can’t ignore. App store marks this bundle as " Invalid Binary". So, the question: what I need to change within info.plist or somesthing otherplace?

so, if I open the link from your message I see the following info:

A: iTunes Connect does not allow uploading an updated version of an app when the update runs on fewer devices than the version of the app currently in the App Store. This is by design.

An update to an app must work for every customer who has already purchased the app, and is running a current version of iOS.

Developers who wish to issue updates, but remove device support, have three choices:

  • Fix their app so that it can work on the devices they originally set out to support. See Supporting All Devices for details.
  • Target a newer version of iOS that requires a newer device. See Targeting the Latest iOS for details.
  • Remove their app from the store, and upload the new app with a different bundle ID. See Replacing Your App in the Store for details.

That means that Defold has to return support opengl-2 for iOS or you have to increase minimum iOS version (to ios 11.0, I think, but I’m not sure). Otherwise there is no way to upload update for existence app.

This is sad, I didn’t know this works that way on iOS.

Yeah, this is what we did to successfully push a new version of our game.

The problem here, that when I try to run my game on such devices it crashes.

:flushed:

When exactly does the game crash? When you update the game on a device where the opengl flag was blank on the previous version and the new version is set to opengl-2?

Is it possible to have both attributes? (opengles-2 and opengles-3)

I think that counts as “restricting” UIRequiredDeviceCapabilities, so it probably won’t be allowed as an update.

Let me explain.
Starting 1.2.180 Defold supports only opengl 3. That means that with new Defold minimal required version in UIRequiredDeviceCapabilities is opengl-3.
The first chip that supports opengl 3 is Apple A7.
At the same time Apple requires to support all the devices you supported on release. So you can’t just cut off some older devices using UIRequiredDeviceCapabilities. It is possible using only minimum required OS version.

I released my game using Defold 1.2.180 the same way as you are by changing UIRequiredDeviceCapabilities from opengl-3 to opengl-2.
Which means that Apple doesn’t know that my games doesn’t support opengl-2 anymore and deliver the game to pre-A7 devices. On such devices game just stuck right after Launch screen and then crashes in a while with:

FATAL:ENGINE: Could not open window (-2).
FATAL:ENGINE: Could not open window (-2).

It’s not so big percentage of devices but there are not so many new games that support such devices in AppStore. Which means people with such devices will install your game a bit more often and the crash. In one of my games I got 34 crashes like this (the game was featured in the App Store for some regions after update), in the second small game just 3.

The full list of devices you may find here (All chips before A7) https://en.wikipedia.org/wiki/Apple-designed_processors#Apple_A6X

I see 3 possible solutions here (maybe there are more solutions exist but I don’t know about them):

  1. Keep everething as is. Release updates using opengl-2, game will crash on some old devices but other than that it will work just fine. New games will never have such problems just because they will support opengl-3 from scratch.
  2. As I know the latest version of iOS these old devices support is 10.3.3. So, changing minimum iOS version to 11.0 should help as well.
  3. Ask Defold team to return real support OpenGl es 2.0 as fallback.

I hope now it’s a bit more clear what is going on here.

8 Likes

I’ve investigated how much gamers with iOS version < 11 in my game and chose this variant. Copied default Info.plist and changing parameter MinimumOSVersion to 11.0.
The bundle assembled with 1.2.181 and uploaded to App store without warnings. Now app status is " Waiting for Review ."

Thank you for advice.

UPD: The app status is now “Ready for Sale”. :partying_face:

5 Likes

Hi,

I just ran into this problem today (trying to update an old app). Sorry for the newbie question but where can I find the Info.plist file (so I could change the minimum iOS version to 11.)? I can see it’s in “/builtins/manifests/iOS/Info.plist” but couldn’t determine where is “builtins” folder in my project, and I cannot edit the file directly from Defold :frowning:

The “builtins” folder is just that, a set of built in resources that we use for default settings.
It’s an (internal) zip file that is mapped just like any other library dependency in Defold.

In the project pane, select the Info.plist, and copy paste it into another folder, select this new Info.plist from game.project.

2 Likes

I see, thanks so much!