Location of version numbers
Since you do not see a line in your project, most likely it is a bunch, frameworks or libraries related to your project. From the top directory in your project, you can use find in addition to grep to find the culprit:
find . -name "*.plist" -exec grep -iq "CFBundleShortVersionString" {} \; \ -exec grep -Him 1 "1.0.0.pre" {} \;
This may return results that may resemble something like:
Binary file ./FooProject/Foo.framework/Info.plist matches ./FooProject/Resources/Info.plist- <string>1.0.0.pre</string>
As a result, the results are returned, then you will find the reason " ERROR ITMS-90096 This package is not valid. Value for key CFBundleVersionShortString ... ". If the return result is within the Framework, as shown in the first result above (for example, a Binary file ) or another package / library, then you will need to change the value within a specific project (assuming that this is simply an error in the version number). You can also create a cleanup script to replace the value at build time before signing the code.
1.0.0.pre
However, more important here is why your application was rejected and which version 1.0.0.pre was created specifically for this. Using a version tag that purposefully rejects your application is designed to prevent you from using the pre-order code in a production application - by design. The person who created this particular block, package, framework, library, tells you:
"Do not use this preliminary code in the application that you plan to deploy to the public."
I would suggest not just changing the version number of the .plist elements .plist that your application .plist successfully, instead check the stable release version intended for production.
Several Info.plists
Frames, containers and packages have their own .plist numbers and versions. They do not "redefine" the number of your main version of applications, but simply have their own (one of which is clearly invalid).