I have a cordova app which when compiled and run in device is working well, but when I upload it in the app store. The "Build is invalid". and also i got this email from apple: iTunes Connect
Dear Developer,
We identified one or more issues with a recent delivery for your app, APP_NAME.
Please correct the following issues, then upload again.
1.) This bundle is invalid - The Info.plist file for /Payload/APP_NAME.app/www/js/cordova-ios/tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework is missing or could not be read.
2.) Invalid Bundle - The bundle at '/Payload/APP_NAME.app/www/js/cordova-ios/tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/Custom.framework' does not contain a bundle executable.
3.) This bundle is invalid - The Info.plist file for /Payload/APP_NAME.app/www/js/cordova-ios/tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework is missing or could not be read.
4.) Invalid Bundle - The bundle at '/Payload/APP_NAME.app/www/js/cordova-ios/tests/spec/unit/fixtures/org.test.plugins.dummyplugin/src/ios/CustomEmbeddable.framework' does not contain a bundle executable.
Can not seem to find a reason. How can the build work in local device but when build and archived and uploaded, its invalid build.
Thanks in advance :)
my config file content:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.docandtrack.app" version="2.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Doc and Track</name>
<description>
An App for Truckers to use the Doc and Track system
</description>
<author email="email" href="endpoint link">
Doc and Track
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<preference name="SplashScreen" value="screen" />
<platform name="android">
<allow-intent href="market:*" />
<preference name="AutoHideSplashScreen" value="true" />
<preference name="FadeSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="1500" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<splash density="land-hdpi" src="res/android/screen.9.png" />
<splash density="land-ldpi" src="res/android/screen.9.png" />
<splash density="land-mdpi" src="res/android/screen.9.png" />
<splash density="land-xhdpi" src="res/android/screen.9.png" />
<splash density="port-hdpi" src="res/android/screen.9.png" />
<splash density="port-ldpi" src="res/android/screen.9.png" />
<splash density="port-mdpi" src="res/android/screen.9.png" />
<splash density="port-xhdpi" src="res/android/screen.9.png" />
<icon density="ldpi" src="res/android/icon-ldpi.png" />
<icon density="mdpi" src="res/android/icon-mdpi.png" />
<icon density="hdpi" src="res/android/icon-hdpi.png" />
<icon density="xhdpi" src="res/android/icon-xhdpi.png" />
<icon density="xxhdpi" src="res/android/icon-xxhdpi.png" />
<icon density="xxxhdpi" src="res/android/icon-xxxhdpi.png" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<preference name="BackupWebStorage" value="none" />
<preference name="deployment-target" value="10.0" />
<splash height="480" src="res/ios/screen/Default~iphone.png" width="320" />
<splash height="960" src="res/ios/screen/Default@2x~iphone.png" width="640" />
<splash height="1024" src="res/ios/screen/Default-Portrait~ipad.png" width="768" />
<splash height="2048" src="res/ios/screen/Default-Portrait@2x~ipad.png" width="1536" />
<splash height="768" src="res/ios/screen/Default-Landscape~ipad.png" width="1024" />
<splash height="1536" src="res/ios/screen/Default-Landscape@2x~ipad.png" width="2048" />
<splash height="1136" src="res/ios/screen/Default-568h@2x~iphone.png" width="640" />
<splash height="1334" src="res/ios/screen/Default-667h.png" width="750" />
<splash height="2208" src="res/ios/screen/Default-736h.png" width="1242" />
<splash height="1242" src="res/ios/screen/Default-Landscape-736h.png" width="2208" />
<icon height="20" src="res/ios/icon-20.png" width="20" />
<icon height="40" src="res/ios/icon-20@2x.png" width="40" />
<icon height="180" src="res/ios/icon-60@3x.png" width="180" />
<icon height="120" src="res/ios/icon-60@2x.png" width="120" />
<icon height="167" src="res/ios/icon-83.5@2x.png" width="167" />
<icon height="152" src="res/ios/icon-76@2x.png" width="152" />
<icon height="76" src="res/ios/icon-76.png" width="76" />
<icon height="80" src="res/ios/icon-40@2x.png" width="80" />
<icon height="60" src="res/ios/icon-60.png" width="60" />
<icon height="87" src="res/ios/icon-29@3x.png" width="87" />
<icon height="58" src="res/ios/icon-29@2x.png" width="58" />
<icon height="29" src="res/ios/icon-29.png" width="29" />
<icon height="114" src="res/ios/icon-57@2x.png" width="114" />
<icon height="57" src="res/ios/icon-57.png" width="57" />
<icon height="100" src="res/ios/icon-50@2x.png" width="100" />
<icon height="50" src="res/ios/icon-50.png" width="50" />
<icon height="144" src="res/ios/icon-72@2x.png" width="144" />
<icon height="72" src="res/ios/icon-72.png" width="72" />
<icon height="1024" src="res/ios/icon-1024.png" width="1024" />
</platform>
<plugin name="cordova-plugin-whitelist" spec="1" />
<plugin name="cordova-plugin-splashscreen" spec="~3.1.0" />
<plugin name="cordova-plugin-file-transfer" spec="~1.5.0" />
<plugin name="cordova-plugin-datepicker" spec="~0.9.3" />
<plugin name="cordova-plugin-statusbar" spec="~2.1.0" />
<plugin name="cordova-plugin-dialogs" spec="~1.2.0" />
<plugin name="docandtrack-image-plugin" />
<plugin name="com.transistorsoft.cordova.background-geolocation" spec="https://github.com/transistorsoft/cordova-background-geolocation.git" />
<edit-config file="*-Info.plist" mode="merge" target="NSMotionUsageDescription">
<string>Using the accelerometer increases battery-efficiency by intelligently toggling location-tracking only when the device is detected to be moving</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSPhotoLibraryUsageDescription">
<string>Photo library is required for storing documents</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription">
<string>Camera is required for storing documents</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSLocationAlwaysAndWhenInUseUsageDescription">
<string>Background location-tracking is required for route mapping</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
<string>Location tracking is required for route mapping</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSLocationUsageDescription">
<string>Location tracking is required for route mapping</string>
</edit-config>
<preference name="cordova-background-geolocation-license" value="xxxxxxxxxxx" />
<preference name="cordova-background-geolocation-orderId" value="xxxxxxxxxxxx" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="StatusBarOverlaysWebView" value="false" />
<preference name="StatusBarBackgroundColor" value="#2C3642" />
<preference name="StatusBarStyle" value="blackopaque" />
<preference name="DisallowOverscroll" value="true" />
<plugin name="cordova-plugin-inappbrowser" spec="~1.4.0" />
<plugin name="cordova-plugin-file" spec="^5.0.0" />
<plugin name="cordova-plugin-camera" spec="^4.0.2" />
<plugin name="cordova-android-support-gradle-release" spec="^1.3.0">
<variable name="ANDROID_SUPPORT_VERSION" value="27.+" />
</plugin>
<plugin name="cordova-plugin-sim" spec="~1.3.3" />
<plugin name="cordova-plugin-crosswalk-webview" spec="^2.2.0">
<variable name="XWALK_VERSION" value="23+" />
<variable name="XWALK_LITEVERSION" value="xwalk_core_library_canary:17+" />
<variable name="XWALK_COMMANDLINE" value="--disable-pull-to-refresh-effect" />
<variable name="XWALK_MODE" value="embedded" />
<variable name="XWALK_MULTIPLEAPK" value="true" />
</plugin>
<plugin name="cordova-plugin-device" spec="^2.0.2" />
<engine name="android" spec="^6.3.0" />
<engine name="ios" spec="~4.5.4" />
</widget>
more info:
my cordova version is 8.0.0 Installed platforms:
Installed platforms: android 6.3.0 ios 4.5.4
My www folder structure screen shots:
here are my js folder content:
The problem is you have the whole cordova-ios
library code inside your js
folder. As you have all cordova-ios
code, it also contain the tests, which includes the dummyplugin
test, which has the invalid custom frameworks that don't pass Apple validation.
You don't have to add it, neither cordova-android
or any of the plugins and libs you have there. For now remove the whole cordova-ios folder and build your app again.
The needed cordova-ios
code and the plugins code is generated by cordova prepare
command and copied to the proper appName/platforms/ios/www
folder.