We encountered a weird situation recently. Our daily build process upload an app with a daily incremental 4-digit build number, e.g. 4000, 4001, 4002, etc. Our release build number has a specific requirement to use the date, such as 20240719.
In the past I have learned that in order to upload a new build for the same version number, the new build number needs to be greater than the old one. Thus, if I have uploaded 200.1.0 (20240719)
, I cannot upload 200.1.0 (4001)
anymore, because the daily build's build number is smaller than the release build. I have to expire the 20240719
build in order for the daily build to continue, which is fine.
The problem is, yesterday I submitted 200.1.0 (20240719)
for App Store review then got approved. While today's daily build is 200.2.0 (4001)
and when it is uploaded, it got rejected for the following error message:
This bundle is invalid. The value for key CFBundleVersion [4001] in the Info.plist file must contain a higher version than that of the previously uploaded version [20240719]. Please find more information about CFBundleVersion at https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleversion With error code STATE_ERROR.VALIDATION_ERROR.90061 for id [redacted] Asset validation failed (-19208)
This befuddles me, because the 20240719
build submitted for review is in an older release version, while the daily build 4001
is using the newer release version number. It seems that TestFlight decided to compare build numbers while ignoring the version numbers?!
Furthermore, after I canceled my approved submission for 200.1.0 (20240719)
, surprisingly the 200.2.0 (4001)
can be uploaded without an error! 😲
It seems that the only factor is whether the build is submitted or not. If an older version number higher build (200.1.0 (20240719)
) is not submitted, then TestFlight happily allows newer version number lower build (200.2.0 (4001)
) to be uploaded. In contrast, if submitted, then 4001 is not allowed to be uploaded!
Is it an expected behavior? Thank you for the patience.