cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kelvin Dart (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CB-5936) `cordova build` is not deleting the 'build' folder in platforms/ios
Date Wed, 29 Jan 2014 14:38:09 GMT

     [ https://issues.apache.org/jira/browse/CB-5936?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Kelvin Dart updated CB-5936:
----------------------------

    Description: 
It appears if `cordova build` doesn't execute properly a first time, then all subsequent times
it does not finish with the desired behaviour. Let me be explain further and why I think this
happens.

I started with a new project, first adding in a couple of cordova plugins (in order to replicate,
it doesn't matter which). I then added in the iOS platform and performed `cordova build` which
was fine and built as expected - all plugins installed fine.

I then altered a plugin and unbeknown to me at the time, I introduced an error to this plugin
which meant a plugin could not compile (I was blindly coding at the time - silly of me, I
know). Without knowing this, I executed `cordova build` again. It then failed, because presumably
xcodebuild could not complete due to my source file which could not compile - and as a result,
`cordova build` executed prematurely with an exit code something other than '0'. This is expected
behaviour thus far.

So I altered my plugin, updated my project with the new plugin code and thought I was good
to go again - I then executed `cordova build` again in order to fully build my Cordova project.
The CLI said this executed fine, but in reality it did not since no plugins were loaded. I
opened the *root* 'config.xml' (i.e. one under the Xcode project, _not_ in www) and the <feature>
tags had not been added (and so the app did not run) which is the indicator to say which plugins
are in your project.

After digging around, to fix this I had to remove 'build' in ./platforms/ios/ - then after
executing `cordova build` again, it started building fine - and the <feature> tags were
being added back in for each of my installed plugins.

After doing some investigation, I have found the issue why (and it should be a fairly quick
fix). These are the steps (with using a broken plugin) to replicate
1) As part of `cordova build` I _think_ the build script will copy the default cordova www
to all platforms temporarily (i.e. the index.html with no plugins except LocalStorage) which
includes the basic config.xml with no plugins.
2) The iOS project is then compiled with xcodebuild and as a result, the config.xml from the
default www is copied to the root of the Xcode project (remembering this is the basic ‘config.xml’
with no plugins).
3) It then attempts to compile the Xcode project - but with the broken plugin added, xcodebuild
fails - and the basic config.xml is left there.
4) At some point, the ‘build’ folder is created in ./platforms/ios/ which contains a build
of the cordova project.
5) Observe config.xml and notice that no <feature> tags are added.

After fixing the broken plugin, delete the build folder and execute `cordova build` again
and you will see the <feature> tags are added back in.

After that extremely long-winded explanation, in short, I think `cordova build` needs to remove
the ‘build’ folder as part of the cleanup step, as it seems to get some data from here
- and if that contains a broken plugin, then it’s going to cause problems in future.

I think that the Cordova uses the build folder to get some necessary files without the expense
of having to copy them from somewhere further down the directory structure (as an efficiency
step). So hopefully this is clear why it might cause a problem doing this. If it's necessary
to keep 'cordova build' the same, then maybe we can include, say, a -c flag which does a clean
and build and deletes the 'build' folder and cleans up the project before building it from
scratch again.

If you need further explanations, I’m happy to provide. I hope that makes sense!

  was:
It appears if `cordova build` doesn't execute properly a first time, then all subsequent times
it does not finish with the desired behaviour. Let me be explain further and why I think this
happens.

I started with a new project, first adding in a couple of cordova plugins (in order to replicate,
it doesn't matter which). I then added in the iOS platform and performed `cordova build` which
was fine and built as expected - all plugins installed fine.

I then altered a plugin and unbeknown to me at the time, I introduced an error to this plugin
which meant a plugin could not compile (I was blindly coding at the time - silly of me, I
know). Without knowing this, I executed `cordova build` again. It then failed, because presumably
xcodebuild could not complete due to my source file which could not compile - and as a result,
`cordova build` executed prematurely with an exit code something other than '0'. This is expected
behaviour thus far.

So I altered my plugin, updated my project with the new plugin code and thought I was good
to go again - I then executed `cordova build` again in order to fully build my Cordova project.
The CLI said this executed fine, but in reality it did not since no plugins were loaded. I
opened the ROOT 'config.xml' (i.e. one under the Xcode project, not in ‘www’) and the
<feature> tags had not been added (and so the app did not run) which is the indicator
to say which plugins are in your project.

After digging around, to fix this I had to remove 'build' in ./platforms/ios/ - then after
executing `cordova build` again, it started building fine - and the <feature> tags were
being added back in for each of my installed plugins.

After doing some investigation, I have found the issue why (and it should be a fairly quick
fix). These are the steps (with using a broken plugin) to replicate
1) As part of `cordova build` I *think* the build script will copy the default cordova www
to all platforms temporarily (i.e. the index.html with no plugins except LocalStorage) which
includes the basic config.xml with no plugins.
2) The iOS project is then compiled with xcodebuild and as a result, the config.xml from the
default www is copied to the root of the Xcode project (remembering this is the basic ‘config.xml’
with no plugins).
3) It then attempts to compile the Xcode project - but with the broken plugin added, xcodebuild
fails - and the basic config.xml is left there.
4) At some point, the ‘build’ folder is created in ./platforms/ios/ which contains a build
of the cordova project.
5) Observe config.xml and notice that no <feature> tags are added.

After fixing the broken plugin, delete the build folder and execute `cordova build` again
and you will see the <feature> tags are added back in.

After that extremely long-winded explanation, in short, I think `cordova build` needs to remove
the ‘build’ folder as part of the cleanup step, as it seems to get some data from here
- and if that contains a broken plugin, then it’s going to cause problems in future.

I think that the Cordova uses the build folder to get some necessary files without the expense
of having to copy them from somewhere further down the directory structure (as an efficiency
step). So hopefully this is clear why it might cause a problem doing this. If it's necessary
to keep 'cordova build' the same, then maybe we can include, say, a -c flag which does a clean
and build and deletes the 'build' folder and cleans up the project before building it from
scratch again.

If you need further explanations, I’m happy to provide. I hope that makes sense!


> `cordova build` is not deleting the 'build' folder in platforms/ios
> -------------------------------------------------------------------
>
>                 Key: CB-5936
>                 URL: https://issues.apache.org/jira/browse/CB-5936
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: CLI, iOS
>    Affects Versions: 3.3.0
>         Environment: Mavericks 10.9.1; Xcode 5; Cordova 3.3.1-0.1.2
>            Reporter: Kelvin Dart
>              Labels: build-failure, cordova, cordova-cli
>
> It appears if `cordova build` doesn't execute properly a first time, then all subsequent
times it does not finish with the desired behaviour. Let me be explain further and why I think
this happens.
> I started with a new project, first adding in a couple of cordova plugins (in order to
replicate, it doesn't matter which). I then added in the iOS platform and performed `cordova
build` which was fine and built as expected - all plugins installed fine.
> I then altered a plugin and unbeknown to me at the time, I introduced an error to this
plugin which meant a plugin could not compile (I was blindly coding at the time - silly of
me, I know). Without knowing this, I executed `cordova build` again. It then failed, because
presumably xcodebuild could not complete due to my source file which could not compile - and
as a result, `cordova build` executed prematurely with an exit code something other than '0'.
This is expected behaviour thus far.
> So I altered my plugin, updated my project with the new plugin code and thought I was
good to go again - I then executed `cordova build` again in order to fully build my Cordova
project. The CLI said this executed fine, but in reality it did not since no plugins were
loaded. I opened the *root* 'config.xml' (i.e. one under the Xcode project, _not_ in www)
and the <feature> tags had not been added (and so the app did not run) which is the
indicator to say which plugins are in your project.
> After digging around, to fix this I had to remove 'build' in ./platforms/ios/ - then
after executing `cordova build` again, it started building fine - and the <feature>
tags were being added back in for each of my installed plugins.
> After doing some investigation, I have found the issue why (and it should be a fairly
quick fix). These are the steps (with using a broken plugin) to replicate
> 1) As part of `cordova build` I _think_ the build script will copy the default cordova
www to all platforms temporarily (i.e. the index.html with no plugins except LocalStorage)
which includes the basic config.xml with no plugins.
> 2) The iOS project is then compiled with xcodebuild and as a result, the config.xml from
the default www is copied to the root of the Xcode project (remembering this is the basic
‘config.xml’ with no plugins).
> 3) It then attempts to compile the Xcode project - but with the broken plugin added,
xcodebuild fails - and the basic config.xml is left there.
> 4) At some point, the ‘build’ folder is created in ./platforms/ios/ which contains
a build of the cordova project.
> 5) Observe config.xml and notice that no <feature> tags are added.
> After fixing the broken plugin, delete the build folder and execute `cordova build` again
and you will see the <feature> tags are added back in.
> After that extremely long-winded explanation, in short, I think `cordova build` needs
to remove the ‘build’ folder as part of the cleanup step, as it seems to get some data
from here - and if that contains a broken plugin, then it’s going to cause problems in future.
> I think that the Cordova uses the build folder to get some necessary files without the
expense of having to copy them from somewhere further down the directory structure (as an
efficiency step). So hopefully this is clear why it might cause a problem doing this. If it's
necessary to keep 'cordova build' the same, then maybe we can include, say, a -c flag which
does a clean and build and deletes the 'build' folder and cleans up the project before building
it from scratch again.
> If you need further explanations, I’m happy to provide. I hope that makes sense!



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Mime
View raw message