Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-9340

`cordova prepare` on Windows seems to hang at random points when restoring from `config.xml` with private plugin repositories

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 5.1.1
    • Fix Version/s: None
    • Component/s: cordova-lib
    • Environment:

      Windows 8.1 Enterprise; NodeJS v0.12.6/npm v2.11.2; cordova-cli@5.1.1; windows@4.0.0.

      Description

      When restoring from config.xml using cordova prepare, the execution of this seems to hang at random points, when using plugins hosted in private repositories (such as BitBucket).

      The plugins I use are confidential hence why they are hosted in BitBucket - which is why I have omitted them from this example here. If you set up a BitBucket account, I can fork a different plugin from GitHub, set the BitBucket repository to private, add yourself and show you what I mean.

      For example, I am running Windows 8.1 Enterprise. I have the latest version of NodeJS and Cordova installed.

      config.xml is as follows:

      config.xml
      <?xml version='1.0' encoding='utf-8'?>
      <widget id="com.myapp.app"
      		version="1.2.3"
      		android-versionCode="12300"
      		xmlns="http://www.w3.org/ns/widgets"
      		xmlns:cdv="http://cordova.apache.org/ns/1.0"
      		defaultlocale="en-GB">
      
      	<name>MyApp</name>
      
      	<description>
      		A brief description of my app.
      	</description>
      
      	<author email="support@myappexample.co.uk" href="http://myapp.com">
      		My App LTD.
      	</author>
      
      	<content src="index.html" />
      
      	<!-- Whitelist - allowed navigation -->
      	<allow-navigation href="https://*.myapp.com/*" />
      
      	<!-- Whitelist - allowed external apps -->
      	<allow-intent href="tel:*" />
      	<allow-intent href="mailto:*" />
      	<allow-intent href="file://*" />
      
      	<!-- Supported platforms -->
      	<!--<engine name="ios" spec="^3.8.0" />-->
      	<!--<engine name="android" spec="^4.0.2" />-->
      	<engine name="windows" spec="^4.0.0" />
      
      	<!-- Supported plugins -->
      	<plugin name="cordova-plugin-camera" spec="^1.0.0" />
      	<plugin name="cordova-plugin-console" spec="^1.0.0" />
      	<plugin name="cordova-plugin-crosswalk-webview" spec="^1.2.0" />>
      	<plugin name="cordova-plugin-device" spec="^1.0.0" />
      	<plugin name="cordova-plugin-dialogs" spec="^1.0.0" />
      	<plugin name="cordova-plugin-file-transfer" spec="^1.1.0" />
      	<plugin name="cordova-plugin-geolocation" spec="^1.0.0" />
      	<plugin name="cordova-plugin-inappbrowser" spec="^1.0.1" />
      	<plugin name="cordova-plugin-network-information" spec="^1.0.0" />
      	<plugin name="cordova-plugin-splashscreen" spec="^2.0.0" />
      	<plugin name="cordova-plugin-statusbar" spec="^1.0.0" />
      	<plugin name="cordova-plugin-whitelist" spec="^1.0.1" />
      	<plugin name="phonegap-plugin-barcodescanner" spec="^2.0.1" />
      
      	<!-- iOS specifics -->
      	<platform name="ios">
      		<!-- App Store navigation -->
      		<allow-intent href="itms:*" />
      		<allow-intent href="itms-apps:*" />
      
      		<!-- iOS StatusBar/app settings -->
      		<preference name="DisallowOverscroll" value="true" />
      		<preference name="StatusBarOverlaysWebView" value="false" />
      		<preference name="StatusBarBackgroundColor" value="#000000" />
      		<preference name="KeyboardDisplayRequiresUserAction" value="false" />
      
      		<!-- icons -->
      		<icon src="www/res/icons/icon-small.png" width="29" />
      		<icon src="www/res/icons/icon-40.png" width="40" />
      		<icon src="www/res/icons/icon-50.png" width="50" />
      		<icon src="www/res/icons/icon.png" width="57" />
      		<icon src="www/res/icons/icon-small@2x.png" width="58" />
      		<icon src="www/res/icons/icon-60.png" width="60" />
      		<icon src="www/res/icons/icon-72.png" width="72" />
      		<icon src="www/res/icons/icon-76.png" width="76" />
      		<icon src="www/res/icons/icon-40@2x.png" width="80" />
      		<icon src="www/res/icons/icon-50@2x.png" width="100" />
      		<icon src="www/res/icons/icon@2x.png" width="114" />
      		<icon src="www/res/icons/icon-60@2x.png" width="120" />
      		<icon src="www/res/icons/icon-60@3x.png" width="180" />
      		<icon src="www/res/icons/icon-72@2x.png" width="144" />
      		<icon src="www/res/icons/icon-76@2x.png" width="152" />
      
      		<!-- splash -->
      		<splash src="www/res/splash/default.png" width="320" />
      		<splash src="www/res/splash/default@2x.png" width="640" height="960" />
      		<splash src="www/res/splash/default-iphone5@2x.png" width="640" height="1136" />
      		<splash src="www/res/splash/default-iphone6@2x.png" width="750" />
      		<splash src="www/res/splash/default-iphone6p-p@2x.png" width="1242" />
      		<splash src="www/res/splash/default-iphone6p-l@2x.png" width="2208" />
      		<splash src="www/res/splash/ipad-p.png" width="768" height="1024" />
      		<splash src="www/res/splash/ipad-p@2x.png" width="1536" height="2048" />
      		<splash src="www/res/splash/ipad-l.png" width="1024" height="768" />
      		<splash src="www/res/splash/ipad-l@2x.png" width="2048" height="1536" />
      	</platform>
      
      	<platform name="android">
      		<!-- Google Play Store navigation -->
      		<allow-intent href="market:*" />
      
      		<!-- Android splashscreen settings -->
      		<preference name="SplashScreenDelay" value="4000" />
      
      		<!-- icons -->
      		<icon src="www/res/icons/icon-36.png" width="36" />
      		<icon src="www/res/icons/icon-48.png" width="48" />
      		<icon src="www/res/icons/icon-72.png" width="72" />
      		<icon src="www/res/icons/icon-48@2x.png" width="96" />
      		<icon src="www/res/icons/icon-72@2x.png" width="144" />
      
      		<!-- splash -->
      		<splash src="www/res/splash/ldpi.9.png" density="ldpi" />
      		<splash src="www/res/splash/mdpi.9.png" density="mdpi" />
      		<splash src="www/res/splash/hdpi.9.png" density="hdpi" />
      		<splash src="www/res/splash/xhdpi.9.png" density="xhdpi" />
      		<splash src="www/res/splash/xxhdpi.9.png" density="xxhdpi" />
      	</platform>
      
      	<platform name="windows">
      		<!-- supported orientation -->
      		<preference name="Orientation" value="portrait,portraitFlipped,landscape,landscapeFlipped" />
      	</platform>
      </widget>
      

      If you copy this to a new Cordova project directory and run cordova prepare, you should replicate the same results.

      E.g. within Command Prompt (cmd):

      > cordova create CdvTest com.myapp.cdvtest CdvTest
      > cd CdvTest
      (overwrite config.xml with text from above)
      > cordova prepare
      ...
      

      At this point, it hangs. It seems to be when installing plugins, so not sure why but it's random plugins - e.g. if you quit the execution then run cordova prepare again, it will hang on another plugin.

      It does it three or four times then the fifth cordova prepare executes and finishes (I cannot verify whether it has installed the plugins correctly or not).

      N.b. it didn't let me tag "5.1.1" in "Affects Version/s" hence putting "5.1.2" instead.

        Attachments

          Activity

            People

            • Assignee:
              purplecabbage Jesse MacFadyen
              Reporter:
              keldar Kelvin Dart
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: