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

Cordova ios handles project rename incorrectly

VotersWatch issueWatchersLinkUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

      Description

      When application name is changed in `config.xml`, following call to `prepare` changes the ios project structure within platforms/ios directory. Though some internal properties of ios platformApi are not changed and still point to old paths. This causes the following `plugn add` call to fail.

      Notice that the bug can be reproduced only if prepare and plugin add bot h called within one node process, i.e. programmatically.

      Here is a snippet that can help reproduce the problem (run npm install cordova@6.1.0 first):

      var Q = require('q');
      var tmp = require('tmp');
      var path = require('path');
      var shell = require('shelljs');
      var events = require('cordova-lib').events;
      var cordova = require('cordova-lib').cordova;
      
      events.on('log', console.log).on('warn', console.warn);
      
      var CORDOVA = path.resolve('./node_modules/cordova/bin/cordova');
      
      // This is a repro for issue, similar to CB-10961 but it does repro even with the
      // fix for CB-10965 (https://issues.apache.org/jira/browse/CB-10965) checked in
      var case2 = Q(tmp.dirSync().name)
      .then(function (tempDir) {
          shell.exec(CORDOVA + ' create ' + tempDir + ' com.app1 app1 -d');
          shell.pushd(tempDir);
      })
      .then(function () {
          return cordova.raw.platform('add', ['d:/cordova/cordova-ios']);
      })
      .then(function () {
          shell.sed('-i', '<name>app1</name>', '<name>app2</name>', 'config.xml');
          return cordova.raw.prepare([PLATFORM]);
      })
      .then(function () {
          return cordova.raw.plugin('add', ['cordova-plugin-camera'], {save: true});
      });
      

      The snippet above will throw the following error (similar to what described in CB-10961)

      Failed to install 'cordova-plugin-camera':Error: ENOENT: no such file or directory, open 'C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\app1.xcodeproj\project.pbxproj'
          at Error (native)
          at Object.fs.openSync (fs.js:584:18)
          at Object.fs.writeFileSync (fs.js:1224:33)
          at Object.cachedProjectFiles.(anonymous function).write (C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\lib\projectFile.js:73:16)
          at C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\lib\plugman\Plugman.js:84:21
          at _fulfilled (C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\node_modules\q\q.js:834:54)
          at self.promiseDispatch.done (C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\node_modules\q\q.js:863:30)
          at Promise.promise.promiseDispatch (C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\node_modules\q\q.js:796:13)
          at C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\node_modules\q\q.js:857:14
          at runSingle (C:\Users\VLADIM~1.KOT\AppData\Local\Temp\tmp-13756pWNNAgPv8e9b\platforms\ios\cordova\node_modules\q\q.js:137:13)
      

      even after fix for CB-10965 applied (checked in cordova-common with patch for CB-10965 merged in)

        Attachments

        Issue Links

          Activity

            People

            • Assignee:
              vladimir.kotikov Vladimir Kotikov
              Reporter:
              vladimir.kotikov Vladimir Kotikov

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment