$ionicDeploy.load() causes Error when the app tries to reload: Uncaught ReferenceError: angular is not defined

Hi there,

I tried
$ ionic upload
to upload my app to ionic.io, then in the dashboard I hit deploy.

When my app launches, it will check for updates and then run $ionicDeploy.load() if there are updates. Everything works up until the line $ionicDeploy.load(); (Code snippet below)

On my device while remote debugging via chrome inspect I get the error in the console that reads:
angular is not defined

I’m not sure what’s going on or if maybe I deployed incorrectly? Has anyone had this happen before? This is my first time trying to get ionic deploy working.

Any help would be appreciated, thanks!

`

$ionicDeploy.check().then( function( updateAvailable ) {
          var originalSnapshots = [];
          var originalInfo;
          alert( 'run...1' );

          $ionicDeploy.getSnapshots().then(function(snapshots) {
              // snapshots will be an array of snapshot uuids
              alert( 'run...inside snapshots' + JSON.stringify(snapshots) );
          });

          alert( 'run...before info' );

          $ionicDeploy.info().then(function( info ) {
              alert( 'run...after info deploy' + JSON.stringify( info) );
          });

          alert( 'run...update available' + JSON.stringify(updateAvailable) );

          if (updateAvailable) {
            $ionicDeploy.download().then(function() {
              $ionicDeploy.extract().then(function() {
                //$ionicDeploy.getMetadata().then(function(metadata) {});
                $ionicPopup.show({
                  title: 'Update available',
                  subTitle: 'An update was just downloaded. New features will be available when you restart the app.',
                  buttons: [
                    { text: 'Not now' },
                    {
                      text: 'Restart',
                      onTap: function(e) {
                        $ionicDeploy.load();
                      }
                    }
                  ]
                    
                });
              });
            });
          }
      });`

There are number of issues here but I’ll just address one in particular:

All the $ionicDeploy functions return promises, which is why we use “then()”. When checking the return value of one of those functions, it has to be inside the function that you passed to “then()”, so if you want to check for updateAvailable to download and extract, all that logic has to be done in a “then()”.

$ionicDeploy.check().then(function (snapshotAvailable) {
                if (snapshotAvailable) {
                    // When snapshotAvailable is true, you can apply the snapshot
                    $ionicDeploy.download().then(function () {
                        return $ionicDeploy.extract();
                    }).then(function () {
                          $ionicDeploy.load();
                    });
                } else {
                    // No updates found, delete old snapshots now
                    $ionicDeploy.info().then(function (info) {
                        $ionicDeploy.getSnapshots().then(function (snapshots) {
                            // snapshots will be an array of snapshot uuids
                            angular.forEach(snapshots, function (value, key) {
                                if (value !== undefined && value !== info.deploy_uuid) {
                                    console.log("Deleting snapshot", value);
                                    $ionicDeploy.deleteSnapshot(value);
                                }
                            });
                            // You app logic starts here, in my case it's just loading the "login" state
                        });
                    });
                }
            });

This is a full example of how I do deploy, with a step to delete unused snapshots (which the Ionic team can feel free to add in their docs as it was a bit confusing to figure out how to do it without examples and with the scary warning that you can destroy everything by deleting the current snapshot).

Take special not at the way the functions inside the chained “then()”'s behave, and how the ones that need chaining with return some value.

Edit: I want to insist that this alone won’t solve all your problems, I’m not sure why you’re having angular not defined for example, but can guarantee that you will need the changes I mentioned about the deploy promises

Thanks for your help!

I think I did have the code chained correctly, I just forgot to copy the whole snippet correctly. That being said your snippet is SUPER helpful anyways, because I was scratching my head on how I was going to delete in-active snapshots from the device memory.

I like your implementation way better, I’ll start by using your code and seeing if I’m still getting the “angular is undefined error”

Thanks again, I’ll keep you posted if it works.

=)

Hi @MaximeIJ

I copied your code and now I get the following error in console when the app tries to run $ionicDeploy.load() - any idea why?:


ionic.bundle.js?ionicCachebuster=66584:13415 Uncaught Error: [$injector:modulerr] Failed to instantiate module App due to:
Error: [$injector:modulerr] Failed to instantiate module uiGmapgoogle-maps due to:
Error: [$injector:nomod] Module 'uiGmapgoogle-maps' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

Also,
After I exit the app and open it again, I still have the error “angular is not defined”

Thanks!

Yes, this looks like an issue with an angular module (uiGmapgoogle-maps) can’t be found. This most often happens because of issues including libraries in index.html

Note that this could also be the cause of the original issue with angular not being defined. It could simply be a case of ordering the include statements differently. If you’re still having issues feel free to post your index.html, I’m sure we can figure it out

And yes, you had chained the statements properly in your code, that’s my bad, I had missed the first part and got confused. Glad the deleting script helped, and yeah it took me a while to get it right, and also to get the insight of making it happen there instead of in the part that has new snapshots.

Hi @MaximeIJ

Thanks for getting back to me so quickly, here’s my index.html.
Let me know if you have any insight as to what’s happening. I’m not sure why the app works before ionicDeploy.load() but not after.

 
<!DOCTYPE html>
<html ng-app="App" ng-controller="htmlCtrl">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>

    <!--<link href="lib/ionic/css/ionic.css" rel="stylesheet">
		<link href="css/animate.css" rel="stylesheet">
		<link href="css/ionic-animated-modal.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">-->

    <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
    <link href="css/ionic.app.css" rel="stylesheet">
    -->
    <link href="css/ionic.app.css" rel="stylesheet">
    <!--<link href="css/vehicle.css" rel="stylesheet">-->
    
    <!--    Font Awesome Lib -->
    <link href="css/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">


    <script src="lib/lodash/lodash.js"></script>

    <!-- ionic/angularjs js -->
    <script src="lib/ionic/js/ionic.bundle.js"></script>

    <!-- ionic cloud services -->
    <script src="lib/ionic.cloud.min.js"></script>
    
    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
    <!-- cordova script (this will be a 404 during development) -->
    <script src="cordova.js"></script>

    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=[KEY]&sensor=false&libraries=places"></script>
    <script src="lib/angular-simple-logger/dist/angular-simple-logger.min.js"></script>
    <script src="lib/angular-google-maps/dist/angular-google-maps.min.js"></script>
    <script src="lib/angular-google-distance/dist/angular-google-distance.min.js"></script>

    <!--<script src="lib/pubnub/dist/web/pubnub.min.js"></script>
    <script src="lib/pubnub-angular/dist/pubnub-angular.min.js"></script>-->

     <script src="lib/pubnub/web/pubnub.js"></script>
     <script src="lib/pubnub-angular/dist/pubnub-angular-3.2.1.js"></script>

    <script type="text/javascript" src="https://js.stripe.com/v2/"></script>
    <script type="text/javascript" src="lib/angular-payments/lib/angular-payments.js"></script>

      <script src="lib/vsGoogleAutocomplete/dist/vs-google-autocomplete.min.js"></script>
    
    <script src="lib/angular-timer/dist/angular-timer.min.js"></script>  
    <script src="lib/moment/min/moment.min.js"></script>
    <script src="lib/moment/min/locales.min.js"></script>
    <script src="lib/humanize-duration/humanize-duration.js"></script>
      

    <!-- your app's js -->
    <script src="build/app.js"></script>
  </head>
  <body ng-controller="bodyCtrl">
    <ion-nav-bar></ion-nav-bar>
    <ion-nav-view animation="slide-left-right">
    </ion-nav-view>
  </body>
</html>

You will need to make sure the ‘uiGmapgoogle-maps’ module is in one of those js you’re bringing in with the tags. I don’t know this module nor the majority of your includes, so I’m not able to tell. What’s most likely in this case is that none of the js files you’re bringing in contains ‘uiGmapgoogle-maps’

As to why this is happening after you implemented deploy, I don’t know. Do you have version control where you can see all the changes you made when you implemented deploy?

Edit: were you following their quickstart: http://angular-ui.github.io/angular-google-maps/#!/quickstart?

Yes, I think I’m including uiGmapgoogle-maps correctly… because the app runs fine and normal when I first install it on the device, but once I deploy a live update the app breaks.

Once I deploy the update via $ionicDeploy.load() , the app then hangs when trying to restart with the error ui-Gmapgoogle-maps is not available.

I’m deploying very minor html changes to test my code. I’m literally just deploying a version of the app adding/deleting a letter on a button just to test ionicDeploy.

Yes I have followed their quickstart guide, the app actually works on the device with the map and everything, it just breaks when trying to restart.

Not sure if it could help, but Here’s the full error message, let me know if you see anything else that might be causing that. (Thanks again!) :

Uncaught Error: [$injector:modulerr] Failed to instantiate module App due to:
Error: [$injector:modulerr] Failed to instantiate module uiGmapgoogle-maps due to:
Error: [$injector:nomod] Module 'uiGmapgoogle-maps' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
http://errors.angularjs.org/1.5.3/$injector/nomod?p0=uiGmapgoogle-maps
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13415:12
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15381:17
    at ensure (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15305:38)
    at module (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15379:14)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17871:22
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17872:40
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
http://errors.angularjs.org/1.5.3/$injector/modulerr?p0=uiGmapgoogle-maps&p1=Error%3A%20%5B%24injector%3Anomod%5D%20Module%20'uiGmapgoogle-maps'%20is%20not%20available!%20You%20either%20misspelled%20the%20module%20name%20or%20forgot%20to%20load%20it.%20If%20registering%20a%20module%20ensure%20that%20you%20specify%20the%20dependencies%20as%20the%20second%20argument.%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.5.3%2F%24injector%2Fnomod%3Fp0%3DuiGmapgoogle-maps%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13415%3A12%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15381%3A17%0A%20%20%20%20at%20ensure%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15305%3A38)%0A%20%20%20%20at%20module%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15379%3A14)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17871%3A22%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17872%3A40%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13415:12
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17894:15
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17872:40
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at createInjector (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17777:19)
    at doBootstrap (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15057:20)
    at bootstrap (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15078:12)
http://errors.angularjs.org/1.5.3/$injector/modulerr?p0=App&p1=Error%3A%20%5B%24injector%3Amodulerr%5D%20Failed%20to%20instantiate%20module%20uiGmapgoogle-maps%20due%20to%3A%0AError%3A%20%5B%24injector%3Anomod%5D%20Module%20'uiGmapgoogle-maps'%20is%20not%20available!%20You%20either%20misspelled%20the%20module%20name%20or%20forgot%20to%20load%20it.%20If%20registering%20a%20module%20ensure%20that%20you%20specify%20the%20dependencies%20as%20the%20second%20argument.%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.5.3%2F%24injector%2Fnomod%3Fp0%3DuiGmapgoogle-maps%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13415%3A12%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15381%3A17%0A%20%20%20%20at%20ensure%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15305%3A38)%0A%20%20%20%20at%20module%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15379%3A14)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17871%3A22%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17872%3A40%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.5.3%2F%24injector%2Fmodulerr%3Fp0%3DuiGmapgoogle-maps%26p1%3DError%253A%2520%255B%2524injector%253Anomod%255D%2520Module%2520'uiGmapgoogle-maps'%2520is%2520not%2520available!%2520You%2520either%2520misspelled%2520the%2520module%2520name%2520or%2520forgot%2520to%2520load%2520it.%2520If%2520registering%2520a%2520module%2520ensure%2520that%2520you%2520specify%2520the%2520dependencies%2520as%2520the%2520second%2520argument.%250Ahttp%253A%252F%252Ferrors.angularjs.org%252F1.5.3%252F%2524injector%252Fnomod%253Fp0%253DuiGmapgoogle-maps%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A13415%253A12%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A15381%253A17%250A%2520%2520%2520%2520at%2520ensure%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A15305%253A38)%250A%2520%2520%2520%2520at%2520module%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A15379%253A14)%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17871%253A22%250A%2520%2520%2520%2520at%2520forEach%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A13668%253A20)%250A%2520%2520%2520%2520at%2520loadModules%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17855%253A5)%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17872%253A40%250A%2520%2520%2520%2520at%2520forEach%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A13668%253A20)%250A%2520%2520%2520%2520at%2520loadModules%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17855%253A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13415%3A12%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17894%3A15%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17872%3A40%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20createInjector%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17777%3A19)%0A%20%20%20%20at%20doBootstrap%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15057%3A20)%0A%20%20%20%20at%20bootstrap%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15078%3A12)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13415:12
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15381:17
    at ensure (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15305:38)
    at module (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15379:14)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17871:22
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17872:40
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
http://errors.angularjs.org/1.5.3/$injector/modulerr?p0=uiGmapgoogle-maps&p1=Error%3A%20%5B%24injector%3Anomod%5D%20Module%20'uiGmapgoogle-maps'%20is%20not%20available!%20You%20either%20misspelled%20the%20module%20name%20or%20forgot%20to%20load%20it.%20If%20registering%20a%20module%20ensure%20that%20you%20specify%20the%20dependencies%20as%20the%20second%20argument.%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.5.3%2F%24injector%2Fnomod%3Fp0%3DuiGmapgoogle-maps%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13415%3A12%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15381%3A17%0A%20%20%20%20at%20ensure%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15305%3A38)%0A%20%20%20%20at%20module%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15379%3A14)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17871%3A22%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17872%3A40%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13415:12
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17894:15
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17872:40
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at createInjector (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17777:19)
    at doBootstrap (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15057:20)
    at bootstrap (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15078:12)
http://errors.angularjs.org/1.5.3/$injector/modulerr?p0=App&p1=Error%3A%20%5B%24injector%3Amodulerr%5D%20Failed%20to%20instantiate%20module%20uiGmapgoogle-maps%20due%20to%3A%0AError%3A%20%5B%24injector%3Anomod%5D%20Module%20'uiGmapgoogle-maps'%20is%20not%20available!%20You%20either%20misspelled%20the%20module%20name%20or%20forgot%20to%20load%20it.%20If%20registering%20a%20module%20ensure%20that%20you%20specify%20the%20dependencies%20as%20the%20second%20argument.%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.5.3%2F%24injector%2Fnomod%3Fp0%3DuiGmapgoogle-maps%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13415%3A12%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15381%3A17%0A%20%20%20%20at%20ensure%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15305%3A38)%0A%20%20%20%20at%20module%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15379%3A14)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17871%3A22%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17872%3A40%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0Ahttp%3A%2F%2Ferrors.angularjs.org%2F1.5.3%2F%24injector%2Fmodulerr%3Fp0%3DuiGmapgoogle-maps%26p1%3DError%253A%2520%255B%2524injector%253Anomod%255D%2520Module%2520'uiGmapgoogle-maps'%2520is%2520not%2520available!%2520You%2520either%2520misspelled%2520the%2520module%2520name%2520or%2520forgot%2520to%2520load%2520it.%2520If%2520registering%2520a%2520module%2520ensure%2520that%2520you%2520specify%2520the%2520dependencies%2520as%2520the%2520second%2520argument.%250Ahttp%253A%252F%252Ferrors.angularjs.org%252F1.5.3%252F%2524injector%252Fnomod%253Fp0%253DuiGmapgoogle-maps%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A13415%253A12%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A15381%253A17%250A%2520%2520%2520%2520at%2520ensure%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A15305%253A38)%250A%2520%2520%2520%2520at%2520module%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A15379%253A14)%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17871%253A22%250A%2520%2520%2520%2520at%2520forEach%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A13668%253A20)%250A%2520%2520%2520%2520at%2520loadModules%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17855%253A5)%250A%2520%2520%2520%2520at%2520file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17872%253A40%250A%2520%2520%2520%2520at%2520forEach%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A13668%253A20)%250A%2520%2520%2520%2520at%2520loadModules%2520(file%253A%252F%252F%252Fdata%252Fuser%252F0%252Fcom.hauul.user%252Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%252Flib%252Fionic%252Fjs%252Fionic.bundle.js%253FionicCachebuster%253D31429%253A17855%253A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13415%3A12%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17894%3A15%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17872%3A40%0A%20%20%20%20at%20forEach%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A13668%3A20)%0A%20%20%20%20at%20loadModules%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17855%3A5)%0A%20%20%20%20at%20createInjector%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A17777%3A19)%0A%20%20%20%20at%20doBootstrap%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15057%3A20)%0A%20%20%20%20at%20bootstrap%20(file%3A%2F%2F%2Fdata%2Fuser%2F0%2Fcom.hauul.user%2Fapp_bbba9c96-5f54-11e7-a397-96343211f9dd%2Flib%2Fionic%2Fjs%2Fionic.bundle.js%3FionicCachebuster%3D31429%3A15078%3A12)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13415:12
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17894:15
    at forEach (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:13668:20)
    at loadModules (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17855:5)
    at createInjector (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:17777:19)
    at doBootstrap (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15057:20)
    at bootstrap (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:15078:12)
    at angularInit (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:14963:5)
    at file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:44056:5
    at HTMLDocument.trigger (file:///data/user/0/com.hauul.user/app_bbba9c96-5f54-11e7-a397-96343211f9dd/lib/ionic/js/ionic.bundle.js?ionicCachebuster=31429:16474:7)

I’m kind of out of ideas but maybe the app.js? Is your deploy logic in a controller? If so, could I see that controller as well please?

Also, I don’t think this is causing your problem but I personally ran into a white-screen-of-death on iOS if I didn’t include ionic.cloud.min.js’s map file as well (no need to call it from index.html, just bring it to the ‘lib’ dir)

Yup! I’ll paste my app.js and controller below. (thanks!)

Here’s my app.js:

// Ionic Starter App
// angular.module is a global place for creating, registering and retrieving Angular modules
// 'App' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
angular.module('App', [
    'ionic',
    'ionic.cloud', 
    'starter.directives',
    'starter.photopickable',
    'ngCordova',
    'ngAnimate',
    'timer',
    'pubnub.angular.service',
    'angularPayments',
    'uiGmapgoogle-maps',
    'angular.google.distance',
    'vsGoogleAutocomplete',  
])

.config(['uiGmapGoogleMapApiProvider', function(uiGmapGoogleMapApiProvider) {
    uiGmapGoogleMapApiProvider.configure({
        key: '******',
        v: '3.23', //defaults to latest 3.X anyhow
        libraries: 'weather,geometry,places'
    });
}])

.config(function($ionicCloudProvider) {
  $ionicCloudProvider.init({
    "core": {
      "app_id": "****"
    }
  });
})
 
.run(['$ionicPlatform',
    '$sqliteService',
    '$injector',
    function($ionicPlatform, $sqliteService, $injector ) {
        $ionicPlatform.ready(function() {
            if (window.cordova && window.cordova.plugins.Keyboard) {
                // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
                // for form inputs)
                cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

                // Don't remove this line unless you know what you are doing. It stops the viewport
                // from snapping when text inputs are focused. Ionic handles this internally for
                // a much nicer keyboard experience.
                cordova.plugins.Keyboard.disableScroll(true);
            }
            if (window.StatusBar) {
                StatusBar.styleDefault();
            }

            //Load the Pre-populated database, debug = true
            //$sqliteService.preloadDataBase(true);

            // Load the Stripe Module
            var Environment = $injector.get('Environment');
            Stripe.setPublishableKey(Environment.stripe_pk);

        });
    }
])

.run(['$ionicPlatform',
    '$ionicPopup',
    function($ionicPlatform, $ionicPopup) {
        // Disable BACK button on home
        $ionicPlatform.registerBackButtonAction(function(event) {
            if (true) { // your check here
                $ionicPopup.confirm({
                    title: 'System warning',
                    template: 'are you sure you want to exit?'
                }).then(function(res) {
                    if (res) {
                        ionic.Platform.exitApp();
                    }
                });
            }
        }, 100);
    }
])
// Moved deploy code to appStartController
//.run(['$ionicPopup','$ionicDeploy', '$log', function( $ionicPopup, $ionicDeploy, $log ) {  
//     $ionicDeploy.check().then( function( updateAvailable ) {
//       var originalSnapshots = [];
//       var originalInfo;
//       alert( 'run...1' );
//       
//        $ionicDeploy.getSnapshots().then(function(snapshots) {
//            // snapshots will be an array of snapshot uuids
//            alert( 'run...inside snapshots' );
//            originalSnapshots = snapshots;
//            $log.log( 'RUN deploy: snapshots',snapshots );
//        });
//        
//        alert( 'run...before info' );
//        
//        $ionicDeploy.info().then(function( info ) {
//            alert( 'run...after info deploy' );
//            $log.log( 'RUN info:', info );
//        });
//       
//        alert( 'run...update available', updateAvailable );
//       
//        if (updateAvailable) {
//          $ionicDeploy.download().then(function() {
//            $ionicDeploy.extract().then(function() {
//              $ionicDeploy.unwatch();
//              //$ionicDeploy.getMetadata().then(function(metadata) {});
//             
//              $ionicPopup.show({
//                title: 'Update available',
//                subTitle: 'An update was just downloaded. Would you like to restart your app to use the latest features?',
//                buttons: [
//                  { text: 'Not now' },
//                  {
//                    text: 'Restart',
//                    onTap: function(e) {
//                      $ionicDeploy.load();
//                    }
//                  }
//                ]
//              });
//            });
//          });
//        }
//      });
//    }
//])

.config(['$httpProvider', function($httpProvider) {
    return $httpProvider.interceptors.push("AuthInterceptor");
}])

// .config(['$compileProvider', function($compileProvider) {
//   $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|tel|coui):/);
// }])

.config(['$stateProvider',
    '$urlRouterProvider',
    '$ionicConfigProvider',
    '$compileProvider',
    function($stateProvider, $urlRouterProvider, $ionicConfigProvider, $compileProvider) {

        $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|file|blob|content|ms-appx|x-wmapp0):|data:image\/|img\//);
        //$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|ftp|mailto|tel|ghttps?|ms-appx|x-wmapp0):/);
        $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|http|maps|geo|sms|tel|mailto|app|file|ghttps?|ms-appx|x-wmapp0):/);
        $ionicConfigProvider.scrolling.jsScrolling(ionic.Platform.isIOS());

        $stateProvider

        // app loading
        .state('app-start', {
            url: "/app-start",
            templateUrl: "templates/app-start.html",
            controller: 'AppStartCtrl'
        })

        // login screen
        .state('auth', {
            url: "/auth",
            templateUrl: "templates/auth.html",
            controller: 'AuthCtrl'
        })

        // forgot password screen
        .state('forgot-password', {
            url: '/forgot-password',
            templateUrl: 'templates/auth_forgot-password.html',
            controller: 'AuthCtrl'
        })

        // register screen
        .state('register', {
            url: '/register',
            templateUrl: 'templates/auth_register.html',
            controller: 'AuthCtrl'
        })

        //Hauul State
        .state('hauul', {
            url: '/hauul',
            abstract: true,
            controller: 'ionSideMenuCtrl',
            templateUrl: 'templates/hauul/menu.html'
        })

//        .state('hauul.home-old', {
//            //cache: false,
//            url: '/home',
//            templateUrl: 'templates/hauul/home.html',
//            controller: 'HomeCtrl'
//        })
        
        .state('hauul.home', {
            //cache: false,
            url: '/home',
            templateUrl: 'templates/hauul/main-map.html',
            controller: 'MainMapCtrl'
        })

        // Search for a place/ NEW dropoff Location
        .state('hauul.places', {
            url: '/places',
            templateUrl: 'templates/hauul/places.html',
            controller: 'PlacesCtrl'
        })

        // update dropoff location
        .state('hauul.places-update-dropoff', {
            url: '/places-update-dropoff/:previous_state',
            templateUrl: 'templates/hauul/places.html',
            controller: 'UpdateDropoffCtrl'
        })

        .state('hauul.places-modal', {
            url: '/places-modal',
            templateUrl: 'templates/hauul/modals/places-modal.html',
            controller: 'PlacesModalCtrl'
        })
        
        // 2017-05-29: Universal Location Picker
         .state('hauul.location-picker', {
            url: '/location-picker/:role',
            templateUrl: 'templates/hauul/location-picker.html',
            controller: 'LocationPickerCtrl'
        })
        
        // Update uses same view template, but new controller, that sends update to rails, instead of just storing it locally.
        .state('hauul.location-picker-update', {
            url: '/location-picker-update/:role',
            templateUrl: 'templates/hauul/location-picker-update.html',
            controller: 'LocationPickerUpdateCtrl'
        })

        // Choose booking photos
        .state('hauul.attach_photo', {
            url: '/attach-photo',
            templateUrl: 'templates/hauul/attach-photo.html',
            controller: 'AttachPhotoCtrl'
        })

        //  Add Booking Info
        .state('hauul.add_description', {
            url: '/add-description',
            templateUrl: 'templates/hauul/add-description.html',
            controller: 'AddDescriptionCtrl'
        })

        // Choose payment method
        .state('hauul.payment_method', {
            url: '/payment-method',
            templateUrl: 'templates/hauul/payment-method.html',
            controller: 'PaymentMethodCtrl'
        })

        // Add Payment method
        .state('hauul.payment_method_add', {
            url: '/payment_method_add',
            templateUrl: 'templates/hauul/payment-method-add.html',
            controller: 'PaymentMethodAddCtrl'
        })

        // Find a driver
        .state('hauul.finding', {
            url: '/finding',
            templateUrl: 'templates/hauul/finding.html',
            controller: 'FindingCtrl'
        })

        // Show driver profile
        .state('hauul.driver', {
            url: '/driver',
            templateUrl: 'templates/hauul/driver.html',
            controller: 'DriverCtrl'
        })

        // Tracking driver position
        .state('hauul.tracking', {
            url: '/tracking',
            templateUrl: 'templates/hauul/tracking.html',
            controller: 'TrackingCtrl'
        })

        // Show history
        .state('hauul.history', {
            url: '/history&page=:page',
            templateUrl: 'templates/hauul/history-list.html',
            controller: 'HistoryListCtrl'
        })

        .state('hauul.history_trip_id', {
            url: '/history/page=:page/trip_id=:trip_id',
            templateUrl: 'templates/hauul/history.html',
            controller: 'HistoryCtrl'
        })

        // Show notifications
        .state('hauul.notification', {
            url: '/notification',
            templateUrl: 'templates/hauul/notification.html',
            controller: 'NotificationCtrl'
        })

        // Support form
        .state('hauul.support', {
            url: '/support',
            templateUrl: 'templates/hauul/support.html',
            controller: 'SupportCtrl'
        })

        // Profile page
        .state('hauul.profile', {
            url: '/profile',
            templateUrl: 'templates/hauul/profile.html',
            controller: 'ProfileCtrl'
        })

        // Legal page
        .state('hauul.legal', {
            url: '/legal',
            templateUrl: 'templates/hauul/legal.html',
            controller: 'LegalCtrl'
        })

        // template app states:
        .state('app', {
                url: '/app',
                abstract: true,
                controller: 'AppController',
                templateUrl: 'templates/menu.html'
            })
            .state('app.gallery', {
                url: "/gallery",
                cache: false,
                views: {
                    viewContent: {
                        templateUrl: "templates/gallery.html",
                        controller: 'GalleryController'
                    }
                }
            })
            .state('app.item', {
                url: "/item/{title}",
                params: {
                    color: null,
                    icon: null
                },
                cache: false,
                views: {
                    viewContent: {
                        templateUrl: "templates/item.html",
                        controller: 'ItemController'
                    }
                }
            });

        $urlRouterProvider.otherwise(function($injector, $location) {
            var $state = $injector.get("$state");
            $state.go("app-start");
        });
    }
]);

And here’s the controller:


(function() {
    
    var AppStartCtrl = function ($scope, $log, $state, $ionicHistory, $ionicPopup, $ionicDeploy ) {
        $log.log( "AppStartCtrl: Initialized..." );
        
        $ionicDeploy.check().then(function (snapshotAvailable) {
              if (snapshotAvailable) {
                  // When snapshotAvailable is true, you can apply the snapshot
                  $ionicDeploy.download().then(function () {
                      console.log( "deploy extracting..." );
                      return $ionicDeploy.extract();
                  }).then(function () {
                      console.log( "deploy.load()..." );
                      $ionicPopup.show({
                        title: 'Update available',
                        subTitle: 'An update was just downloaded. New features will be available when you restart the app.',
                        buttons: [
                          { text: 'Not now' },
                          {
                            text: 'Restart',
                            onTap: function(e) {
                              $ionicDeploy.load();
                            }
                          }
                        ]
                      });
                    
                      //$ionicDeploy.load();
                  });
              } else {
                  // No updates found, delete old snapshots now
                  $ionicDeploy.info().then(function (info) {
                      $ionicDeploy.getSnapshots().then(function (snapshots) {
                          // snapshots will be an array of snapshot uuids
                          angular.forEach(snapshots, function (value, key) {
                              if (value !== undefined && value !== info.deploy_uuid) {
                                  console.log("Deleting snapshot", value);
                                  $ionicDeploy.deleteSnapshot(value);
                              }
                          });
                          // You app logic starts here, in my case it's just loading the "login" state
                      });
                  });
              }
          });
    };

    AppStartCtrl.$inject = ['$scope', '$log', '$state', '$ionicHistory', '$ionicPopup','$ionicDeploy' ];

    angular.module('App')
      .controller( 'AppStartCtrl', AppStartCtrl);
    
}());

Thanks! I’ve been meaning to do what you did on the back button, I like the way you’re doing it!

Onto the error: I can’t see anything obvious. Based on the fact that it started after you installed deploy, my only guess here is: are you passing a real app_id in the $ionicCloudProvider.init? I assume you replaced with ‘****’ for privacy, but it’s still worth asking.

Yup I have the real appID there. It’s probably something to do with the
uiGmapsgooglemap plugin.

Sorry I couldn’t be more helpful. If it is a plugin issue, there’s the classic removing plugin, removing platform and re-adding them that seems to work wonders. Another usually helpful one is removing the node_modules directory and typing “npm install” to force it to get re-download the package.json contents. Those are not targeted your problem in particular, just things I do when I run out of ideas.

If you do plan on doing them, leave a fair amount of time for the node_modules one, it can take 10-20 minutes

No worries you’ve helped a lot already!

I think I’m closing in on the reason the app is not running…

I’ve changed up my code to load the uiGmapgoogle-maps directive async as per their documentation at: http://angular-ui.github.io/angular-google-maps/#!/api/GoogleMapApi

I noticed from the chrome inspector on my device running the app that the following script tag was injected into my index.html was: (I think all i need to do now is figure out how to make the directive inject the http://maps.googleapis… instead


<script src="//maps.googleapis.com/maps/api/js?key=AIzaSyBMq_PXDP30UQNFfmvsTY89QV-65IoX8ms&libraries=places"></script>
GET file://maps.googleapis.com/maps/api/js?key=AIzaSyBMq_PXDP30UQNFfmvsTY89QV-65IoX8ms&libraries=places net::ERR_FILE_NOT_FOUND

I just ran into another issue with the App after ionicDeploy.load():


angular-simple-logger.min.js?ionicCachebuster=40163:1 Uncaught ReferenceError: angular is not defined
    at Object.o.1.debug (angular-simple-logger.min.js?ionicCachebuster=40163:1)
    at t (angular-simple-logger.min.js?ionicCachebuster=40163:1)
    at e (angular-simple-logger.min.js?ionicCachebuster=40163:1)
    at angular-simple-logger.min.js?ionicCachebuster=40163:1

But when I check the index.html file in the Chrome Inspector… It looks like the following 4 script tags went missing:

    <script src="lib/lodash/lodash.js"></script>
    <!-- ionic/angularjs js -->
    <script src="lib/ionic/js/ionic.bundle.js"></script>
    <!-- ionic cloud services -->
    <script src="lib/ionic.cloud.min.js"></script>
    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>

Here’s the of the html file after the app is re-loaded vis ionicDeploy.load(): (not sure if you’ve come across this before? )

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no,width=device-width">
    <title></title>
    <!--<link href="lib/ionic/css/ionic.css" rel="stylesheet">
		<link href="css/animate.css" rel="stylesheet">
		<link href="css/ionic-animated-modal.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">-->
    <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
    <link href="css/ionic.app.css" rel="stylesheet">
    -->
    <link href="css/ionic.app.css?ionicCachebuster=40163" rel="stylesheet">
    <script src="file:///android_asset/www/cordova.js"></script>
    <script src="lib/angular-simple-logger/dist/angular-simple-logger.min.js?ionicCachebuster=40163"></script>
    <script src="lib/angular-google-maps/dist/angular-google-maps.min.js?ionicCachebuster=40163"></script>
    <!--<script src="lib/pubnub/dist/web/pubnub.min.js"></script>
    <script src="lib/pubnub-angular/dist/pubnub-angular.min.js"></script>-->
    <script src="lib/pubnub/web/pubnub.js?ionicCachebuster=40163"></script>
    <script src="lib/pubnub-angular/dist/pubnub-angular-3.2.1.js?ionicCachebuster=40163"></script>
    <script type="text/javascript" src="https://js.stripe.com/v2/?ionicCachebuster=40163"></script>
    <script src="file:///android_asset/www/cordova_plugins.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-camera/www/CameraConstants.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-camera/www/CameraPopoverOptions.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-camera/www/Camera.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-camera/www/CameraPopoverHandle.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-device/www/device.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-dialogs/www/notification.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-dialogs/www/android/notification.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/DirectoryEntry.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/DirectoryReader.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/Entry.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/File.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileEntry.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileError.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileReader.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileSystem.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileUploadOptions.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileUploadResult.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/FileWriter.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/Flags.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/LocalFileSystem.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/Metadata.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/ProgressEvent.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/fileSystems.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/requestFileSystem.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/resolveLocalFileSystemURI.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/browser/isChrome.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/android/FileSystem.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/fileSystems-roots.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file/www/fileSystemPaths.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-geolocation/www/android/geolocation.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-geolocation/www/PositionError.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-inappbrowser/www/inappbrowser.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-network-information/www/network.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-network-information/www/Connection.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js"></script>
    <script src="file:///android_asset/www/plugins/cordova-plugin-statusbar/www/statusbar.js"></script>
    <script src="file:///android_asset/www/plugins/cordova.plugins.diagnostic/www/android/diagnostic.js"></script>
    <script src="file:///android_asset/www/plugins/phonegap-plugin-push/www/push.js"></script>
    <script src="file:///android_asset/www/plugins/ionic-plugin-deploy/www/ionicdeploy.js"></script>
    <script src="file:///android_asset/www/plugins/ionic-plugin-keyboard/www/android/keyboard.js"></script>
    <script type="text/javascript" src="lib/angular-payments/lib/angular-payments.js?ionicCachebuster=40163"></script>
    <script src="lib/vsGoogleAutocomplete/dist/vs-google-autocomplete.min.js?ionicCachebuster=40163"></script>
    <script src="lib/angular-timer/dist/angular-timer.min.js?ionicCachebuster=40163"></script>
    <script src="lib/moment/min/moment.min.js?ionicCachebuster=40163"></script>
    <script src="lib/moment/min/locales.min.js?ionicCachebuster=40163"></script>
    <script src="lib/humanize-duration/humanize-duration.js?ionicCachebuster=40163"></script>
    <!-- your app's js -->
    <script src="build/app.js?ionicCachebuster=40163"></script>
</head>

Here’s the of the html file after the app is re-loaded vis ionicDeploy.load(): (not sure if you’ve come across this before? )

No, never. So this is what your index.html gets changed to after deploy or it’s the html you see from inspecting?

But when I check the index.html file in the Chrome Inspector… It looks like the following 4 script tags went missing:

That would explain the “angular is not defined” issue, as I believe that comes in “ionic.bundle.js”

When looking at Angular Google Maps it mentions that you want to include angular.js and angular-simple-logger.js separately, perhaps it’s not able to get those modules from the ionic bundle?

So I did some more hacking, and I was able to get ionicdeploy to work by
using a new blank ionic starter and copying my www folder into it along
with my gulpfile, bower.json and package.json files, ran bower install and
npm install then ran ionic restore --plugins, after that I did a ionic
platform rm android then ionic platform add android. After that I was able
to get my app working with ionic deploy.

So there must of been something outside of the www folder that was causing
the issue.

Thanks for all your help! I’m happy I got it to work.

Hurray! It’s crazy how many problems end up involving platform rm and platform add as part of the solution!