Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
4.1.0
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)