Missing files in src-cordova/www



  • Hi everyone,

    I recently started converting an existing web app written in Vue.js and Vuetify to using the Quasar Framework, so I could create an iOS app.

    I created a new Quasar app using “quasar create quasar-new -b dev” (to use the 1.0.0 beta).

    I copied most of the generated files over to my original app and after making some other modifications I was able to see my app running in Chrome on my Mac via “quasar dev”.

    I can even see it running in an iOS simulator or device via “quasar dev -m cordova -T ios”. There are some issues with getting FirebaseUI Auth to reopen the app after redirecting to Safari (after signing in on Safari, I get redirected to my dev website), but I’m hoping that it will work with a production build.

    However, when I try to create a production build via “quasar build -m cordova -T ios” and copy the resulting .ipa file to my iPhone device via Xcode’s Devices and Simulators window, and then run the app on my iPhone, I get a blank screen. When I debugged this remotely in Safari’s Web Inspector, after reloading the page, I see that there are a couple of errors:
    “Failed to load resource: The requested URL was not found on this server. file:///app.js”
    “Failed to load resource: The requested URL was not found on this server. file:///vendor.js”

    When I looked in src-cordova/www I only see index.html ! I see nothing obviously wrong in the console logs for the “quasar build -m cordova -T ios” process.

    This works as expected in the “quasar-new” app that I created via the Quasar CLI (i.e. there are other files in src-cordova/www ), so obviously I have missed something in my configuration or I have overwritten or otherwise changed some important configuration.

    Does anyone have any idea or suggestions as to what that might be?

    Here’s some partial information from “cordova info” (some information has been left out) :

    Node version: v10.15.0
    Cordova version: 8.1.1

    <widget id="com.myapp.ios" version="0.2.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
      ...
      <content src="index.html" />
      <plugin name="cordova-plugin-whitelist" spec="1" />
      <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:*" />
      <platform name="android">
        <allow-intent href="market:*" />
      </platform>
      <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
      </platform>
      <plugin name="cordova-plugin-buildinfo" spec="2.0.2" />
      <plugin name="cordova-universal-links-plugin" spec="~1.2.1" />
      <plugin name="cordova-plugin-browsertab" spec="0.2.0" />
      <plugin name="cordova-plugin-inappbrowser" spec="3.0.0" />
      <plugin name="cordova-plugin-customurlscheme" spec="4.3.0">
        <variable name="URL_SCHEME" value="com.firebase.cordova" />
      </plugin>
      <universal-links>
        ...
      </universal-links>
      <engine name="ios" spec="^5.0.0" />
    </widget>
    

    Plugins:
    cordova-plugin-browsertab,cordova-plugin-buildinfo,cordova-plugin-compat,cordova-plugin-customurlscheme,cordova-plugin-inappbrowser,cordova-plugin-whitelist,cordova-universal-links-plugin

    iOS platform:
    Xcode 10.1
    Build version 10B61

    I’ll try to debug this, maybe by copying my original app into a new Quasar app (instead of what I did, which was the other way around), but please let me know if you have any ideas or suggestions.

    Thanks.



  • I solved this problem!

    I was specifying this in quasar.conf.js to fix some routing issues that I was seeing when running “quasar dev” :

    extendWebpack(cfg) {
      cfg.output = {
        publicPath: "/",
      };
    }
    

    cfg.output was not set when running “quasar dev” but it is set when running “quasar build -m cordova -T ios” and so I was inadvertently overwriting it.

    Changing it to this let me get further:

    extendWebpack(cfg) {
      if (!cfg.output) {
        cfg.output = {
          publicPath: "/",
        };
      }
    }