Search code examples
google-mapscordovaionic-frameworknpmcordova-ios

Can't update to the latest version of cordova-ios


My app, built with Ionic and Cordova, includes the plugin GoogleMaps version 2.6.2 (the most recent), but it has not been loaded on iOS for a month, and Android still works.

I only have taken this product from a colleague and I am a total beginner in terms of Cordova, Ionic and npm. In any case the error is that the plugin is no longer installed (as my console tells me in xCode). When I try to update Cordova-ios to the latest version (ionic cordova platform update ios), I only get the error message

> cordova platform update ios
Using cordova-fetch for cordova-ios@^5.0.0
Failed to fetch platform cordova-ios@^5.0.0
Probably this is either a connection problem, or platform spec is incorrect.
Check your connection and platform name / version / URL.
Error: npm: Command failed with exit code 1 Error output:
npm WARN @ ionic-native / google-maps @ 3.10.3 requires a peer of @ ionic-native / core @ ^ 3.6.0 but none is installed. You must install peer dependencies yourself.
npm WARN @ ngx-translate / core @ 9.1.1 requires a peer of @angular / core @> = 5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN The package @ types / node is included as both a dev and production dependency.

npm ERR! path /path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim
npm ERR! code EEXIST
npm ERR! Refusing to delete /path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim: is outside /path/to/app/node_modules / cordova-ios / node_modules / ios-sim and not a link
npm ERR! File exists: /path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim
npm ERR! Move it away, and try again.

npm ERR! A complete log of this can be found in:
npm ERR! /path/to/app/.npm/_logs/2019-05-23T06_41_36_667Z-debug.log
[ERROR] An error occurred while running subprocess cordova.
        
        cordova update ios exited with exit code 1.
        
        Re-running this command with the --verbose flag may provide more information.

What does that mean exactly? I wanted to uninstall the iOS platform (ionic cordova platform remove ios) and add new ones (cordova platform add ios@5.0.0), but already when I uninstall I get the following error:

ionic cordova platform remove ios
> cordova platform remove ios --save
Removing ios from cordova.platforms array in package.json
Error: npm: Command failed with exit code 1 Error output:
npm WARN @ionic-native/google-maps@3.10.3 requires a peer of @ionic-native/core@^3.6.0 but none is installed. You must install peer dependencies yourself.
npm WARN @ngx-translate/core@9.1.1 requires a peer of @angular/core@>=5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN The package @types/node is included as both a dev and production dependency.

npm ERR! path /path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim
npm ERR! code EEXIST
npm ERR! Refusing to delete /path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim: is outside /path/to/app/node_modules/cordova-ios/node_modules/ios-sim and not a link
npm ERR! File exists: /path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim
npm ERR! Move it away, and try again.

npm ERR! A complete log of this run can be found in:
npm ERR!     /path/to/app/.npm/_logs/2019-05-23T07_05_52_055Z-debug.log
    at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-common/src/superspawn.js:125:23)
    at ChildProcess.emit (events.js:196:13)
    at maybeClose (internal/child_process.js:1011:16)
    at Socket.<anonymous> (internal/child_process.js:416:11)
    at Socket.emit (events.js:196:13)
    at Pipe.<anonymous> (net.js:586:12) {
  stderr: 'npm WARN @ionic-native/google-maps@3.10.3 requires a peer of ' +
    '@ionic-native/core@^3.6.0 but none is installed. You must install peer ' +
    'dependencies yourself.\nnpm WARN @ngx-translate/core@9.1.1 requires a ' +
    'peer of @angular/core@>=5.0.0 but none is installed. You must install ' +
    'peer dependencies yourself.\nnpm WARN The package @types/node is ' +
    'included as both a dev and production dependency.\n\nnpm ERR! path ' +
    '/path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim\n' +
    'npm ERR! code EEXIST\nnpm ERR! Refusing to delete ' +
    '/path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim: ' +
    'is outside ' +
    '/path/to/app/node_modules/cordova-ios/node_modules/ios-sim ' +
    'and not a link\nnpm ERR! File exists: ' +
    '/path/to/app/node_modules/cordova-ios/node_modules/.bin/ios-sim\n' +
    'npm ERR! Move it away, and try again.\n\nnpm ERR! A complete log of this ' +
    'run can be found in:\nnpm ERR!     ' +
    '/path/to/app/.npm/_logs/2019-05-23T07_05_52_055Z-debug.log\n',
  code: 1
}
[ERROR] An error occurred while running subprocess cordova.

        cordova platform remove ios --save exited with exit code 1.

        Re-running this command with the --verbose flag may provide more information.

I have installed the following plugins:

> cordova plugin ls
cordova-plugin-datepicker 0.9.3 "DatePicker"
cordova-plugin-device 2.0.2 "Device"
cordova-plugin-geolocation 4.0.1 "Geolocation"
cordova-plugin-googlemaps 2.6.2 "cordova-plugin-googlemaps"
cordova-plugin-ionic-webview 4.0.1 "cordova-plugin-ionic-webview"
cordova-plugin-splashscreen 5.0.2 "Splashscreen"
cordova-plugin-statusbar 2.4.2 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova-sqlite-storage 2.6.0 "Cordova sqlite storage plugin"
ionic-plugin-keyboard 2.2.1 "Keyboard"
phonegap-plugin-push 1.11.1 "PushPlugin"

What exactly do I have to do to update cordova-ios to the latest version? What else do you need for information that I could give you? My Mac already has the latest operating system.

EDIT:

I ran rm -Rf platforms / node_modules / && npm install && ionic cordova platform add ios @ latest and now I get the following output on the console.

> fsevents@1.2.9 install / path / to / app / node_modules / fsevents
> node install

node-pre-gyp WARN Using request for node-pre-gyp https download
[fsevents] Success: "/path/to/app/node_modules/fsevents/lib/binding/Release/node-v72-darwin-x64/fse.node" is installed via remote

> node-sass@4.12.0 install / path / to / app / node_modules / node-sat
> node scripts / install.js

Cached binary found at /path/to/app/.npm/node-sass/4.12.0/darwin-x64-72_binding.node

> uglifyjs-webpack-plugin@0.4.6 postinstall / path / to / app / node_modules / uglifyjs-webpack-plugin
> node lib / post_install.js


> node-sass@4.12.0 postinstall / path / to / app / node_modules / node-sass
> node scripts / build.js

Binary found at /path/to/app/node_modules/node-sass/vendor/darwin-x64-72/binding.node
Testing binary
Binary is fine
npm WARN The package @ types / node is included as both a dev and production dependency.

added 1330 packages from 1442 contributors in 63.504s
> cordova platform add ios @ latest --save
Using cordova-fetch for cordova-ios @ latest
Adding ios project ...
Creating Cordova project for the iOS platform:
Path: platforms / ios
Package: com.gpsno
Name: GPS-No.com
iOS project created with cordova-ios@5.0.1
Installing "cordova-plugin-datepicker" for ios
Installing "cordova-plugin-device" for ios
Installing "cordova-plugin-geolocation" for ios
Installing "cordova-plugin-googlemaps" for ios
"framework" tag with type "podspec" is deprecated and will be removed. Please use the "podspec" tag.
cordova-plugin-googlemaps depends on GoogleMaps @ ~> 2.7.0, which conflicts with another plugin. GoogleMaps @ ~> 3.1.0 is already installed and was not overwritten.
Running command: pod install --verbose

      Official document https://github.com/mapsplugin/cordova-plugin-googlemaps-doc/blob/master/v2.6.0/README.md Please consider buying beer for us 🍺 https://github.com/mapsplugin/ cordova-plugin-google maps # buy-us-a-beer
    
Installing "cordova-plugin-ionic-webview" for ios
Installing "cordova-plugin-splashscreen" for ios
Installing "cordova-plugin-statusbar" for ios
Installing "cordova-plugin-whitelist" for ios
Installing "cordova-sqlite-storage" for ios
Failed to install 'cordova-sqlite-storage': CordovaError: Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.
    at Context.requireCordovaModule (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/Context.js:57:15)
    at module.exports (/path/to/app/plugins/cordova-sqlite-storage/scripts/beforePluginInstall.js:13:21)
    at runScriptViaModuleLoader (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:181:32)
    at runScript (/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:157:16)
    at /usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/hooks/HooksRunner.js:125:20
    at processTicksAndRejections (internal / process / task_queues.js: 89: 5)
Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.
[ERROR] An error occurred while running subprocess cordova.
        
        cordova platform add ios @ latest --save exited with exit code 1.
        
        Re-running this command with the --verbose flag may provide more information.

It looks like everything had worked out. Do I have to worry about the message

cordova-plugin-googlemaps depends on GoogleMaps @ ~> 2.7.0, which conflicts with another plugin. GoogleMaps @ ~> 3.1.0 is already installed and was not overwritten.

If so what can I do or remove?

How can I solve the problem

Installing "cordova-sqlite-storage" for ios
Failed to install 'cordova-sqlite-storage': CordovaError: Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.

Solution

  • Installing "cordova-sqlite-storage" for ios Failed to install 'cordova-sqlite-storage': CordovaError: Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.

    This is because you have cordova@9.0.0 CLI installed which removed support for use of requireCordovaModule by 3rd party plugins, but you have an old version of cordova-sqlite-storage plugin installed which makes use of requireCordovaModule. So you need to update your version of cordova-sqlite-storage plugin:

    cordova plugin rm cordova-sqlite-storage && cordova plugin add cordova-sqlite-storage@latest
    

    cordova-plugin-googlemaps depends on GoogleMaps @ ~> 2.7.0, which conflicts with another plugin. GoogleMaps @ ~> 3.1.0 is already installed and was not overwritten.

    Again probably due to an outdated version of cordova-plugin-googlemaps so update it:

    cordova plugin rm cordova-plugin-googlemaps --nosave && cordova plugin add cordova-plugin-googlemaps@latest
    

    Note the use of --nosave option when removing the plugin to preserve any plugin variables containing API keys.

    You should also check and update the other plugins in your project. An easy way to do this is using the cordova-check-plugins tool:

    npm install -g cordova-check-plugins
    cordova-check-plugins --unconstrain-versions --update=auto
    # or --update=interactive for interactive update process
    

    Disclaimer: I am the author of cordova-check-plugins

    Be aware when updating plugins that major version updates may contain breaking changes to APIs which your app makes use of, so you should be aware of this: checkout the changelog or commit history of plugins for which you are updating the major version and make any necessary API changes in your app.